在树莓派上运行 Twitch 机器人

在此树莓派 Twitch 机器人教程中,我们将向您展示如何使用 Python 编写自己的 Twitch 主持人,该主持人将在树莓派上运行。

我们将向您展示如何编写的 bot 本质上很简单,但可以改编为功能强大且用途广泛的 bot 。我们将向您解释并向您展示如何编写的基础知识是一个简单的机器人,它将连接到 Twitch 的 IRC (互联网中继聊天) 聊天中。

连接后,该漫游器将继续接收所有消息并扫描与我们的禁止模式匹配的任何消息。如果有任何匹配的模式,它将自动禁止它们进入服务器。当使用特定短语时,您还可以使用此方法使用户超时或将消息发布到聊天中。

如果您想知道 Twitch 是什么,它是主要用于游戏的视频流服务。视频旁边显示聊天,这是与彩带进行交互的关键功能。您可以在 Twitch 的网站上了解更多信息。

尽管这是一个相当基本的主持人 bot ,但可以通过一点 Python 知识轻松扩展。这是一个伟大的 Pi 项目,如果您是 Twitch 流光播放器,无论大小,它都有很多用途。

设备清单

以下是完成此 Twitch 机器人教程所需的所有点点滴滴。

推荐的

  • 树莓派

  • Micro SD 卡

  • 电源

  • 以太网网络连接

可选的

  • 树莓派外壳

获取 Twitch oAuth 令牌

1 在对 Twitch 主持人机器人进行编程之前,我们首先需要从 Twitch 获取 OAuth 密钥。当然,这意味着您需要准备一个 Twitch 帐户,以用作频道的漫游器。

拥有所需的用户后,转到 Twitch apps tmi。您将看到下面的屏幕。按下” 与 Twitch 连接 “按钮继续。

2 如果您尚未登录,则会要求您登录。否则,将显示以下屏幕。通过此屏幕,您可以授权 Twitch 通过 IRC 访问聊天。按授权继续。

3 最后,您的 OAuth 令牌现在将显示给您。将此令牌复制到安全的地方,因为在编写脚本时不久将需要此令牌。此 OAuth 令牌将使我们能够登录 IRC 频道。

编程我们的 Twitch 主持人 Bot

1 现在,我们已经获取了 Twitch OAuth 令牌,现在可以继续编写脚本了。为了达到我们的目的,我们将使用 Python ,它的通用性和速度足以满足我们的基本需求。

如果您不熟悉 Python ,则可以考虑查看我们的 Python 入门指南。

首先,我们创建一个文件夹,将其保存在脚本中,运行以下命令以创建目录并移至该目录中。

mkdir 〜/twitchbot
cd 〜/twitchbot

2 现在,我们已经制作了文件夹并将其更改为该文件夹,我们可以继续编写脚本了。让我们开始制作一个简单的文件,该文件将保留我们的所有配置。此文件将有助于轻松更改我们希望可配置的任何值。

运行以下命令开始编写我们的第一个 Python 文件。

vim 配置

3 在此文件中添加以下行。确保将 Twitch 用户名替换为 twitch \ _username,将我们之前获取的 OAuth 令牌替换为 your _oauthtoken,将您的漫游器添加为您的通道的名称。 。

** BAN \ _PAT ** 是我们定义要在聊天消息中查找的模式的地方。例如,如果要禁止输入特定单词或链接的任何人,可以将其添加到数组中。

HOST ="irc.twitch.tv"#这是 Twitchs IRC服务器
PORT = 6667#Twitchs IRC服务器在端口 6767 上侦听
NICK ="twitch_username"#您的机器人使用的 Twitch 用户名
PASS ="your_oauthtoken"#您的 Twitch OAuth令牌
CHAN ="#your_channel"#您要让漫游器加入的频道。
RATE =(20/30)#消息/秒
BAN_PAT = [
    r"发誓",
    r"some_pattern"
]

填写完信息后,请依次按 ** Ctrl + X Y ,然后按 Enter ,保存文件。4** 我们现在可以继续编写实用的 Python 文件。我们将在此文件中保留一些简单的功能,以保持主文件的整洁。尽管这些功能可以完成简单的事情,但使将它们全都放在一个地方变得更加容易。
运行以下命令以开始编写 Python 脚本。

vim 实用程序

5 我们要在此文件中添加以下代码行。我们将逐步解释每个代码块。

def chat(袜子,味精):

“”
将聊天消息发送到服务器。
关键字参数:
sock - 通过其发送消息的套接字
msg - 要发送的消息
“”
sock.send((“PRIVMSG {}:{} \ r \ n”.format(config.CHAN,msg))。 encode (“UTF-8”))

这一段 Python 代码定义了聊天消息,几乎我们所有的功能都将通过该代码运行。此代码基本上是通过我们的套接字向 Twitch 的 IRC 服务器发送格式化消息。

def ban(袜子,用户):

“”
禁止用户访问当前频道。
关键字参数:
sock - 发送 ban 命令的套接字
用户 - 被禁止的用户
“”
chat (袜子,”。 ban {}”。 format (用户))

此代码向服务器发出 ban 命令。这个过程会格式化一个禁令消息,并通过我们的聊天功能将其发送出去。该函数既接受要发送的套接字,也接受我们要禁止的用户名。

def超时(袜子,用户,秒数= 600):

“”
使用户超时一段时间。
关键字参数:
sock - 通过其发送超时命令的套接字
用户 - 要超时的用户
secs - 超时时间,以秒为单位 (默认为 600)
“”
chat(sock,”.timeout {}”。 format (user,secs))

这一段代码与 ban 函数非常相似,只是它格式化了一个超时命令。它使用超时,要超时的用户以及超时用户的时间格式化消息。

6 树莓派 Twitch 机器人的最终文件应该看起来像下面显示的那样。

导入配置
进口插座

def chat(袜子,味精):

“”
将聊天消息发送到服务器。
关键字参数:
sock - 通过其发送消息的套接字
msg - 要发送的消息
“”
sock.send((“PRIVMSG {}:{} \ r \ n”.format(config.CHAN,msg))。 encode (“UTF-8”))

def ban(袜子,用户):

“”
禁止用户访问当前频道。
关键字参数:
sock - 发送 ban 命令的套接字
用户 - 被禁止的用户
“”
chat (袜子,”。 ban {}”。 format (用户))

def超时(袜子,用户,秒数= 600):

“”
使用户超时一段时间。
关键字参数:
sock - 通过其发送超时命令的套接字
用户 - 要超时的用户
secs - 超时时间,以秒为单位 (默认为 600)
“”
chat(sock,”.timeout {}”。 format (user,secs))

一旦完成代码编写,请按 Ctrl + X,然后按 Y ,然后按 Enter ,以保存文件。

7 现在我们已经写了配置文件和实用程序脚本,我们可以继续编写主脚本了。当前文件夹将是我们的机器人运行的位置。它将利用配置文件中的配置并利用我们在实用程序脚本中编写的功能。

让我们通过运行以下命令开始编写主脚本。

vim 主

8 现在,向该文件中添加以下代码行。该文件将建立我们与 Twitch 的 IRC 服务器的连接,并遍历它收到的所有消息。

#!/usr/bin/env python
导入配置
导入实用程序
进口插座
导入时间
汇入

CHAT_MSG = re.compile(r"^:\ w +!\ w + @ \ w + \。 tmi \ .twitch \ .tv PRIVMSG#\ w +:")

前几行将导入我们需要的所有外部功能。其中的前两个是我们编写的脚本,即配置脚本和实用程序脚本。 ** Socket ** 是我们用来与 Twitch 的 IRC 服务器对话的库。时间是用来跟踪我们发送消息的频率的库,而”re 库” 是我们将使用正则表达式的库。

我们还定义了 ** CHAT \ _MSG ** 变量,这仍然是我们编译后的正则表达式。此表达式将从 IRC 消息的其余部分中筛选出我们的消息。

尝试:
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"))
已连接=正确#套接字已成功连接
例外,例如 e :
打印(str(e))
connected = False#套接字无法连接

脚本的这一部分就是我们用来连接 Twitch 的 IRC 服务器的部分。这部分将初始化连接,并通过我们的用户名,OAuth 令牌和我们的连接命令发送到服务器。我们在 try 语句中运行所有这些操作,因此我们可以捕获任何错误并将其打印到日志中。我们还将根据连接变量是否成功连接将其设置为 true 或 false 。
def bot_loop():
连接时:
响应 = s.recv (1024).decode (“utf-8”)
如果响应 ==”PING:tmi.twitch.tv \ r \ n”:
s.send(“PONG:tmi.twitch.tv \ r \ n”.encode(“utf-8”))
打印 (“Pong”)
其他:

现在,我们编写 bot 循环功能,并将在两部分中对此进行解释。代码的第一部分检查我们是否首先连接,是否连接,我们检查是否有任何东西要接收,是否有东西要抓取并解码。

然后,我们检查接收到的消息,如果它等于来自 IRC 服务器的 ping 命令,那么我们需要用 PONG 消息对此做出响应。否则将意味着我们从 IRC 服务器启动。

用户名= re.search(r"\ w +",响应).group(0)
消息= CHAT_MSG.sub("",响应)
打印(用户名+":"+响应)
用于 config .BAN_PAT中的模式:
如果 re .match(pattern,message):
utility.ban(s,用户名)
打破
time.sleep(1 /配置速率)

如果__name__ =="__main__":
bot_loop()

脚本的最后一部分完成了主要工作。第一行将使用我们的正则表达式从 IRC 消息中获取用户名,第二行将获取用户发送的消息。

然后,我们将搜索在配置文件中设置的”BAN_PAT”。如果我们在与模式的消息中找到任何匹配项,则将运行在实用程序文件中定义的 ban 函数。

之后,我们将休眠一段在配置文件中定义的时间。

最后,我们进行”name“主检查。进行此检查将使我们可以根据需要将此文件用作库。这意味着我们的循环不会运行到已被调用的 bot_loop 函数中。

完成输入所有代码后,您的脚本应类似于下面显示的内容。

#!/usr/bin/env python
导入配置
导入实用程序
进口插座
导入时间
汇入

CHAT_MSG = re.compile(r"^:\ w +!\ w + @ \ w + \。 tmi \ .twitch \ .tv PRIVMSG#\ w +:")

尝试:
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"))
已连接=正确#套接字已成功连接
例外,例如 e :
打印(str(e))
connected = False#套接字无法连接

def bot_loop():
连接时:
响应= s.recv(1024).decode("utf-8")
如果响应=="PING:tmi.twitch.tv \ r \ n":
s.send("PONG:tmi.twitch.tv \ r \ n".encode("utf-8"))
打印("Pong")
其他:
用户名= re.search(r"\ w +",响应).group(0)
消息= CHAT_MSG.sub("",响应)
打印(用户名+":"+响应)
用于 config .BAN_PAT中的模式:
如果 re .match(pattern,message):
utility.ban(s,用户名)
打破
time.sleep(1 /配置速率)
如果__name__ =="__main__":
bot_loop()

一旦完成代码编写,请按 Ctrl + X,然后按 Y ,然后按 Enter ,以保存文件。

9 现在已编写了所有 python 代码,运行我们的 Twitch 主持人 bot 非常容易,键入以下命令来运行脚本。

python3 ./main.py

您现在应该拥有一个可以正常运行的主持人机器人,该机器人现在应该已经连接到 Twitch 聊天室中,并且正在搜索数组中提到的任何模式。

希望本教程对脚本有很好的了解,并允许您根据需要对其进行修改。如果您对此树莓派抽搐机器人教程有任何反馈,请在下面发表评论。

分享到