IRC 机器人 - 防洪保护(python)

0 投票
1 回答
1464 浏览
提问于 2025-04-16 16:04
  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?

撰写回答