首页 > 解决方案 > Python IRC Bot静默超时(?) - 突然停止工作

问题描述

我最近开始编写自己的 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 提示进行调试,似乎他停止收到消息。文本消息始终是空字符串。

标签: pythonsocketsirc

解决方案


您可能没有响应带有 的服务器PINGPONG

https://www.rfc-editor.org/rfc/rfc2812#section-3.7.2

如果连接未能在设定的时间内响应 PING 消息,则该连接将关闭。

所以你应该确保你这样做。我认为当连接关闭时它会引发一些套接字错误,但根据How to tell if a connection is dead in python,情况可能并非总是如此。


推荐阅读