anchor.diff:  (defreply list-all-commands ((bot (proto 'command-bot)))
     (with-properties (commands) bot
       (hash-table-keys commands)))
  -
  -;; We declare these variables here, but do not bind them unless we're actually inside
  -;; the body of a command.
  -(defvar *bot*)
  -(defvar *message*)
  -(defvar *sender*)
  -(defvar *channel*)
   
   ;; A very convenient macro...
   (defmacro defcommand (name (&optional (regex "") &rest vars) &body body)
  
positive.code: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (in-package :sykobot)
  
  ;; ;;; Response stack
  ;; ;;; Used to assist piping and multiple return values
  ;; (defvar *responses*)
  
  ;;; Modularization of commands
  (defproto command-bot ((proto 'listener-bot))
    ((commands (make-hash-table :test #'equal))
  
negative.code: (defreply command-function ((bot (proto 'command-bot)) name)
    (or (let ((cmd (find-command bot name)))
  	(when cmd (cmd-function cmd)))
        (lambda ()
          (error (build-string "I don't know how to ~A" name)))))
  
  (defreply erase-all-commands ((bot (proto 'command-bot)))
    (clrhash (commands bot)))
  