2016-05-18 4 views
3

Slackに接続するためにSlackに接続するためにcl-ircライブラリを使用しています。Slack IRCゲートウェイに接続する際のエラー

私はread-message-loopでメッセージループを開始しようとすると、私は次のエラーを取得していますが:

error while parsing arguments to DESTRUCTURING-BIND: 
    invalid number of elements in 
    ("duncan_bayne" "Welcome" "to" "Slack" "IRC" "Gateway" 
    "server" "[email protected]") 
    to satisfy lambda list 
    (CL-IRC:NICKNAME CL-IRC::WELCOME-MESSAGE): 
    exactly 2 expected, but 8 found 
    [Condition of type SB-KERNEL::ARG-COUNT-ERROR] 

... 

Backtrace: 
    0: ((:METHOD CL-IRC::DEFAULT-HOOK (CL-IRC:IRC-RPL_WELCOME-MESSAGE)) #<CL-IRC:IRC-RPL_WELCOME-MESSAGE irc.tinyspeck.com RPL_WELCOME {1007FC6293}>) [fast-method] 
    1: ((:METHOD CL-IRC::APPLY-TO-HOOKS (T)) #<CL-IRC:IRC-RPL_WELCOME-MESSAGE irc.tinyspeck.com RPL_WELCOME {1007FC6293}>) [fast-method] 
    2: ((:METHOD CL-IRC:IRC-MESSAGE-EVENT (T CL-IRC:IRC-MESSAGE)) #<unavailable argument> #<CL-IRC:IRC-RPL_WELCOME-MESSAGE irc.tinyspeck.com RPL_WELCOME {1007FC6293}>) [fast-method] 
    3: ((:METHOD CL-IRC:READ-MESSAGE (CL-IRC:CONNECTION)) #<CL-IRC:CONNECTION myob.irc.slack.com {10068E8ED3}>) [fast-method] 
    4: ((:METHOD CL-IRC:READ-MESSAGE-LOOP (T)) #<CL-IRC:CONNECTION myob.irc.slack.com {10068E8ED3}>) [fast-method] 
    5: (SB-INT:SIMPLE-EVAL-IN-LEXENV (CL-IRC:READ-MESSAGE-LOOP *CONN*) #<NULL-LEXENV>) 
    6: (EVAL (CL-IRC:READ-MESSAGE-LOOP *CONN*)) 

REPLに私が見ている間:

UNHANDLED-EVENT:3672562852: RPL_MYINFO: irc.tinyspeck.com duncan_bayne "IRC-SLACK gateway" 

私はわからないんだけど私はここで間違っている。私はそれらをすべて無効にしても問題は解決しないので、私のフックではないと確信しています。

また、メッセージループを開始しようとしていない場合は、期待通りに接続を使用できます。たとえば、チャンネルに参加してメッセージを送信します。

Slackが予期せぬメッセージとの接続に応答していると思いますか?

(in-package #:cl-irc) 
(defmethod default-hook ((message irc-rpl_welcome-message)) 
    (with-slots 
     (connection host user arguments) 
     message 
    (destructuring-bind 
      (nickname &rest welcome-message) 
     arguments 
     (setf (user connection) 
      (make-user connection 
         :nickname nickname 
         :hostname host 
         :username user))))) 

(in-package #:irc) 
(defmethod default-hook ((message irc-rpl_namreply-message)) 
    (let* ((connection (connection message))) 
    (destructuring-bind 
      (nick chan-visibility channel &optional names) 
     (arguments message) 
     (declare (ignore nick)) 
     (let ((channel (find-channel connection channel))) 
     (setf (visibility channel) 
       (or (second (assoc chan-visibility 
           '(("=" :public) ("*" :private) ("@" :secret)) 
           :test #'string=)) 
        :unknown)) 
     (unless (has-mode-p channel 'namreply-in-progress) 
      (add-mode channel 'namreply-in-progress 
        (make-instance 'list-value-mode :value-type :user))) 
     (dolist (nickname (tokenize-string names)) 
      (let ((user (find-or-make-user connection 
             (canonicalize-nickname connection 
                   nickname)))) 
      (unless (equal user (user connection)) 
       (add-user connection user) 
       (add-user channel user)) 
      (set-mode channel 'namreply-in-progress user) 
      (let* ((mode-char (getf (nick-prefixes connection) 
            (elt nickname 0))) 
        (mode-name (when mode-char 
           (mode-name-from-char connection 
                channel mode-char)))) 
       (when mode-name 
       (if (has-mode-p channel mode-name) 
        (set-mode channel mode-name user) 
        (set-mode-value (add-mode channel mode-name 
               (make-mode connection 
                 channel mode-name)) 
            user)))))))))) 

私はDEVメーリングに参加するために適用した:

+3

destructuring-bind(event.lisp行149)を '(ニックネーム&残りのウェルカムメッセージ)'に変更すると、他のエラーが発生するかどうかを確認してください。 'WELCOME-MESSAGE'は何のためにも使われていないようですので、おそらくdevは&restを忘れてしまい、テストケースでうまく動作しているかもしれません。 – jkiiski

+1

修正してパッチを提出できるなら、それは素晴らしいことです。さもなければ、私がIRCで最後に何かしようとしたとき、私はhttps://github.com/Shinmera/colleenを使いました。 – coredump

答えて

5

@jkilskiにより示唆されるように修正はスラックからやや珍しい(?おそらく標準compilant)応答を受け入れるために、CL-IRCを変更することですパッチをすぐに提出する予定です。

関連する問題