X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=eightsync%2Fsystems%2Firc.scm;h=5b963d848ed0dbd4332807553f57ca4951021641;hb=747d7a069f758541879be7628d33b7e989d4485b;hp=bf450b94efc526ef680e9472c7804438b5386ee9;hpb=075e98771e55ff073873ffb5e7ca3b2d158ac25a;p=8sync.git diff --git a/eightsync/systems/irc.scm b/eightsync/systems/irc.scm index bf450b9..5b963d8 100755 --- a/eightsync/systems/irc.scm +++ b/eightsync/systems/irc.scm @@ -30,7 +30,7 @@ #:use-module (ice-9 match) #:export (;; The only things you definitely need if writing a bot make-irc-bot-cli - irc-format irc-display + irc-format irc-display irc-send-message irc-send-formatted ;; Useful things if you're making something more complicated irc-line @@ -91,6 +91,14 @@ (display (irc-line line) dest) (display (irc-line dest)))) +(define (irc-send-message socket channel message) + (irc-format socket "PRIVMSG ~a :~a" channel message)) + +(define-syntax-rule (irc-send-formatted socket channel format-string + args ...) + (irc-format socket "PRIVMSG ~a :~a" channel + (format #f format-string args ...))) + (define* (handle-login socket username #:key (hostname "*") @@ -187,7 +195,7 @@ (string-join (cons first-word rest-message) " ") #f))))) -(define (echo-back-message my-name speaker +(define (echo-back-message socket my-name speaker channel-name message is-action) (if is-action (format #t "~a emoted ~s in channel ~a\n" @@ -208,7 +216,8 @@ (receive (channel-name message is-action) (condense-privmsg-line (irc-line-params parsed-line)) (let ((username (irc-line-username parsed-line))) - (handle-privmsg my-username username channel-name message is-action)))) + (handle-privmsg socket my-username username + channel-name message is-action)))) (_ (display line) (newline))))) @@ -225,12 +234,14 @@ (set! buffer (cons (read-char socket) buffer)) (match buffer ((#\newline #\return (? char? line-chars) ...) - (%sync (%run (handle-line - socket - (list->string (reverse line-chars)) - username))) - ;; reset buffer - (set! buffer '())) + (let ((ready-line (list->string (reverse line-chars)))) + ;; reset buffer + (set! buffer '()) + ;; run it + (%8sync (%run (handle-line + socket + ready-line + username))))) (_ #f)))) irc-handler)) @@ -273,7 +284,9 @@ (channels (value #t)) (listen))) -(define* (make-irc-bot-cli #:optional (line-handler default-line-handler)) +(define* (make-irc-bot-cli #:optional + (line-handler default-line-handler) + (print-and-continue-on-error #t)) (define (main args) (let* ((options (getopt-long args option-spec)) (hostname (option-ref options 'server #f)) @@ -282,7 +295,9 @@ (username (option-ref options 'username #f)) (listen (option-ref options 'listen #f)) (channels (option-ref options 'channels "")) - (agenda (make-agenda))) + (agenda (if print-and-continue-on-error + (make-agenda #:pre-unwind-handler print-error-and-continue) + (make-agenda)))) (display `((server ,hostname) (port ,port) (username ,username) (listen ,listen) (channels-split ,(string-split channels #\space)))) (newline) @@ -298,4 +313,3 @@ main) (define main (make-irc-bot-cli)) -