在这个Raspberry Pi Twitch机器人教程中,详细记录了如何在树莓派上用Python编程Twitch Moderator。
Twitch是一个视频流服务,主要针对游戏。聊天在视频旁边显示,这是与流媒体人互动的一个关键功能。可以在他们的网站上查看更多关于Twitch的信息。
这个机器人可以扩展成为一个相当强大和通用的机器人。我将向你解释和展示如何编写的基础知识,把它连接到Twitch的IRC(互联网中继聊天)聊天。一旦连接,机器人将持续接收所有信息,并扫描符合我们的禁令模式。如果有任何符合模式的消息,它将自动将其从服务器上禁止。也可以使用这个功能来超时用户或在使用特定短语时在聊天中发布消息。
虽然这是一个相当基本的版主机器人,但只要有一点Python知识,它就可以很容易地进行扩展。这是一个很有用Pi项目,如果你是一个Twitch流媒体人,无论大小,都有很多的用途。
设备清单
以下是做这个Twitch机器人教程所需要的所有设备,点击列表可直达特别优惠购买。
建议
可选
获取Twitch oAuth令牌
1. 在开始编程Twitch主持人机器人之前,首先需要从Twitch中获取OAuth密钥。你需要准备好一个Twitch账号,要用它作为频道的机器人。
准备好了想要的用户,进入Twitch应用tmi,会看到下面的屏幕,按 “连接Twitch “按钮继续。
2. 如果还没有登录,会被要求登录。否则,会看到以下屏幕。此屏幕让您授权Twitch通过IRC向您提供访问您聊天的权限。按授权继续。
3. 最后,OAuth令牌会显示给你。复制这个令牌到安全的地方,因为在写脚本的时候需要这个令牌。这个OAuth令牌允许我们登录IRC频道。
为Twitch版主机器人编程
1. 现在已经得到了Twitch OAuth令牌,可以继续编写脚本了。我将利用Python,它的通用性和速度足以满足我们的基本需求。
如果您是Python新手,可能需要考虑查看我的Python入门指南。
首先建立一个文件夹,把我们的脚本放在其中,运行下面的命令来创建我们的目录,并移入其中。
mkdir ~/twitchbot
cd ~/twitchbot
2. 现在已经做好了文件夹,可以继续写脚本了。从制作一个简单的文件开始,它里面写我们得配置。
运行下面的命令开始编写第一个 Python 文件。
nano config.py
3. 在这个文件中添加以下几行。确保将twitch_username替换为Twitch用户名,将your_oauthtoken替换为我们之前抓取的OAuth令牌,将your_channel替换为你希望机器人加入的频道名称。
BAN_PAT 是我定义要在聊天信息中寻找的模式的地方。例如,如果您想禁止任何输入特定单词或链接的人,可以将其添加到数组中。
HOST = "irc.twitch.tv" # This is Twitchs IRC server
PORT = 6667 # Twitchs IRC server listens on port 6767
NICK = "twitch_username" # Twitch username your using for your bot
PASS = "your_oauthtoken" # your Twitch OAuth token
CHAN = "#your_channel" # the channel you want the bot to join.
RATE = (20/30) # messages per seccond
BAN_PAT = [
r"swear",
r"some_pattern"
]
填写完信息后,按Ctrl+X然后按Y键保存文件,然后按Enter键。
4. 现在可以着手编写实用Python文件了。在这个文件中写一些简单的函数,以保持主文件的干净。虽然这些函数做的事情很简单,但把它们放在一个地方会更容易。运行以下命令开始编写Python脚本。
nano utility.py
5. 在这个文件中,要添加以下几行代码。我会解释每行代码。
def chat(sock, msg):
"""
Send a chat message to the server.
Keyword arguments:
sock -- the socket over which to send the message
msg -- the message to be sent
"""
sock.send(("PRIVMSG {} :{}\r\n".format(config.CHAN, msg)).encode("UTF-8"))
这段Python代码定义了聊天消息,几乎所有的函数都通过这段代码运行。这段代码是通过socket向Twitch的IRC服务器发送格式化的消息。
def ban(sock, user):
"""
Ban a user from the current channel.
Keyword arguments:
sock -- the socket over which to send the ban command
user -- the user to be banned
"""
chat(sock, ".ban {}".format(user))
这段代码向服务器发出禁言命令。这个过程将禁言信息格式化并通过我们的聊天函数发送。这个函数接受要发送的套接字和要禁止的用户名。
def timeout(sock, user, secs=600):
"""
Time out a user for a set period of time.
Keyword arguments:
sock -- the socket over which to send the timeout command
user -- the user to be timed out
secs -- the length of the timeout in seconds (default 600)
"""
chat(sock, ".timeout {}".format(user, secs))
这段代码和ban函数很像,只是它格式化了一个超时命令。它格式化了一个超时的消息,你想被超时的用户和超时的时间。
6. Raspberry Pi Twitch机器人的最终文件应该是如下所示的样子。
import config
import socket
def chat(sock, msg):
"""
Send a chat message to the server.
Keyword arguments:
sock -- the socket over which to send the message
msg -- the message to be sent
"""
sock.send(("PRIVMSG {} :{}\r\n".format(config.CHAN, msg)).encode("UTF-8"))
def ban(sock, user):
"""
Ban a user from the current channel.
Keyword arguments:
sock -- the socket over which to send the ban command
user -- the user to be banned
"""
chat(sock, ".ban {}".format(user))
def timeout(sock, user, secs=600):
"""
Time out a user for a set period of time.
Keyword arguments:
sock -- the socket over which to send the timeout command
user -- the user to be timed out
secs -- the length of the timeout in seconds (default 600)
"""
chat(sock, ".timeout {}".format(user, secs))
一旦完成了代码的编写,按Ctrl + X然后按Y,然后按Enter键保存文件。
7. 现在配置文件和实用脚本都已经写好了,可以继续写主脚本了。当前文件夹将是机器人运行的地方。它将利用配置文件中的配置,并利用在实用脚本中写的功能。
通过运行以下命令开始编写我们的主脚本。
nano main.py
8. 现在,要在这个文件中添加以下几行代码。这个文件将设置与Twitch的IRC服务器的连接,并循环浏览它收到的所有消息。
#!/usr/bin/env python
import config
import utility
import socket
import time
import re
CHAT_MSG = re.compile(r"^:\w+!\w+@\w+\.tmi\.twitch\.tv PRIVMSG #\w+ :")
前面这几行导入了我们需要的所有外部功能。其中前两行是我们写的脚本,我们的config和实用脚本。Socket是我们用来和Twitch的IRC服务器对话的库。Time是用来跟踪我们发送消息的频率的库,re库是我们将用来利用正则表达式的库。
还定义了CHAT_MSG变量,这是编译的正则表达式。这个表达式将把信息从其余的IRC信息中筛选出来。
try:
s = socket.socket()
s.connect((config.HOST, config.PORT))
s.send("PASS {}\r\n".format(config.PASS).encode("utf-8"))
s.send("NICK {}\r\n".format(config.NICK).encode("utf-8"))
s.send("JOIN {}\r\n".format(config.CHAN).encode("utf-8"))
connected = True #Socket succefully connected
except Exception as e:
print(str(e))
connected = False #Socket failed to connect
脚本的这一部分是用来连接到Twitch的IRC服务器的。这一部分将初始化连接,并把用户名、OAuth令牌和加入命令发送至服务器。
在try语句中运行这一切,这样就可以捕捉到错误并将其打印到日志中。还根据连接是否成功,将连接变量设置为true或false。
def bot_loop():
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("utf-8"))
print("Pong")
else:
现在我写机器人循环函数,分两段来解释。这第一段代码会检查是否是第一次连接,如果是,就检查是否有什么东西要接收,如果有,就抓取并解码。
然后检查收到的消息,如果等于IRC服务器的ping命令,那么需要用PONG消息来回应。如果没有,就意味着要从IRC服务器上启动。
username = re.search(r"\w+", response).group(0)
message = CHAT_MSG.sub("", response)
print(username + ": " + response)
for pattern in config.BAN_PAT:
if re.match(pattern, message):
utility.ban(s, username)
break
time.sleep(1 / config.RATE)
if __name__ == "__main__":
bot_loop()
脚本的最后一部分是做主要的繁重工作。第一行将使用正则表达式从IRC消息中提取用户名,第二行将提取用户发送的消息。然后搜索在配置文件中设置的BAN_PAT。如果在消息中找到任何与模式匹配的信息,就会运行在实用程序文件中定义的ban函数。之后,在配置文件中定义一段睡眠时间。
最后,进行__name__检查。这个检查可以在需要的时候将这个文件作为一个库来利用。我们的循环不会碰到已经被调用的 bot_loop 函数。
当输入完所有代码后,脚本应该看起来像下面显示的那样。
#!/usr/bin/env python
import config
import utility
import socket
import time
import re
CHAT_MSG = re.compile(r"^:\w+!\w+@\w+\.tmi\.twitch\.tv PRIVMSG #\w+ :")
try:
s = socket.socket()
s.connect((config.HOST, config.PORT))
s.send("PASS {}\r\n".format(config.PASS).encode("utf-8"))
s.send("NICK {}\r\n".format(config.NICK).encode("utf-8"))
s.send("JOIN {}\r\n".format(config.CHAN).encode("utf-8"))
connected = True #Socket succefully connected
except Exception as e:
print(str(e))
connected = False #Socket failed to connect
def bot_loop():
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("utf-8"))
print("Pong")
else:
username = re.search(r"\w+", response).group(0)
message = CHAT_MSG.sub("", response)
print(username + ": " + response)
for pattern in config.BAN_PAT:
if re.match(pattern, message):
utility.ban(s, username)
break
time.sleep(1 / config.RATE)
if __name__ == "__main__":
bot_loop()
一旦完成了代码的编写,按Ctrl + X然后按Y,然后按Enter键保存文件。
9. 现在已经写好了所有的python代码,运行Twitch版主机器人非常简单,输入以下命令即可运行脚本。
python3 ./main.py
现在你应该有一个完全正常工作的版主机器人了,已经连接到Twitch聊天中,并且正在搜索阵列中提到的任何模式。
希望本教程能让你对脚本有一个很好的了解,并让你根据自己的需要进行修改。如果你对这个树莓派Twitch机器人教程有什么反馈,请在下方留言。
欢迎转载,请留下出处链接:Labno3 » Twitch如何自动管理消息,详细步骤用树莓派构建Twitch版主机器人