anchor.diff:            (identifier handler) (pattern handler) (docstring handler) (subcommands handler)))
   
   (defmacro define-group (name &key documentation pattern subcommands)
  +  (assert (symbolp name) () "NAME has to be a symbol.")
     (unless pattern
  -    (setf pattern (format NIL "^~a(.*)" (escape-regex-symbols name))))
  +    (setf pattern (format NIL "^~a(.*)" (escape-regex-symbols (string name)))))
     `(progn
        (set-command-function ',name ,pattern #'(lambda (event &rest args)
                                                  (if args
                                                      (respond event (apropos-command-handler (message event)))
                                                      (respond event (apropos-command-handler (command-handler ',name)))))
  -                           :docstring ,documentation :priority :AFTER)
  +                           :docstring ,documentation :priority :AFTER :class 'group-handler)
        ,(when subcommands
           `(setf (subcommands (command-handler ',name)) ,subcommands))))
   
   (defmacro define-command (name (&rest args) (&key authorization documentation (eventvar 'event) module-name (modulevar 'module) pattern (priority :DEFAULT)) &body body)
  +  (assert (or (symbolp name) (listp name)) () "NAME has to be a symbol or a list of symbols.")
     (unless pattern
       (setf pattern (if (listp name)
                         (format NIL "^~{~a~^ ~}(.*)" (mapcar #'(lambda (a) (escape-regex-symbols (string a))) name))
  
positive.code:   (generate-command-priority-cache)
    identifier)
  
  (defun set-command-function (identifier cmd-pattern handler-function &key (arguments () a-p) (priority (length cmd-pattern)) docstring)
    "Set a new handler function for a command pattern.
  
  IDENTIFIER       --- A symbol identifying your handler.
  
negative.code:                                  `(progn ,@body)))))
           ,(if (listp name)
                (let ((group (car name))
                      (name (mksymb name)))
                  `(progn
                     ,(if (command-handler group)
                          `(pushnew ',name (subcommands (command-handler ',group)))
                          `(progn (warn 'implicit-group-definition :group ',group)
                                  (define-group ,group :subcommands (list ',name))))
                     (set-command-function ',name ,pattern ,funcsym :arguments ',args :priority ,priority :docstring ,documentation)))
                `(set-command-function ',name ,pattern ,funcsym :arguments ',args :priority ,priority :docstring ,documentation))))))
  