0

我有一个工作机器人(感谢 abarnert),它有一个错误:它不会加入频道。他可以让它工作,但我不能。我意识到这可能是我这边的一个问题,但我在 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 协议有很好的文档记录,并不复杂。

最重要的是,除非您将其作为如何编写基于套接字的客户端应用程序的学习练习,否则您会浪费大量时间;有几十个开源 Python IRC 机器人和模块可以帮助编写 IRC 机器人,因此您不必自己处理所有这些低级的东西,因为快速的 Google 搜索会告诉您。

于 2012-10-25T23:51:00.603 回答