我最近开始写自己的IRC Bot,没什么花哨的,只是读取一个频道并发布用于特定命令的文本文件的内容。
# let's connect
irc_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
irc_socket.connect((server, 6667))
# now we login and send a test message
irc_socket.send(str.encode('PASS ' + pw + '\r\n'))
irc_socket.send(str.encode('NICK ' + bot + '\r\n'))
irc_socket.send(str.encode('USER ' + bot + '\r\n'))
irc_socket.send(str.encode('JOIN #' + channel + '\r\n'))
while 1:
text = irc_socket.recv(2040).decode()
if text.startswith('!ideen'):
do stuff #lot of code, shouldn't be of importance
奇怪的是,一切都按我想要的方式工作,但是由于某些原因,一段时间后它停止工作。它没有超时或没有任何错误,只是完全停止了反应。首先,我认为它会因太多消息而过载,但是如果该频道仅保持空闲20分钟左右,也会发生这种情况。当我从Pycharm或命令行运行它时,情况也是如此(不确定为什么会有所作为)。
我可能不是唯一一个有问题的人,但是我什么也找不到。感谢您的帮助,甚至还提供了有关如何调试此类内容的提示。
IRC频道是一个Twitch-IRC聊天(如果有重要意义的话)。
编辑:尝试了@matt -m调试提示,看来他停止获取消息了。文本消息始终是空字符串。
答案 0 :(得分:4)
您可能没有用PING
响应服务器PONG
吗?
https://tools.ietf.org/html/rfc2812#section-3.7.2
如果连接无法响应PING 消息在设定的时间内关闭该连接。
因此,您应该确保执行此操作。我以为在关闭连接时会引发一些套接字错误,但是根据How to tell if a connection is dead in python,情况并非总是如此。