Python IRC Bot静音超时(?)-突然停止工作

时间:2018-07-10 15:07:52

标签: python sockets irc

我最近开始写自己的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调试提示,看来他停止获取消息了。文本消息始终是空字符串。

1 个答案:

答案 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,情况并非总是如此。