【发布时间】:2015-05-05 18:23:29
【问题描述】:
所以我为 Twitch.tv 创建了一个聊天机器人,该机器人已经运行了好几个月,直到几天前。聊天太泛滥或抽搐改变了他们发送消息的方式。无论哪种方式,在收到的每条消息中,我都会在打印到控制台时添加一个新行,而有些消息没有这个添加的行,这意味着多个消息可以放在一个 irc.recv() 中。我尝试编辑recv的大小,但没有任何成功。这是 irc.recv() 提供的打印图像,以防万一。
http://i.stack.imgur.com/pWeGt.jpg
如果你看中间,你会发现两条消息之间没有空格,这意味着如果第二个人做了一些可禁止的事情,第一个用户就会被禁止。
如您所见,通过“:nick!nick@nick.tmi.twitch.tv PRIVMSG #channel :”可以很容易地分隔消息,但对于了解这种设计的人来说也很容易滥用机器人并让任何人超时。
我希望实现的是一种修改 irc.recv() 的方法,以便它仅且始终接收准确的一条消息。
这里有几个sn-ps代码,可以更好地理解发生了什么。
# -*- coding: utf-8 -*-
import socket
import threading
import datetime
import time
bot_owner = 'asd'
nick = 'asdrobot'
channel = '#asd'
server = 'irc.twitch.tv'
password = 'asd' #login authentication
global irc
irc = socket.socket()
irc.connect((server, 6667)) #connects to the server
irc.send('PASS ' + password + '\r\n')
irc.send('USER ' + nick + ' 0 * :' + bot_owner + '\r\n')
irc.send('NICK ' + nick + '\r\n')
irc.send('JOIN ' + channel + '\r\n')
while True:
senderdata = irc.recv(1024) #gets output from IRC server
sendermessage = '' #Empties variable
senderuser = '' #Empties variable
senderusertemplist = [] #Empties variable
if(senderdata.find('PRIVMSG') != -1):
print senderdata
try:
senderuser = senderdata.split(':')[1]
senderuser = senderuser.split('!')[0] #determines the sender of the messages
except IndexError as e:
senderuser = 'ERRORERROR'
print 'can not split this data'
print e
sendermessage = senderdata.split(channel)[-1]
sendermessage = sendermessage.split(':', 1)[-1]
sendermessagelow = sendermessage.lower()
这些只是最重要的部分,当代码到达这一点时,问题已经出现了。
如果没有办法“解决”问题并且这是 IRC 工作方式的一部分,我很想知道,但如果您知道解决问题的方法,我将非常感激。
谢谢。
【问题讨论】:
-
我不知道 python,但是 IRC 消息被
\r\n(换行符)终止,所以你可以从流中读取直到下一个\r\n然后你应该保证是阅读一条消息。 -
这可能行得通,是的。与检查行尾并将其与行首匹配的相同场景。谢谢,我会尝试一下,也许会创建一个消息列表并在每个项目上执行 main 函数,而不是在每个返回的信号上执行 main 函数。
-
当我之前(在 C# 中)完成此操作时,我使用了一个从流中读取一行而不是特定字节数的函数。这可能对你更有用。我不知道Python中是否存在这样的函数
-
我想在 C# 中做这件事会好很多,这要归功于文档和微软拥有一个包含所有包含库的大型 wiki。编辑:很抱歉给你发垃圾邮件,我双击 Enter 移动到一个新行,它会重复发布。该函数看起来像 recv(1024) ,我认为它的工作方式是它自上次请求以来轮询新行,如果有两行可用,它将同时抓住这两个行,以加快我假设的速度。降低接收量是可能的,但消息可能真的很长也很短。
标签: python chat bots irc messages