X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=demos%2Fircbot.scm;h=350611138924e7a58254875e67afee5d1e21f768;hb=0d10b58e73e1ef034b2f1b47fdd31b4ff45d3ce3;hp=bfcd723fca8f9722b014192c75d48e366dd35748;hpb=bc24c9f3f29d3396ae9e52f9682914dec868838a;p=8sync.git diff --git a/demos/ircbot.scm b/demos/ircbot.scm index bfcd723..3506111 100755 --- a/demos/ircbot.scm +++ b/demos/ircbot.scm @@ -1,9 +1,9 @@ -#!/usr/bin/guile \ +#! /usr/bin/env guile \ -e main -s !# ;;; 8sync --- Asynchronous programming for Guile -;;; Copyright (C) 2015 Christopher Allan Webber +;;; Copyright © 2015, 2016, 2017 Christopher Allan Webber ;;; ;;; This file is part of 8sync. ;;; @@ -21,45 +21,58 @@ ;;; License along with 8sync. If not, see . (use-modules (8sync) + (8sync contrib irc) (8sync systems irc) + (8sync repl) (oop goops) (srfi srfi-37) + (ice-9 format) (ice-9 match)) (define-class ()) -(define-method (irc-bot-handle-line (irc-bot ) speaker channel - line emote?) +(define-method (handle-message (irc-bot ) message) (define my-name (irc-bot-username irc-bot)) (define (looks-like-me? str) (or (equal? str my-name) (equal? str (string-concatenate (list my-name ":"))))) - (match (string-split line #\space) - (((? looks-like-me? _) action action-args ...) - (match action - ;; The classic botsnack! - ("botsnack" - (<- irc-bot (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 - (format #f "Oh hi ~a!" speaker))) - ;; ---> Add yours here <--- + (match message + ((and ($ ) + (= irc:message-line line) + (= irc:message-command 'PRIVMSG) + (= irc:message-speaker speaker) + (= irc:message-channel channel) + (= irc:message-message message) + (= irc:message-emote? emote?)) - ;; Default + (match (string-split message #\space) + (((? looks-like-me? _) action action-args ...) + (match action + ;; The classic botsnack! + ("botsnack" + (<- (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!") + (<- (actor-id irc-bot) 'send-line channel + (format #f "Oh hi ~a!" speaker))) + + ;; ---> Add yours here <--- + + ;; Default + (_ + (<- (actor-id irc-bot) 'send-line channel + "*stupid puppy look*")))) + ;; Otherwise... just spit the output to current-output-port or whatever (_ - (<- irc-bot (actor-id irc-bot) 'send-line channel - "*stupid puppy look*")))) - ;; Otherwise... just spit the output to current-output-port or whatever - (_ - (if emote? - (format #t "~a emoted ~s in channel ~a\n" - speaker line channel) - (format #t "~a said ~s in channel ~a\n" - speaker line channel))))) + (if emote? + (format #t "~a emoted ~s in channel ~a\n" + speaker message channel) + (format #t "~a said ~s in channel ~a\n" + speaker message channel))))) + (_ #f))) (define (display-help scriptname) @@ -85,7 +98,10 @@ (option '("channels") #t #f (lambda (opt name arg result) `(#:channels ,(string-split arg #\,) - ,@result)))) + ,@result))) + (option '("repl") #f #t + (lambda (opt name arg result) + `(#:repl ,(or arg #t) ,@result)))) (lambda (opt name arg result) (format #t "Unrecognized option `~a'\n" name) (exit 1)) @@ -99,12 +115,20 @@ (repl #f)) (define hive (make-hive)) (define irc-bot - (hive-create-actor* hive "irc-bot" - #:username username - #:server server - #:channels channels)) + (bootstrap-actor* hive "irc-bot" + #:username username + #:server server + #:channels channels)) + (define repl-manager + (cond + ((string? repl) + (bootstrap-actor* hive "repl" + #:path repl)) + (repl + (bootstrap-actor* hive "repl")))) + ;; TODO: load REPL - (ez-run-hive hive (list (bootstrap-message hive irc-bot 'init)))) + (run-hive hive '())) (define (main args) (define parsed-args (parse-args "ircbot.scm" args))