(module vandusen-pager () (import scheme) (import (chicken base) (chicken format) (chicken string) (chicken time) (chicken time posix)) (import irc srfi-1) (import vandusen) (plugin 'pager (lambda () (define tasks '()) (define (add-task! from nick text) (let ((msg (list (seconds->string (current-seconds)) from text))) (cond ((alist-ref nick tasks equal?) => (lambda (k) (set! tasks (alist-update! nick (cons msg k) tasks equal?)))) (else (set! tasks (alist-cons nick (cons msg '()) tasks)))))) (command 'tell '(: "tell" (+ space) (submatch (+ (~ (or space #\, #\:)))) (or #\, #\:) (* space) (submatch (+ any))) (lambda (master nick msg) (add-task! (irc:message-sender master) nick msg) (reply-to master (format "I will tell ~a when he/she speaks again." nick))) public: #t) (command 'list-messages '(: "messages" (* any)) (lambda (m . rest) (reply-to m (format "I am holding ~a messages in my head:~%~A" (length tasks) tasks)))) (message-handler (lambda (m) (cond ((alist-ref (irc:message-sender m) tasks equal?) => (lambda (msgs) (for-each (lambda (msg) (reply-to m (conc (first msg) " " (second msg) ": " (third msg)))) msgs) (set! tasks (alist-delete (irc:message-sender m) tasks equal?))))) #f) command: "PRIVMSG"))))