Refactored message handlers
This commit is contained in:
parent
68602f3942
commit
e01f05c5f2
@ -149,7 +149,8 @@
|
|||||||
(write-lines filename line-list)))
|
(write-lines filename line-list)))
|
||||||
|
|
||||||
(defn send-message [bot channel message]
|
(defn send-message [bot channel message]
|
||||||
(.sendMessage bot channel message))
|
(do (println ">> Sending message:" message)
|
||||||
|
(.sendMessage bot channel message)))
|
||||||
|
|
||||||
(defn send-action [bot channel action]
|
(defn send-action [bot channel action]
|
||||||
(.sendAction bot channel action))
|
(.sendAction bot channel action))
|
||||||
@ -178,6 +179,21 @@
|
|||||||
(.setBotName bot-name)))
|
(.setBotName bot-name)))
|
||||||
|
|
||||||
(defn create-on-message-callback
|
(defn create-on-message-callback
|
||||||
|
[message-reaction-fns default-fn msg-count]
|
||||||
|
(fn [bot channel sender login hostname message]
|
||||||
|
(let [message (trim message)]
|
||||||
|
(try
|
||||||
|
(swap! msg-count inc)
|
||||||
|
(loop [message-reaction-fns message-reaction-fns]
|
||||||
|
(if (empty? message-reaction-fns)
|
||||||
|
(default-fn bot channel sender login hostname message)
|
||||||
|
(let [[pred reaction] (first message-reaction-fns)]
|
||||||
|
(if (pred bot channel sender login hostname message)
|
||||||
|
(reaction bot channel sender login hostname message)
|
||||||
|
(recur (next message-reaction-fns))))))
|
||||||
|
(catch Exception e (.printStackTrace e))))))
|
||||||
|
|
||||||
|
(defn create-message-reaction-fns
|
||||||
[trained-map-atom
|
[trained-map-atom
|
||||||
startphrase-list-atom
|
startphrase-list-atom
|
||||||
endphrase-set-atom
|
endphrase-set-atom
|
||||||
@ -187,86 +203,100 @@
|
|||||||
save-interval
|
save-interval
|
||||||
speak-interval
|
speak-interval
|
||||||
min-sentence-length
|
min-sentence-length
|
||||||
max-sentence-length]
|
max-sentence-length
|
||||||
(let [msg-count (atom 0)
|
msg-count]
|
||||||
bot-talking? (atom true)]
|
(let [bot-talking? (atom true)
|
||||||
(fn [bot channel sender login hostname message]
|
message-reaction-fns
|
||||||
(let [speak-about-pattern (re-pattern (str "speak about (.*) " (Pattern/quote (.getNick bot))))
|
[
|
||||||
message (trim message)
|
;shutup handler
|
||||||
create-statement-and-send
|
[(fn [bot _ _ _ _ message] (= message (str "shutup " (.getNick bot))))
|
||||||
(fn
|
(fn [bot channel _ _ _ _]
|
||||||
([]
|
(do (println "Shutting up")
|
||||||
(let [sentence
|
(reset! bot-talking? false)
|
||||||
(create-sentence
|
(send-action bot channel "shuts up")
|
||||||
@trained-map-atom
|
(change-nick bot (str (.getName bot) "|muted"))))]
|
||||||
@startphrase-list-atom
|
|
||||||
@endphrase-set-atom
|
;talk handler
|
||||||
min-sentence-length
|
[(fn [bot _ _ _ _ message] (= message (str "talk " (.getNick bot))))
|
||||||
max-sentence-length)]
|
(fn [bot channel _ _ _ _]
|
||||||
(println ">> Sending message:" sentence)
|
(do (println "Talking")
|
||||||
(send-message bot channel sentence)))
|
(reset! bot-talking? true)
|
||||||
([start]
|
(send-action bot channel "can talk now")
|
||||||
(let [sentence
|
(change-nick bot (.getName bot))))]
|
||||||
(create-sentence
|
|
||||||
[start]
|
;speak handler
|
||||||
@trained-map-atom
|
[(fn [bot _ _ _ _ message] (= message (str "speak " (.getNick bot))))
|
||||||
@startphrase-list-atom
|
(fn [bot channel _ _ _ message]
|
||||||
@endphrase-set-atom
|
(do (println "Replying to speak command:" message)
|
||||||
min-sentence-length
|
(send-message bot channel
|
||||||
max-sentence-length)]
|
(create-sentence
|
||||||
(println ">> Sending message:" sentence)
|
@trained-map-atom
|
||||||
(send-message bot channel sentence))))]
|
@startphrase-list-atom
|
||||||
(try
|
@endphrase-set-atom
|
||||||
(swap! msg-count inc)
|
min-sentence-length
|
||||||
(cond
|
max-sentence-length))))]
|
||||||
(= message (str "shutup " (.getNick bot)))
|
|
||||||
(do (println "Shutting up")
|
;speak about handler
|
||||||
(reset! bot-talking? false)
|
[(fn [bot _ _ _ _ message]
|
||||||
(send-action bot channel "shuts up")
|
(not
|
||||||
(change-nick bot (str (.getName bot) "|muted")))
|
(nil?
|
||||||
(= message (str "talk " (.getNick bot)))
|
(re-matches
|
||||||
(do (println "Talking")
|
(re-pattern
|
||||||
(reset! bot-talking? true)
|
(str "speak about (.*) " (Pattern/quote (.getNick bot))))
|
||||||
(send-action bot channel "can talk now")
|
message))))
|
||||||
(change-nick bot (.getName bot)))
|
(fn [bot channel _ _ _ message]
|
||||||
(= message (str "speak " (.getNick bot)))
|
(do (println "Replying to speak about command:" message)
|
||||||
(do (println "Replying to speak command:" message)
|
(->>
|
||||||
(create-statement-and-send))
|
message
|
||||||
(not (nil? (re-matches speak-about-pattern message)))
|
(re-matches
|
||||||
(do (println "Replying to speak about command:" message)
|
(re-pattern
|
||||||
(->>
|
(str "speak about (.*) " (Pattern/quote (.getNick bot)))))
|
||||||
message
|
second
|
||||||
(re-matches speak-about-pattern)
|
(split #"\s+")
|
||||||
second
|
first
|
||||||
(split #"\s+")
|
lower-case
|
||||||
first
|
(fn [start]
|
||||||
lower-case
|
(send-message bot channel
|
||||||
create-statement-and-send))
|
(create-sentence
|
||||||
:else
|
[start]
|
||||||
(do
|
@trained-map-atom
|
||||||
(doseq [line (sentencize-text message)]
|
@startphrase-list-atom
|
||||||
(let [urls (map first (re-seq url-pattern line))]
|
@endphrase-set-atom
|
||||||
(if (not (empty? urls))
|
min-sentence-length
|
||||||
(doseq [url urls] (println "Url Found >" url))
|
max-sentence-length))))))]]
|
||||||
(when-not (= 1 (count (tokenize-line line)))
|
|
||||||
(do
|
default-fn
|
||||||
(println ">" sender ":" line)
|
(fn [bot channel sender _ _ message]
|
||||||
(process-line
|
(do
|
||||||
line
|
(doseq [line (sentencize-text message)]
|
||||||
trained-map-atom
|
(let [urls (map first (re-seq url-pattern line))]
|
||||||
startphrase-list-atom
|
(if (not (empty? urls))
|
||||||
endphrase-set-atom
|
(doseq [url urls] (println "Url Found >" url))
|
||||||
line-list-atom
|
(when-not (= 1 (count (tokenize-line line)))
|
||||||
key-size
|
(do
|
||||||
history-size)
|
(println ">" sender ":" line)
|
||||||
(when (and
|
(process-line
|
||||||
@bot-talking?
|
line
|
||||||
(<= (rand) (/ 1 speak-interval)))
|
trained-map-atom
|
||||||
(create-statement-and-send)))))))
|
startphrase-list-atom
|
||||||
(when (zero? (mod @msg-count save-interval))
|
endphrase-set-atom
|
||||||
(println "Saving memory")
|
line-list-atom
|
||||||
(save-memory bot @line-list-atom))))
|
key-size
|
||||||
(catch Exception e (.printStackTrace e)))))))
|
history-size)
|
||||||
|
(when (and
|
||||||
|
@bot-talking?
|
||||||
|
(<= (rand) (/ 1 speak-interval)))
|
||||||
|
(send-message bot channel
|
||||||
|
(create-sentence
|
||||||
|
@trained-map-atom
|
||||||
|
@startphrase-list-atom
|
||||||
|
@endphrase-set-atom
|
||||||
|
min-sentence-length
|
||||||
|
max-sentence-length))))))))
|
||||||
|
(when (zero? (mod @msg-count save-interval))
|
||||||
|
(println "Saving memory")
|
||||||
|
(save-memory bot @line-list-atom))))]
|
||||||
|
[message-reaction-fns default-fn]))
|
||||||
|
|
||||||
(defn run-bot
|
(defn run-bot
|
||||||
[server
|
[server
|
||||||
@ -278,12 +308,14 @@
|
|||||||
speak-interval
|
speak-interval
|
||||||
min-sentence-length
|
min-sentence-length
|
||||||
max-sentence-length]
|
max-sentence-length]
|
||||||
(let [trained-map-atom (atom {})
|
(let [key-size (if (or (< key-size 0) (> key-size 2)) 2 key-size)
|
||||||
|
trained-map-atom (atom {})
|
||||||
startphrase-list-atom (atom [])
|
startphrase-list-atom (atom [])
|
||||||
endphrase-set-atom (atom #{})
|
endphrase-set-atom (atom #{})
|
||||||
line-list-atom (atom [])
|
line-list-atom (atom [])
|
||||||
on-message-callback
|
msg-count (atom 0)
|
||||||
(create-on-message-callback
|
[message-reaction-fns default-fn]
|
||||||
|
(create-message-reaction-fns
|
||||||
trained-map-atom
|
trained-map-atom
|
||||||
startphrase-list-atom
|
startphrase-list-atom
|
||||||
endphrase-set-atom
|
endphrase-set-atom
|
||||||
@ -293,7 +325,10 @@
|
|||||||
save-interval
|
save-interval
|
||||||
speak-interval
|
speak-interval
|
||||||
min-sentence-length
|
min-sentence-length
|
||||||
max-sentence-length)
|
max-sentence-length
|
||||||
|
msg-count)
|
||||||
|
on-message-callback
|
||||||
|
(create-on-message-callback message-reaction-fns default-fn msg-count)
|
||||||
bot (make-bot bot-name
|
bot (make-bot bot-name
|
||||||
on-message-callback
|
on-message-callback
|
||||||
(fn [bot sender login hostname target action]
|
(fn [bot sender login hostname target action]
|
||||||
@ -309,6 +344,13 @@
|
|||||||
(do (println "Kicked. Rejoining.")
|
(do (println "Kicked. Rejoining.")
|
||||||
(.joinChannel bot channel))))]
|
(.joinChannel bot channel))))]
|
||||||
(println "Running" bot-name "on" server channel)
|
(println "Running" bot-name "on" server channel)
|
||||||
|
(println "Configuration:")
|
||||||
|
(println "> key size =" key-size)
|
||||||
|
(println "> history size =" history-size)
|
||||||
|
(println "> save interval =" save-interval)
|
||||||
|
(println "> speak interval =" speak-interval)
|
||||||
|
(println "> min sentence length =" min-sentence-length)
|
||||||
|
(println "> max sentence length =" max-sentence-length)
|
||||||
(doto bot
|
(doto bot
|
||||||
(recall-memory
|
(recall-memory
|
||||||
trained-map-atom
|
trained-map-atom
|
||||||
|
Loading…
Reference in New Issue
Block a user