IRC 机器人 - 防洪保护(python)
if data.find('PRIVMSG') != -1:
nick = data.split('!')[ 0 ].replace(':','')
text = ''
if data.count(text) >= 200:
sck.send('KICK ' + " " + chan + " :" 'flooding' + '\r\n')
我正在为机器人编写一个防洪功能,我希望它能在用户输入超过200个字符时将其踢出。但是我该如何让它能读取其他行,而不仅仅是第一行呢?而且上面的代码不工作,它并没有踢出用户,但如果我把sck.send()
改成sck.send('PRIVMSG ' + chan + " :" 'flooding' + '\r\n')
就可以了。
我解决了踢人的问题,现在代码可以正常工作了,但它只读取第一行。如果用户继续在频道里刷屏,我不太确定该如何让它读取其他行。
if data.find('PRIVMSG') != -1:
nick = data.split('!')[ 0 ].replace(':','')
text = ''
if data.count(text) >= 200:
sck.send('KICK ' + " " + chan + " " + nick + " :" 'flooding' + '\r\n')
1 个回答
0
我记得在IRC协议中,冒号是一个特殊的字符。这意味着,服务器发来的消息中,第一个冒号表示用户提供的数据开始了(这也是为什么昵称和频道名称中不允许有“:”的原因)。所以,我们只需要找到第一个冒号,然后计算后面字符串的长度就可以了。
另外,data.find('PRIVMSG')
这个方法并不太可靠。如果有用户在频道聊天中提到“PRIVMSG”这个词,那会怎么样呢?你可以去查一下IRC的RFC文档,它详细说明了PRIVMSG的格式。
还有,你应该更具体一点。你到底遇到了什么问题?是提取昵称?计算消息长度?还是连接到IRC?