我开始用Python做一个简单的Twitch聊天机器人。它连接得很好,还可以看到聊天中其他人发送的消息。然而,我的问题是,当命令被使用时,我似乎无法检测到它们。我可以获取聊天条目的用户名和消息,甚至可以将它们打印到控制台,但是将它们传递给chat()
函数不会做任何事情。
另一个奇怪之处是,机器人有时会随机发送包含PONG响应的聊天消息。
我想我遗漏了一些明显的东西,可能是我在聊天中检查命令的方式,或者是我的整个chat()
函数。
import re
from time import sleep
import socket
HOST = "irc.twitch.tv"
PORT = 6667
NICK = "bot_name"
PASS = "oauth:..."
CHAN = "#channel"
RATE = (20 / 30)
CHAT_MSG = re.compile(r"^:\w+!\w+@\w+\.tmi\.twitch\.tv PRIVMSG #\w+ :")
def main_loop():
try:
s = socket.socket()
s.connect((HOST, PORT))
s.send("PASS {}\r\n".format(PASS).encode("utf-8"))
s.send("NICK {}\r\n".format(NICK).encode("utf-8"))
s.send("JOIN {}\r\n".format(CHAN).encode("utf-8"))
connected = True
except Exception as e:
print(str(e))
connected = False
while connected:
response = s.recv(1024).decode("utf-8")
if response == "PING :tmi.twitch.tv\r\n":
s.send("PONG :tmi.twitch.tv\r\n".encode())
print("PONG")
else:
username = re.search(r"\w+", response).group(0)
message = CHAT_MSG.sub("", response)
if message == "!test":
chat(s, "Testing command received!")
print(username + ": " + message)
sleep(1)
def chat(sock, msg):
sock.send("PRIVMSG {} :{}".format(CHAN, msg).encode())
if __name__ == "__main__":
main_loop()
发布于 2015-10-10 03:28:19
如果其他人有同样的问题,我找到了解决方案!通过chat()
函数传递的消息必须将\r\n
添加到字符串的末尾,并且要检查的命令将为!test\r\n
。我确信这就是IRC的工作方式,但是现在增加的这个功能可以让机器人响应命令!
https://stackoverflow.com/questions/33049383
复制