Python IRC bot,用于Twitch在一个输出中接收两条消息

2024-09-30 20:25:34 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我创建了一个聊天机器人抽搐电视几个月前已经好几个月了。要么聊天太频繁,要么twitch改变了他们发送信息的方式。不管怎样,在收到的每一条消息中,当打印到控制台时,我都会添加一个新行,而有些消息没有添加行,这意味着多个消息可以放在一个行中irc.recv公司(). 我尝试编辑recv的大小,但没有成功。这是印刷品的图像irc.recv公司()给予,以防有帮助。在

http://i.stack.imgur.com/pWeGt.jpg

如果你看中间部分,你会发现这两条消息之间没有空格,这意味着如果第二个人做了一些可以禁止的事情,第一个用户将被禁止。在

正如你所看到的,你可以很容易地通过“:nick!nick@nick.tmi.twitch.tvPRIVMSG#channel:“,但是对于理解这种设计的人来说,滥用bot并让任何人超时也很容易。在

我希望实现的是修改irc.recv公司()以便它只接收并且始终只接收一条消息。在

下面是一些代码片段,可以更好地理解正在发生的事情。在

# -*- 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工作的一部分,我很想知道,但如果你知道解决问题的方法,我将不胜感激。在

谢谢。在


Tags: importsend消息serverircbotchannel公司
1条回答
网友
1楼 · 发布于 2024-09-30 20:25:34

我决定使用性能安全性,因为在这种情况下,安全性并不是什么大问题。我是怎么解决的:

senderdata = irc.recv(2048) #gets output from IRC server
    linecount = senderdata.count('\r\n')
    if(linecount == 1):
        print senderdata
        print "Single message"
        tryComment(senderdata)
    elif(senderdata.find('tmi.twitch.tv JOIN ' + channel) != -1):
        print linecount-1, 'People joined'
    elif(senderdata.find('tmi.twitch.tv PART ' + channel) != -1):
        print linecount-1, 'People left'
    elif(linecount > 1):
        print "Multiple messages"
        messagelist = []
        messagelist = senderdata.split('\r\n')
        print len(messagelist)
        for i in range(0, len(messagelist)):

            if (len(messagelist[i]) > 0):
                print messagelist[i]
                tryComment(messagelist[i])
                print "message number: "
                print i
            else:
                print "This message is empty"
                print i

如果有人试图复制这个“解决方案”,“tryComment()”就是检查消息的原始主循环。如果是某人加入、某人离开或消息为空,则会忽略检查函数。在

相关问题 更多 >