(defun valid-prefix (community string) (or (string-equal string (format nil "#.~A" (name community))) (error 'invalid-prefix :message-process-failure-culprit string :message-process-failure-message "string has invalid prefix"))) (defparameter *valid-count* 0) (defun extract-command-and-args (community string) (let* ((split (str:split " " string)) (validp (restart-case (valid-prefix community (first split)) (potential-admin () :report "Check for admin prefix?" (print "IM IN THE RESTART") (if (string-equal (first split) "#.admin") (progn (print "IM AN ADMIN COMMAND") t) nil))))) (when validp (incf *valid-count*)) (if validp (rest split) (error 'failed-to-parse-msg :message-process-failure-culprit string :message-process-failure-message (format nil "String: ~A has an invalid prefix" string))))) (defun process-message (moonbot community room message) (let ((text (extract-message message))) (when text (handler-case (let ((priv (determine-privilege moonbot community message))) (destructuring-bind (invoker &rest rest) (handler-bind ((invalid-prefix (lambda (c) (declare (ignore c)) (print "Im invoking") (invoke-restart 'potential-admin)))) (extract-command-and-args community text)) (initiate-command-execution moonbot priv (intern (string-upcase invoker)) community room message rest))) ((or failed-to-parse-msg missing-expected-key) () nil))))) (defmethod process-messages ((moonbot moonbot) (community community) room messages) (loop :for message :in messages :do (process-message moonbot community room message)))