Changeset 134 for trunk


Ignore:
Timestamp:
02/15/06 23:24:34 (19 years ago)
Author:
Erik Huelsmann
Message:

Fix crash on unknown modes.tility.lisp

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/event.lisp

    r133 r134  
    109109
    110110(defmethod default-hook ((message irc-rpl_topic-message))
    111   (setf (topic (find-channel (connection message)
    112                              (second (arguments message))))
    113         (trailing-argument message)))
     111  (destructuring-bind
     112      (target channel topic)
     113      (arguments message)
     114    (declare (ignore target))
     115    (setf (topic (find-channel (connection message) channel)) topic)))
    114116
    115117(defmethod default-hook ((message irc-rpl_namreply-message))
     
    160162
    161163(defmethod default-hook ((message irc-join-message))
    162   (let* ((connection (connection message))
    163          (user (find-or-make-user
    164                 (connection message)
    165                 (source message)
    166                 :hostname (host message)
    167                 :username (user message)))
    168          (channel (or (find-channel connection (trailing-argument message))
    169                       (make-channel connection
    170                                     :name (trailing-argument message)))))
    171     (when (self-message-p message)
    172       (add-channel connection channel))
    173     (add-user connection user)
    174     (add-user channel user)))
     164  (with-slots
     165       (connection source host user arguments)
     166       message
     167    (destructuring-bind
     168        (channel)
     169        arguments
     170      (let ((user (find-or-make-user connection source
     171                                     :hostname host
     172                                     :username user))
     173            (channel (or (find-channel connection channel)
     174                         (make-channel connection :name channel))))
     175        (when (self-message-p message)
     176          (add-channel connection channel))
     177        (add-user connection user)
     178        (add-user channel user)))))
    175179
    176180(defmethod default-hook ((message irc-topic-message))
    177   (setf (topic (find-channel (connection message)
    178                              (first (arguments message))))
    179         (trailing-argument message)))
     181  (with-slots
     182       (connection arguments)
     183       message
     184    (destructuring-bind
     185        (channel &optional topic)
     186        arguments
     187      (setf (topic (find-channel connection channel)) topic))))
    180188
    181189(defmethod default-hook ((message irc-part-message))
    182   (let* ((connection (connection message))
    183          (channel (find-channel connection (first (arguments message))))
    184          (user (find-user connection (source message))))
    185     (if (self-message-p message)
    186         (remove-channel user channel)
    187         (remove-user channel user))))
     190  (with-slots
     191      (connection arguments source)
     192      message
     193    (destructuring-bind
     194        (channel &optional text)
     195        arguments
     196      (let ((channel (find-channel connection channel))
     197            (user (find-user connection source)))
     198        (if (self-message-p message)
     199            (remove-channel user channel)
     200          (remove-user channel user))))))
    188201
    189202(defmethod default-hook ((message irc-quit-message))
     
    194207
    195208(defmethod default-hook ((message irc-rpl_channelmodeis-message))
    196   (destructuring-bind
    197       (target &rest arguments)
    198       ;; ignore the my own nick which is the first message argument
    199       (rest (arguments message))
    200     (let* ((connection (connection message))
    201            (target (find-channel connection target))
     209  (with-slots
     210      (connection arguments)
     211      message
     212    (destructuring-bind
     213        (target channel &rest mode-arguments)
     214        arguments
     215    (declare (ignore target))
     216    (let* ((channel (find-channel connection channel))
    202217           (mode-changes
    203             (when target
    204               (parse-mode-arguments connection target arguments
     218            (when channel
     219              (parse-mode-arguments connection channel arguments
    205220                                    :server-p (user connection)))))
    206221      (dolist (change mode-changes)
     
    208223            (op mode-name value)
    209224            change
    210           (unless (has-mode-p target mode-name)
     225          (unless (has-mode-p channel mode-name)
    211226            (add-mode target mode-name
    212                       (make-mode connection target mode-name)))
     227                      (make-mode connection channel mode-name)))
    213228          (funcall (if (char= #\+ op) #'set-mode #'unset-mode)
    214                    target mode-name value))))))
     229                   channel mode-name value)))))))
    215230
    216231(defmethod default-hook ((message irc-mode-message))
     
    218233      (target &rest arguments)
    219234      (arguments message)
     235    (print (arguments message))
     236    (print arguments)
    220237    (let* ((connection (connection message))
    221238           (target (or (find-channel connection target)
     
    236253
    237254(defmethod default-hook ((message irc-nick-message))
    238   (let* ((con (connection message))
    239          (user (find-or-make-user con (source message)
    240                                   :hostname (host message)
    241                                   :username (user message))))
    242     (change-nickname con user (trailing-argument message))))
     255  (with-slots
     256      (connection source host user arguments)
     257      message
     258    (destructuring-bind
     259        (new-nick)
     260        arguments
     261      (let* ((user (find-or-make-user connection source
     262                                      :hostname host
     263                                      :username user)))
     264        (change-nickname connection user new-nick)))))
    243265
    244266(defmethod default-hook ((message irc-kick-message))
    245   (let* ((connection (connection message))
    246          (channel (find-channel connection (first (arguments message))))
    247          (user (find-user connection (second (arguments message)))))
    248     (if (self-message-p message)
    249         (remove-channel user channel)
    250         (remove-user channel user))))
     267  (with-slots
     268      (connection arguments)
     269      message
     270    (destructuring-bind
     271        (channel nick &optional reason)
     272        arguments
     273      (declare (ignore arguments))
     274      (let* ((channel (find-channel connection channel))
     275             (user (find-user connection nick)))
     276        (if (self-message-p message)
     277            (remove-channel user channel)
     278          (remove-user channel user))))))
    251279
    252280(defmethod default-hook ((message ctcp-time-message))
    253   (multiple-value-bind (second minute hour date month year day) (get-decoded-time)
     281  (multiple-value-bind
     282      (second minute hour date month year day)
     283      (get-decoded-time)
    254284    (send-irc-message
    255285     (connection message)
  • TabularUnified trunk/utility.lisp

    r131 r134  
    293293                                           (mode-name-from-char connection target
    294294                                                                (char modes i))))
    295                         (param-p (funcall param-req mode-rec)))
    296                    (when (and param-p
    297                               (= 0 (length arguments)))
     295                        (param-p (when mode-rec
     296                                   (funcall param-req mode-rec))))
     297                   (when (or (null mode-rec)
     298                             (and param-p
     299                                  (= 0 (length arguments))))
    298300                     (throw 'illegal-mode-spec nil))
    299301                   (push (list this-op
Note: See TracChangeset for help on using the changeset viewer.