0

私は (abarnert のおかげで) 動作しているボットを持っていますが、それには 1 つのバグがあります: チャンネルに参加しません。彼はそれを機能させることができますが、私はできません。これは私の側の問題かもしれませんが、X-Chat では問題なく接続されています。

host = "irc.kbfail.net"
port = 6667
nick = "Alice"
ident = "Alice"
realname = "Alice"
channel = "#nb"
readbuffer = ""

irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( host, port ) )
print irc.recv ( 4096 )
irc.send ("NICK %s\r\n" % nick)
irc.send ("USER %s %s bla :%s\r\n" % (ident, host, realname))
irc.send ("JOIN %s\r\n" % channel)

以上が JOIN コマンドです。私のボットはサーバーに接続され、「:Alice MODE Alice :+x」で停止します

4

1 に答える 1

3

他の質問で説明したように、何が起こっているかを確認するには、入力と出力をログに記録する必要があります。これが、あなた (または他の誰か) がこれをデバッグできる唯一の方法です。

繰り返しますが、これを行うには複数の方法があります。ボット ソースをハックしてソケットで送受信するすべてを出力する、netcat を使用して偽のサーバーを実行する、netcat をプロキシとして設定する、すべてをログに記録するように設定されたローカル IRC サーバーを実行する、Wireshark を使用してネットワーク上のメッセージをキャプチャします。どちらを選択してもかまいませんが、これらのいずれかを実行する必要があります。

自分のローカル コピーでこれを行うと、JOIN の送信が早すぎて、サーバーからエラーが返されていることがわかります。

:asgard.kbfail.net 451 JOIN :You have not registered

一方、あなたのボットが MODE 行で止まる理由は、その後誰もあなたに何も送信していないからです. クライアントを起動すると/MSG Alice foo、問題なくメッセージを受信して​​いることがわかります。

では、JOIN を送信する適切なタイミングはいつでしょうか? 私の推測では、/MOTD の後、または自動 MODE コマンドの後、あるいは NICK コマンドが承認された直後まで待つ必要があると思います。しかし、実際には、ここで推測するべきではありません。IRC プロトコルは非常によく文書化されており、それほど複雑ではありません。

その上、これをソケット ベースのクライアント アプリの作成方法の学習演習として行っている場合を除き、多くの時間を無駄にしています。IRC ボットを作成するのに役立つオープン ソースの Python IRC ボットとモジュールが多数あるため、Google で簡単に検索すると表示されるように、この低レベルのものをすべて自分で処理する必要はありません。

于 2012-10-25T23:51:00.603 に答える