(let ((url-alist '()) (url-list-file "phlog_list.txt")) (import matchable srfi-1 (chicken file) (chicken string) (chicken pretty-print)) (if (file-exists? url-list-file) (let ((res (with-input-from-file url-list-file read))) (if (pair? res) (set! url-alist res)))) (define (save-url-list) (with-output-to-file url-list-file (lambda () (pretty-print url-alist)))) (define (set-url nick url) (let ((nick-symb (string->symbol nick))) (set! url-alist (alist-cons nick-symb url (alist-delete nick-symb url-alist))) (save-url-list))) (define (get-url nick) (let* ((nick-symb (string->symbol nick)) (record (assoc nick-symb url-alist))) (and record (cdr record)))) (define (clear-url nick) (let* ((nick-symb (string->symbol nick))) (set! url-alist (alist-delete nick-symb url-alist)) (save-url-list))) (lambda (source args privmsg) (match (string-split (car args)) (("hello") (privmsg source (conc "Hello, " source "!"))) (("seturl" url) (set-url source url) (privmsg source "Updated your URL. Thanks!")) (("geturl" nick) (print "in geturl") (privmsg source (let ((url (get-url nick))) (if url (conc "URL for " nick ": " url) (conc "No URL for " nick " in database."))))) (("rmurl") (clear-url source) (privmsg source "Deleted your nick and url from database.")) (("list") (if (null? url-alist) (privmsg source "No registered phlog/gemlog/blog URLs. :(") (begin (privmsg source "Current URL list:") (for-each (lambda (record) (let ((nick (symbol->string (car record))) (url (cdr record))) (privmsg source (conc " " nick ": " url)))) url-alist)))) (("announce") (let ((url (get-url source))) (if url (privmsg "#phloggersgarage" (conc source " has published a new post at " url "!")) (privmsg source "Register your *log URL first using seturl .")))) (_ (privmsg source "Beep boop! This is pgbot, the #phloggersgarage bot.") (privmsg source "To use pgbot, send it a message: \x02/msg pgbot command\x02.") (privmsg source "Here are the currently-valid pgbot commands:") (privmsg source " \x02seturl [url]\x02: Save your *log URL for others to see") (privmsg source " \x02rmurl\x02: Remove your *log URL if one is saved.") (privmsg source " \x02geturl [nick]\x02: Retrieve the *log URL belonging to [nick].") (privmsg source " \x02list\x02: List all currently stored *log URLs.") (privmsg source " \x02announce\x02: Announce a new *log entry to #phloggersgarage! Huzzah!"))))) .