Python 加入IRC频道并不意味着';它似乎不起作用

Python 加入IRC频道并不意味着';它似乎不起作用,python,irc,Python,Irc,我有一个正在工作的机器人(感谢abarnert),它有一个bug:它不会加入频道。他能做到,但我做不到。我意识到这对我来说可能是个问题,但我在X-Chat上的连接很好 host = "irc.kbfail.net" port = 6667 nick = "Alice" ident = "Alice" realname = "Alice" channel = "#nb" readbuffer = "" irc = socket.socket ( socket.AF_INET, socket.SO

我有一个正在工作的机器人(感谢abarnert),它有一个bug:它不会加入频道。他能做到,但我做不到。我意识到这对我来说可能是个问题,但我在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”处停止。正如我在中所解释的,您确实需要记录输入和输出以查看发生了什么。这是您或其他任何人能够调试此程序的唯一方法

同样,有多种方法可以做到这一点:黑客攻击你的机器人源,打印它在套接字上接收和发送的所有信息,使用netcat运行一个假的服务器,将netcat设置为代理,运行一个本地IRC服务器,该服务器设置为记录所有信息,使用Wireshark捕获网络上的消息……无论你选择哪一个,但你需要做其中一个

通过在我自己的本地副本上执行此操作,我可以看到您发送JOIN太早,并且从服务器返回错误:

:asgard.kbfail.net 451 JOIN :You have not registered
同时,你的机器人停在模式行的原因是在那之后没有人向你发送任何东西。启动一个客户端并
/MSG Alice foo
,您将看到您仍然可以很好地接收消息

那么,何时是发送加入的正确时间?我猜您需要等到/MOTD之后,或者在自动模式命令之后,或者在确认您的NICK命令之后。但实际上,你不应该在这里猜测,没有那么复杂

除此之外,除非你将此作为如何编写基于套接字的客户端应用程序的学习练习,否则你将浪费大量时间;有几十个开源Python IRC bot和模块可以帮助编写IRC bot,这样你就不必自己处理所有这些低级的东西,谷歌搜索会告诉你。

正如我在中所解释的,你真的需要记录输入和输出以查看发生了什么。这是您或其他任何人能够调试此程序的唯一方法

同样,有多种方法可以做到这一点:黑客攻击你的机器人源,打印它在套接字上接收和发送的所有信息,使用netcat运行一个假的服务器,将netcat设置为代理,运行一个本地IRC服务器,该服务器设置为记录所有信息,使用Wireshark捕获网络上的消息……无论你选择哪一个,但你需要做其中一个

通过在我自己的本地副本上执行此操作,我可以看到您发送JOIN太早,并且从服务器返回错误:

:asgard.kbfail.net 451 JOIN :You have not registered
同时,你的机器人停在模式行的原因是在那之后没有人向你发送任何东西。启动一个客户端并
/MSG Alice foo
,您将看到您仍然可以很好地接收消息

那么,何时是发送加入的正确时间?我猜您需要等到/MOTD之后,或者在自动模式命令之后,或者在确认您的NICK命令之后。但实际上,你不应该在这里猜测,没有那么复杂


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

如果你这样做是为了学习,那么你应该在成功发送NICK和USER之后阅读IRC RFC,如果你不知道如何找到RFC,你应该得到一个PING,其中你回复了PONG,然后你得到了欢迎信息,并且可以在MOTD+1之后加入一个房间,让炮手看到上面我的回答中的链接。同时,如果您正在尝试学习,那么通过观察通信和查找错误消息来学习如何调试网络协议是最重要的课程之一。我正在使用此课程来学习。我想我已经学到了足够的基础知识。我要找一个机器人,把它掏出来学习更多。谢谢你的帮助!问题在于服务器(kbfail)。我尝试了一些其他的,它的工作。我正在使用Progbot,发现它非常好:)这是一个很好的观点,ircd有几种不同的实现,所有这些都可以配置,并且一些强制执行RFC不需要的东西。因此,即使技术上允许您在MOTD之前加入频道,您也可能无法在任何服务器上加入。你可能需要做一些调查,然后才能得到在任何地方都有效的东西。无论如何,我从未使用过Progbot,但我很高兴你发现它很有用。如果你这样做是为了学习,那么你应该阅读IRC RFC,在你成功发送NICK和USER之后,如果你不知道如何找到RFC,你应该得到一个PING,其中你回复了PONG,然后你得到了欢迎信息,并且可以在MOTD+1之后加入一个房间,让炮手看到上面我的回答中的链接。同时,如果您正在尝试学习,那么通过观察通信和查找错误消息来学习如何调试网络协议是最重要的课程之一。我正在使用此课程来学习。我想我已经学到了足够的基础知识。我要找一个机器人,把它掏出来学习更多。谢谢你的帮助!问题在于服务器(kbfail)。我尝试了一些其他的,它的工作。我正在使用Progbot,发现它非常好:)这是一个很好的观点,ircd有几种不同的实现,所有这些都可以配置,并且一些强制执行RFC不需要的东西。因此,即使技术上允许您在MOTD之前加入频道,您也可能无法在任何服务器上加入。你可能需要做一些调查,然后才能得到在任何地方都有效的东西。无论如何,我从未使用过Progbot,但我很高兴你发现它很有用。