From: Christopher Allan Webber Date: Fri, 23 Dec 2016 20:22:28 +0000 (-0600) Subject: irc: Move irc-bot code to make use of generic methods X-Git-Tag: v0.4.0~58 X-Git-Url: https://jxself.org/git/?p=8sync.git;a=commitdiff_plain;h=bc24c9f3f29d3396ae9e52f9682914dec868838a irc: Move irc-bot code to make use of generic methods ircbot.scm demo also now makes use of subclassing. * 8sync/systems/irc.scm (): Removed line-handler field. (irc-bot-dispatch-line): Renamed from irc-bot-dispatch-raw-line. All callers changed. (irc-bot-send-line): Moved position in file. (irc-bot-handle-line): New method. (irc-bot-handle-misc-input, irc-bot-handle-user-join) (irc-bot-handle-user-quit): New stub methods. * demos/ircbot.scm (): New variable. (irc-bot-handle-line): Now a generic method extending same named method in 8sync/systems/irc.scm. Previously was `handle-line'. (run-bot): Use . (main): Remove debugging pk. --- diff --git a/8sync/systems/irc.scm b/8sync/systems/irc.scm index e912e5f..01a83c8 100755 --- a/8sync/systems/irc.scm +++ b/8sync/systems/irc.scm @@ -33,8 +33,10 @@ #:use-module (ice-9 match) #:use-module (oop goops) #:export ( - irc-bot-username irc-bot-server irc-bot-channels - irc-bot-port irc-bot-handler + irc-bot-username irc-bot-server irc-bot-channels irc-bot-port + + irc-bot-handle-line irc-bot-handle-misc-input + irc-bot-handle-user-join irc-bot-handle-user-quit default-irc-port)) @@ -157,9 +159,6 @@ (port #:init-keyword #:port #:init-value default-irc-port #:getter irc-bot-port) - (line-handler #:init-keyword #:line-handler - #:init-value (wrap-apply echo-message) - #:getter irc-bot-line-handler) (socket #:accessor irc-bot-socket) (actions #:allocation #:each-subclass #:init-value (build-actions @@ -193,7 +192,7 @@ (define (irc-bot-main-loop irc-bot message) (define socket (irc-bot-socket irc-bot)) (define line (string-trim-right (read-line socket) #\return)) - (irc-bot-dispatch-line irc-bot line) + (irc-bot-dispatch-raw-line irc-bot line) (cond ;; The port's been closed for some reason, so stop looping ((port-closed? socket) @@ -213,9 +212,18 @@ (else (<- irc-bot (actor-id irc-bot) 'main-loop)))) -(define-method (irc-bot-dispatch-line (irc-bot ) line) +(define* (irc-bot-send-line irc-bot message + channel line #:key emote?) + ;; TODO: emote? handling + (format (irc-bot-socket irc-bot) "PRIVMSG ~a :~a~a" + channel line irc-eol)) + +;;; Likely-to-be-overridden generic methods + +(define-method (irc-bot-dispatch-raw-line (irc-bot ) raw-line) + "Dispatch a raw line of input" (receive (line-prefix line-command line-params) - (parse-line line) + (parse-line raw-line) (match line-command ("PING" (display "PONG" (irc-bot-socket irc-bot))) @@ -223,14 +231,21 @@ (receive (channel-name line-text emote?) (condense-privmsg-line line-params) (let ((username (irc-line-username line-prefix))) - ((irc-bot-line-handler irc-bot) irc-bot username - channel-name line-text emote?)))) - (_ - (display line) - (newline))))) + (irc-bot-handle-line irc-bot username channel-name + line-text emote?)))) + (_ (irc-bot-handle-misc-input irc-bot raw-line))))) + +(define-method (irc-bot-handle-line (irc-bot ) username channel-name + line-text emote?) + (echo-message irc-bot username channel-name line-text emote?)) + +(define-method (irc-bot-handle-misc-input (irc-bot ) raw-line) + (display raw-line) + (newline)) + +(define-method (irc-bot-handle-user-join (irc-bot ) user channel) + 'TODO) + +(define-method (irc-bot-handle-user-quit (irc-bot ) user channel) + 'TODO) -(define* (irc-bot-send-line irc-bot message - channel line #:key emote?) - ;; TODO: emote? handling - (format (irc-bot-socket irc-bot) "PRIVMSG ~a :~a~a" - channel line irc-eol)) diff --git a/demos/ircbot.scm b/demos/ircbot.scm index ec381f0..bfcd723 100755 --- a/demos/ircbot.scm +++ b/demos/ircbot.scm @@ -22,10 +22,14 @@ (use-modules (8sync) (8sync systems irc) + (oop goops) (srfi srfi-37) (ice-9 match)) -(define (handle-line irc-bot speaker channel line emote?) +(define-class ()) + +(define-method (irc-bot-handle-line (irc-bot ) speaker channel + line emote?) (define my-name (irc-bot-username irc-bot)) (define (looks-like-me? str) (or (equal? str my-name) @@ -95,9 +99,7 @@ (repl #f)) (define hive (make-hive)) (define irc-bot - (hive-create-actor* hive "irc-bot" - #:line-handler handle-line - ;; TODO: move these to argument parsing + (hive-create-actor* hive "irc-bot" #:username username #:server server #:channels channels)) @@ -105,7 +107,7 @@ (ez-run-hive hive (list (bootstrap-message hive irc-bot 'init)))) (define (main args) - (define parsed-args (parse-args "ircbot.scm" (pk 'args args))) + (define parsed-args (parse-args "ircbot.scm" args)) (apply (lambda* (#:key username #:allow-other-keys) (when (not username) (display "Error: username not specified!")