anchor.diff:  (defparameter *save-file* (merge-pathnames "rss-feed-save.json" (merge-pathnames "config/" (asdf:system-source-directory :colleen))))
   
   (define-module rss () 
  -  ((%feeds :initform (make-hash-table :test 'equalp) :accessor feeds))
     (:documentation "Update about new RSS feed items."))
   
   (defclass feed ()
  
positive.code:    (%report-to :initarg :report-to :initform () :accessor report-to)
     (%last-item :initarg :last-item :initform NIL :accessor last-item))
    (:documentation "Class representation of an RSS feed."))
  
  (defmethod print-object ((feed feed) stream)
    (print-unreadable-object (feed stream :type T)
  
negative.code:           (respond event "Failed to add feed ~a: ~a" name err)))))
  
  (define-command (rss remove) (name) (:authorization T :documentation "Remove an RSS feed.")
    (if (uc:config-tree :feeds name)
        (progn 
          (remhash name (uc:config-tree :feeds))
          (respond event "Feed ~a removed!" name))
        (respond event "No feed called \"~a\" could be found!" name)))
  
  (define-command (rss about) (name) (:documentation "Show information about a feed.")
    (if (uc:config-tree :feeds name)
        (respond event "~a: ~a" name (url (uc:config-tree :feeds name)))
        (respond event "No feed called \"~a\" could be found!" name)))
  
  (define-command (rss list) () (:documentation "List the currently available feeds.")
    (respond event "Known feeds: ~{~a~^, ~}" (alexandria:hash-table-keys (uc:config-tree :feeds))))
  
  (define-command (rss watch) (name) (:authorization T :documentation "Start watching a feed on this channel.")
    (if (uc:config-tree :feeds name)
        (progn
          (pushnew (cons (name (server event)) (channel event))
                   (report-to (uc:config-tree :feeds name)))
          (respond event "Now watching ~a on this channel." name))
        (respond event "No feed called \"~a\" could be found!" name)))
  
  (define-command (rss unwatch) (name) (:authorization T :documentation "Stop watching a feed on this channel.")
    (if (uc:config-tree :feeds name)
        (progn
          (setf (report-to (uc:config-tree :feeds name)) 
                (delete-if #'(lambda (el) (and (eql (name (server event)) (car el))
                                               (string-equal (channel event) (cdr el))))
                           (report-to (uc:config-tree :feeds name))))
          (respond event "No longer watching ~a on this channel." name))
        (respond event "No feed called \"~a\" could be found!" name)))
  
  (define-command (rss latest) (name) (:documentation "Get the latest feed item.")
    (if (uc:config-tree :feeds name)
        (let ((item (first (get-items (uc:config-tree :feeds name) :limit 1))))
          (respond event "~a: ~a ~a~@[ ~a~]" (nick event) (title item) (link item) (publish-date item)))
        (respond event "No feed called \"~a\" could be found!" name)))
  