发布于 2026-01-06 5 阅读
0

让我们用Python制作一个Twitch机器人吧!

让我们用Python制作一个Twitch机器人吧!

本教程将指导您如何快速上手一个简单的 Twitch 频道聊天机器人。

本教程面向哪些用户?

适合编程初学者和刚接触 Python 的经验丰富的程序员。

内容

我们首先会设置账户、获取密钥并安装软件。然后我们会设置并编写机器人代码。本教程结束时,您应该就可以开始添加自己的自定义命令了。

但首先……我们需要确保我们的证件齐全。👏

请出示证件!

📢荣耀归于阿尔斯托兹卡!

  1. 在Twitch上注册一个账号(用于你的机器人),或者使用你平时直播的账号。账号名可以起得酷炫一点,比如RealStreamer69😎
  2. 请求 OAuth 代码。您需要登录并授予应用权限才能生成该代码。
  3. 在 Twitch 开发者平台注册您的应用并申请客户端 ID(以便您可以与 Twitch 的 API 进行交互)。

请将 OAuth 密钥和客户端 ID 保存在方便查找但不要公开的地方。稍后您需要使用它们来配置机器人。

💡专业提示™ ——保密,保管好。

安装所有东西!🧹

  1. 安装 Python 3.6 或 3.7 -- Windows // Linux // OS X
  2. 安装 PIPENV。在控制台中运行 ⇒pip install pipenv

为机器人打造一个舒适的家

虚拟环境的设置需要一些额外的步骤,但它能让 Python 应用的开发变得轻而易举。在本教程中,我们将使用PIPENV,它将 pip 和 venv 合并到一个软件包中。

  • 在控制台中,导航到您的工作目录。
  • 运行 ⇒pipenv --python 3.6pipenv --python 3.7
    • 这将创建pipfilepiplock。它们保存虚拟环境信息,例如 Python 版本和您安装的库。
  • 然后运行 ​​⇒pipenv install twitchio

配置和授权机器人

在你的工作目录中创建 2 个文件。一个名为bot.py,另一个名为.env(没有文件名,只有扩展名 - 我知道这很奇怪)。

/.env

您的密钥将保存在.env文件中。请将上面提到的 OAuth 令牌和客户端 ID 添加到=文件中的相应位置。同时,也请填写其他变量。

# .env
TMI_TOKEN=oauth:
CLIENT_ID=
BOT_NICK=
BOT_PREFIX=!
CHANNEL=
Enter fullscreen mode Exit fullscreen mode

/bot.py

在内部bot.py,导入我们需要的库,并创建我们将在下一步中启动的机器人对象。

# bot.py
import os # for importing env vars for the bot to use
from twitchio.ext import commands

bot = commands.Bot(
    # set up the bot
    irc_token=os.environ['TMI_TOKEN'],
    client_id=os.environ['CLIENT_ID'],
    nick=os.environ['BOT_NICK'],
    prefix=os.environ['BOT_PREFIX'],
    initial_channels=[os.environ['CHANNEL']]
)
Enter fullscreen mode Exit fullscreen mode

💡专业提示™ -- 使用 PIPENV 运行时bot.py,它首先会将文件中的变量加载.env到虚拟环境中,然后再运行bot.py。因此,在这个虚拟环境中,我们可以(以实例为单位)访问这些变量。我们将使用 Python 的os模块来导入它们,就像在本地环境中导入环境变量一样。

在文件末尾bot.py,我们需要确保当我们直接调用时,机器人能够运行。if __name__ == "__main__":

# bot.py
if __name__ == "__main__":
    bot.run()
Enter fullscreen mode Exit fullscreen mode

唤醒机器人(唤醒里面的机器人!)

我们来测试一下这个机器人,确保它能连接到 Twitch。

  • 在控制台中运行 ⇒pipenv run python bot.py

如果成功,你不应该收到任何错误——这意味着环境变量已正确加载,你的机器人已成功连接到 Twitch!

如果遇到错误,请先查看下一节再继续。

错误:无法唤醒。[救救我]

一只野兽Request to join the channel has timed out. Make sure the channel exists.出现。你躲开了……

  1. 请确保 .env 文件中包含正确的令牌(oauth 和 client-id),并且它们与 .env 文件位于同一目录/文件夹中。bot.py

  2. 此时您的目录结构应该如下所示……

    工作目录/
    ├─ .env
    ├─ bot.py
    ├─ Pipfile
    └─ Pipfile.lock
    
  3. 如果这样还是不行,请在下方留言,我们会帮您解决!

为机器人添加一些功能

欢迎来到聊天室!

回到bot.py……在机器人对象下方,我们创建一个event_ready带有装饰器的函数@bot.event。该函数会在机器人启动时运行一次。然后,它会向终端和聊天窗口报告已成功连接到 Twitch。

# bot.py, below bot object
@bot.event
async def event_ready():
    'Called once when the bot goes online.'
    print(f"{os.environ['BOT_NICK']} is online!")
    ws = bot._ws  # this is only needed to send messages within event_ready
    await ws.send_privmsg(os.environ['CHANNEL'], f"/me has landed!")
Enter fullscreen mode Exit fullscreen mode

再次测试机器人。它现在上线时应该会显示聊天问候语。

登陆

回复聊天消息

接下来,我们将添加一个函数,该函数会在每次频道收到消息时运行。您稍后可以在这里添加各种逻辑,但我们首先要确保机器人忽略自身。

# bot.py, below event_ready
@bot.event
async def event_message(ctx):
    'Runs every time a message is sent in chat.'

    # make sure the bot ignores itself and the streamer
    if ctx.author.name.lower() == os.environ['BOT_NICK'].lower():
        return
Enter fullscreen mode Exit fullscreen mode

之后,我们会添加一行代码,让聊天中发送的每条消息都烦人地重复显示。

# bot.py, in event_message, below the bot-ignoring stuff
await ctx.channel.send(ctx.content)
Enter fullscreen mode Exit fullscreen mode

重启机器人并检查一下!

撕裂

💡专业提示™ -- 现在就把那一行注释掉,因为它真的很烦人。

创建聊天命令

定义任何命令时,都需要遵循这种格式。

  • 装饰着@bot.command(name='whatever')
  • 异步函数,其名称与name装饰器中的变量匹配。
  • 通过函数传递消息上下文

这个函数如何运作以及它具体做什么,完全取决于你。在这个例子中,我们将创建一个名为“在聊天中!test显示”的命令,test passed!当我们调用它时,它会显示一些内容。

# bot.py, below event_message function
@bot.command(name='test')
async def test(ctx):
    await ctx.send('test passed!')
Enter fullscreen mode Exit fullscreen mode

在此之前,我们需要确保机器人知道要监听传入的命令。

在忽略机器人代码下方添加以下代码event_message

    #bot.py, in event_message, below the bot ignore stuffs
    await bot.handle_commands(ctx)
Enter fullscreen mode Exit fullscreen mode

好了!是时候测试一下了。重启机器人,然后发送!test聊天信息!

测试通过

回复特定消息

告诉我的机器人我说……“你好。”

你也可以回复聊天中的特定消息,它们不一定是!commands……我们来写一段代码,当有人说“你好”时,它会自动回复“你好”。

    # bot.py, at the bottom of event_message
    if 'hello' in ctx.content.lower():
        await ctx.channel.send(f"Hi, @{ctx.author.name}!")
Enter fullscreen mode Exit fullscreen mode

快去试试吧!你已经有了构建机器人和添加命令的框架。

告诉我的机器人我说

你完成后应该拥有以下物品。

/bot.py

import os
from twitchio.ext import commands

# set up the bot
bot = commands.Bot(
    irc_token=os.environ['TMI_TOKEN'],
    client_id=os.environ['CLIENT_ID'],
    nick=os.environ['BOT_NICK'],
    prefix=os.environ['BOT_PREFIX'],
    initial_channels=[os.environ['CHANNEL']]
)

@bot.event
async def event_ready():
    'Called once when the bot goes online.'
    print(f"{os.environ['BOT_NICK']} is online!")
    ws = bot._ws  # this is only needed to send messages within event_ready
    await ws.send_privmsg(os.environ['CHANNEL'], f"/me has landed!")


@bot.event
async def event_message(ctx):
    'Runs every time a message is sent in chat.'

    # make sure the bot ignores itself and the streamer
    if ctx.author.name.lower() == os.environ['BOT_NICK'].lower():
        return

    await bot.handle_commands(ctx)

    # await ctx.channel.send(ctx.content)

    if 'hello' in ctx.content.lower():
        await ctx.channel.send(f"Hi, @{ctx.author.name}!")


@bot.command(name='test')
async def test(ctx):
    await ctx.send('test passed!')


if __name__ == "__main__":
    bot.run()
Enter fullscreen mode Exit fullscreen mode

当然,.env还有你的秘密,pipfile以及Piplock……

如果你喜欢的话,我也把文件上传到了GitHub 仓库。

恭喜!!🥳🎉

你已经走到这一步了……你知道这意味着什么吗?是时候庆祝一下了!点击这个 GitKraken 推荐链接注册,这样我就可以免费获得袜子(或者一辆特斯拉?😎)。

另外,欢迎观看我们开发本教程的直播编程回顾。感谢所有在聊天室参与合作的朋友们!

接下来你想做什么?

有任何问题、意见或想法吗?请在下方评论区留言!

我很快会跟进这篇文章,分享一些如何充分利用 TwitchIO 库的技巧——更多一些文档不够完善、弄明白起来很麻烦的东西,比如如何获取作者信息、使用徽章获取权限等等。

文章来源:https://dev.to/bun9000/let-s-make-a-twitch-bot-with-python-2nd8