我有一个工作机器人(感谢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”
处停止答案 0 :(得分:2)
正如我在your other question中解释的那样,您确实需要记录输入和输出以查看正在发生的事情。这是你或其他任何人能够调试它的唯一方法。
同样,有多种方法可以做到这一点:破解你的僵尸程序来源打印它接收到的所有内容并在套接字上发送,使用netcat运行虚假服务器,将netcat设置为代理,运行设置的本地IRC服务器记录所有内容,使用Wireshark捕获线路上的消息...您选择哪一个并不重要,但您需要执行其中一个。
通过在我自己的本地副本上执行此操作,我可以看到您过早发送JOIN,并且您从服务器收到错误:
:asgard.kbfail.net 451 JOIN :You have not registered
与此同时,你的僵尸程序在MODE行停留的原因是之后没有人向你发送任何东西。启动客户端并/MSG Alice foo
,您会看到您仍在接收消息。
那么,何时才是发送JOIN的合适时机?我的猜测是你需要等到/ MOTD之后,或者可能在自动MODE命令之后,或者可能在它确认你的NICK命令之后。但实际上,你不应该在这里猜测。 The IRC protocol is very well documented,而不是那么复杂。
除此之外,除非您将此作为如何编写基于套接字的客户端应用程序的学习练习,否则您将浪费大量时间;有许多开源的Python IRC机器人和模块可以帮助编写IRC机器人,因此您不必自己处理所有这些低级别的东西,因为快速的Google搜索会向您显示。