gpt4 book ai didi

python - Twitch IRC 机器人不发送消息

转载 作者:太空宇宙 更新时间:2023-11-03 18:16:07 24 4
gpt4 key购买 nike

我正在尝试为我 friend 的直播制作一个 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 机器人,以便更好地工作。

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

import socket,time
network = 'irc.example.net'
port = 6667
channels = ['#Channel1','#Channel2'] #Add as many as you want
nick = 'myIRCBot'
identify = True
password = 'superAwesomePassword'
irc = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
print "Connecting to "+network+" ..."
irc.connect ((network, port))
print "Changing nick to "+nick+"..."
irc.send ('NICK '+nick+'\r\n')
if identify == True:
print "Verifying password..."
irc.send("PASS %s\n" % (password))
print "Setting login data..."
irc.send ('USER '+nick+' '+nick+' '+nick+' :'+nick+' IRC\r\n')
time.sleep(1)
for channel in channels:
print "Joining "+channel+"..."
irc.send ('JOIN '+channel+'\r\n')
irc.send ('PRIVMSG '+channel+' :'+nick+' Started! Type .help for more\r\n')
time.sleep(1)
print nick+" bot started."
while True:
data = irc.recv(4096)
if data.find('PING') != -1:
irc.send('PONG '+data.split()[1]+'\r\n')
try:
user = data.split("!",1)[0].replace(":","",1)
vhost = data.split(" ",1)[0].split("!",1)[1]
dType = data.split(" ",1)[1].split(" ",1)[0]
chan = data.split(" ",1)[1].split(" ",1)[1].split(" ",1)[0]
msg = data.split(" ",1)[1].split(" ",1)[1].split(" ",1)[1].replace(":","",1).replace("\n","",1).replace("\r","",1)
if msg == '.help':
irc.send ('PRIVMSG '+chan+' :This is the only command!\r\n')
print user+" ("+vhost+") "+dType+" to "+chan+": "+msg
except:
pass

最佳答案

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

当您想从 IRC 消息中提取命令时,最简单(尽管不完全可靠)的方法是获取您现在拥有的单词列表的第一个元素,就像您在检查 if 时所做的那样行[0] ==“PING”。在本例中,“PING”是命令。

现在,如果您指的不是 IRC 协议(protocol)命令,而是其他用户作为消息发送的命令,那就是另一回事了。所有收到的消息(私有(private)消息或 channel 消息)均遵循以下格式:

PRIVMSG <message target> :<message received>

因此,如果您正在查找来自其他用户的消息,其中收到的消息部分中包含“!test”。最有可能发生的情况是,当您string.split(line)时,收到的消息部分的第一个单词是":!test"只是“!test”。如果您只想完整保留整个 IRC privmsg 的消息部分,那么您真正需要做的是查找冒号并获取其后的所有内容,即

words = line.split()
if words[0] == "PRIVMSG":
message = line[line.find(":"):][1:]
message_words = message.split()
if "!test" in message_words:
print "If you see this, it recognizes the command"

message = line[line.find(":"):][1:] 有点困惑,但那里发生的只是我找到了第一次出现的":" 放在该行中,然后将冒号切掉。

关于python - Twitch IRC 机器人不发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24973559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com