irc-search-bot/src/irc_search_bot/bot.clj

64 lines
1.5 KiB
Clojure

(ns irc-search-bot.bot
(:import [org.pircbotx PircBotX Channel User]
[org.pircbotx.hooks Event Listener])
(:use [clojure.string :only [join lower-case]]))
(defn spy [o] (do (println o) o))
(defmulti event-listener
(fn [^PircBotX bot ^Event event]
(->>
event
class
(.getSimpleName)
;(spy)
(re-seq #"([A-Z][^A-Z]*)")
butlast
(map first)
(map lower-case)
(join "-")
keyword)))
(defn make-bot [name]
(doto (PircBotX.)
(.setName name)
(.setLogin name)
(..
(getListenerManager)
(addListener
(proxy [Listener] []
(onEvent [^Event e]
(try
(event-listener (.getBot e) e)
(catch Exception e
(.printStackTrace e)))))))))
(defmethod event-listener :default [bot ev])
(defn connect-bot [^PircBotX bot server channel]
(doto bot
(.connect server)
(.joinChannel channel)))
(defn disconnect-bot [^PircBotX bot]
(doto bot (.disconnect)))
(defn join-channel [^PircBotX bot channel]
(doto bot
(.joinChannel
(if (instance? Channel channel)
(.getName ^Channel channel)
channel))))
(defn send-message [^PircBotX bot channel message]
(doto bot
(.sendMessage
(if (instance? Channel channel) channel (.getChannel bot channel))
message)))
(defn send-prv-message [^PircBotX bot user message]
(doto bot
(.sendMessage
(if (instance? User user) user (.getUser bot user))
message)))