(module vandusen-pager () (import chicken scheme extras data-structures srfi-1 posix) (use vandusen irc) (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"))))