(define-syntax cmd (syntax-rules () ((_ tag from receiver reply all rest . body) (irc:add-message-handler! con (lambda (msg) (let* ((from (irc:message-sender msg)) (receiver (irc:message-receiver msg)) (reply (if (string=? receiver (irc:connection-nick con)) from receiver)) (all (last (irc:message-parameters msg))) (rest (string-substitute (tag->regex tag) "" all))) . body)) command: "PRIVMSG" body: (check-body (tag->regex tag)) tag: tag)))) (cmd this-is-the-tag-variable-name this-is-the-from-variable-name this-is-the-receiver the-reply all rest (do-some-stuff-with the-reply all rest))