anchor.diff:                                (sender (proto 'string))
                                 (channel (proto 'string))
                                 (message (proto 'string)))
  -  (destructuring-bind (command &optional args)
  +  (destructuring-bind (command &optional *message*)
         (split "\\s+" message :limit 2)
       (send-reply bot channel sender
  -                (funcall (command-function bot command)
  -			 bot args sender channel)))
  +                (funcall (command-function bot command))))
     #+nil (let* ((results (process-command-string bot message sender channel)))
             (loop for result in results
                do (send-reply bot channel sender (build-string result)))))
  
positive.code:     `(add-command (proto 'command-bot) (symbol-name ',name)
  		  (defclone ((proto 'command))
  		      ((cmd-function
                          (lambda (*bot* *message* *sender* *channel*)
                            (declare (ignorable *message* *bot* *sender* *channel*))
                            ,@(if vars
                                  `((or (register-groups-bind ,vars (,regex *message*)
                                          ,@real-body)
  
negative.code: (defreply list-all-commands ((bot (proto 'command-bot)))
    (with-properties (commands) bot
      (hash-table-keys commands)))
  
  ;; A very convenient macro...
  (defmacro defcommand (name (&optional (regex "") &rest vars) &body body)
  