X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=demos%2Fircbot.scm;h=81940fc66744e86206e9449922d1fb6dba44f3ec;hb=38afa0b278e17953b64764d800beaaa6368f70be;hp=b962ad742db99e30e2437305190740434b98ce80;hpb=c769bb3b2c949c304eb4395d3f24eebea6106c1a;p=8sync.git diff --git a/demos/ircbot.scm b/demos/ircbot.scm index b962ad7..81940fc 100755 --- a/demos/ircbot.scm +++ b/demos/ircbot.scm @@ -3,7 +3,7 @@ !# ;;; 8sync --- Asynchronous programming for Guile -;;; Copyright (C) 2015 Christopher Allan Webber +;;; Copyright © 2015, 2016, 2017 Christopher Allan Webber ;;; ;;; This file is part of 8sync. ;;; @@ -26,12 +26,13 @@ (oop goops) (srfi srfi-37) (ice-9 format) - (ice-9 match)) + (ice-9 match) + (fibers conditions)) (define-class ()) -(define-method (handle-line (irc-bot ) speaker channel - line emote?) +(define-method (handle-line (irc-bot ) message + speaker channel line emote?) (define my-name (irc-bot-username irc-bot)) (define (looks-like-me? str) (or (equal? str my-name) @@ -41,19 +42,19 @@ (match action ;; The classic botsnack! ("botsnack" - (<- irc-bot (actor-id irc-bot) 'send-line channel + (<- (actor-id irc-bot) 'send-line channel "Yippie! *does a dance!*")) ;; Return greeting ((or "hello" "hello!" "hello." "greetings" "greetings." "greetings!" "hei" "hei." "hei!" "hi" "hi!") - (<- irc-bot (actor-id irc-bot) 'send-line channel + (<- (actor-id irc-bot) 'send-line channel (format #f "Oh hi ~a!" speaker))) ;; ---> Add yours here <--- ;; Default (_ - (<- irc-bot (actor-id irc-bot) 'send-line channel + (<- (actor-id irc-bot) 'send-line channel "*stupid puppy look*")))) ;; Otherwise... just spit the output to current-output-port or whatever (_ @@ -102,28 +103,22 @@ (server "irc.freenode.net") (channels '("##botchat")) (repl #f)) - (define hive (make-hive)) - (define irc-bot - (hive-create-actor* hive "irc-bot" - #:username username - #:server server - #:channels channels)) - (define repl-manager - (cond - ((string? repl) - (hive-create-actor* hive "repl" - #:path repl)) - (repl - (hive-create-actor* hive "repl")))) + (run-hive + (lambda (hive) + (define irc-bot + (create-actor* "irc-bot" + #:username username + #:server server + #:channels channels)) + (define repl-manager + (cond + ((string? repl) + (create-actor* "repl" + #:path repl)) + (repl + (create-actor* "repl")))) - (define initial-messages - (if repl - (list (bootstrap-message hive irc-bot 'init) - (bootstrap-message hive repl-manager 'init)) - (list (bootstrap-message hive irc-bot 'init)))) - - ;; TODO: load REPL - (run-hive hive initial-messages)) + (wait (make-condition))))) (define (main args) (define parsed-args (parse-args "ircbot.scm" args))