python - Twitch IRC 聊天机器人成功连接但未检测到命令

标签 python python-3.x irc twitch chatbot

我开始使用 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()

最佳答案

我已经找到解决办法了,如果还有人有同样的问题的话!通过 chat() 函数传递的消息必须将 \r\n 添加到字符串末尾,并且要检查的命令将为 !测试\r\n。我确信这就是 IRC 的工作方式,但这一添加现在可以让机器人响应命令!

关于python - Twitch IRC 聊天机器人成功连接但未检测到命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33049383/

相关文章:

Python 请求 SSL 错误 : hostname doesn't mactch either of

python - 安装python时出错

python-3.x - Pandas 数据框使用列逻辑删除重复行

javascript - AJAX IRC客户端,怎么样?

python - 给定数据类型的所有列的列表

python - 可以在 numpy 方法中使用 sympy 对象吗?

python - 有没有办法将默认参数设置为等于另一个参数值?

Python 正则表达式反向引用命名组

python - 是否可以在类中线程化子类?

python - 创建 twitch irc 机器人(登录身份验证失败)