Twitch IRC bot不发送消息

2024-05-23 13:56:42 发布

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

我正在尝试为我朋友的直播制作一个Twitch机器人,但在让它发送消息(或识别命令)时遇到了一些问题。在

我的代码:

import socket,string
HOST = "irc.twitch.tv"
PORT = 6667
NICK = "Axiom"
IDENT = "Axiom"
REALNAME = "Axiom"
CHANNEL = "#itwreckz"
PASSWORD = "oauth:PASSHERE"
readbuffer = ""
print "Connecting.."
t = socket.socket()
t.connect((HOST, PORT))
print "Connected! Logging in"
t.send("PASS %s\r\n" % PASSWORD)
t.send("NICK %s\r\n" % NICK)
t.send("USER %s %s BOT :%s\r\n" % (IDENT, HOST, REALNAME))
print "Logged in. Joining Channel"
t.send("JOIN %s\r\n" % CHANNEL)
print "JOINED!"

while 2>1:
    readbuffer = readbuffer+t.recv(1024)
    taco = string.split(readbuffer, "\n")
    readbuffer = taco.pop()
    for line in taco:
        line=string.rstrip(line)
        line=string.split(line)
        if len(line) > 3:
            print line
            command = line
            if "!test" in command:
                print "If you see this, it recognizes command." #Doesn't show
                t.send("PRIVMSG %s :IT WORKS!\r\n" % CHANNEL) #This either
        if(line[0]=="PING"):
            t.send("PONG %s\r\n" % line[1])

有人知道我在哪里搞砸的吗?在

if len(line) >3:起作用,因为它显示聊天中发送的消息(只有当消息长度超过3个字符时)。所以我想我已经准备好了。它打印信息等

我就是不能让命令生效。在


编辑:这是一篇非常古老的文章,但我想指出的是,我最终还是重新设计了整个IRC机器人,以便更好地工作。在

对于任何可能感兴趣的人:

^{pr2}$

Tags: insendhost消息stringiflinechannel
1条回答
网友
1楼 · 发布于 2024-05-23 13:56:42

line=string.rstrip(line)行,您正在删除该行的尾随空格。在下一行,line=string.split(line),您将把这行拆分成单词。在此之后,line是消息中每个单词的列表。所以实际上,当你检查len(line) > 3时,你是在检查这行是否有三个以上的单词。在

当您想从IRC消息中提取命令时,最简单(虽然不完全可靠)的方法是只获取您现在拥有的单词列表的第一个元素,就像您在其中选中if line[0] == "PING"。在本例中,“PING”是命令。在

现在,如果你指的不是IRC协议命令,而是其他用户作为消息发送的命令,那就另当别论了。所有私人或频道接收的消息都遵循以下格式:

PRIVMSG <message target> :<message received>

因此,如果您要查找来自其他用户的消息,其中的message received部分包含{}。最有可能发生的是当你string.split(line)时,message received部分的第一个单词是":!test",而不是{}。如果您希望整个IRC privsgmg的消息部分保持完整,您真正需要做的是查找冒号并获取后面的所有内容,即

^{pr2}$

这行message = line[line.find(":"):][1:]有点乱,但是我发现了":"的第一个出现,然后把它的冒号切掉。在

相关问题 更多 >