anchor.diff:      `(add-command (proto 'command-bot) (symbol-name ',name)
   		  (defclone ((proto 'command))
   		      ((cmd-function
  -                        (lambda (*bot* *message* *sender* *channel*)
  -                          (declare (ignorable *message* *bot* *sender* *channel*))
  +                        (lambda ()
                             ,@(if vars
                                   `((or (register-groups-bind ,vars (,regex *message*)
                                           ,@real-body)
  
positive.code: (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)
  
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)))
  