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:                               (sender (proto 'string))
                                (channel (proto 'string))
                                (message (proto 'string)))
    (destructuring-bind (command &optional args)
        (split "\\s+" message :limit 2)
      (send-reply bot channel sender
                  (funcall (command-function bot command)
  			 bot args sender channel)))
    #+nil (let* ((results (process-command-string bot message sender channel)))
            (loop for result in results
               do (send-reply bot channel sender (build-string result)))))
  
negative.code:     `(add-command (proto 'command-bot) (symbol-name ',name)
  		  (defclone ((proto 'command))
  		      ((cmd-function
                          (lambda ()
                            ,@(if vars
                                  `((or (register-groups-bind ,vars (,regex *message*)
                                          ,@real-body)
  