运行 discord 机器人和 twitch 机器人

Running discord bot alongside twitch bot

我有 twitch 机器人和 discord 机器人。我想通过 discord 控制 twitch bot,并将一些数据从 twitch bot 发送到 discord bot。例如,我会在 discord 中输入“?unload xx”,它会关闭 twitch 机器人中的某些功能。另一个例子是,在一些 twitch 事件之后,我会向 discord bot 发送数据,discord bot 会在频道中显示它。我试图 运行 discord 机器人,然后在后台循环中抽动机器人,但这没有用。我也试图为 webhooks 设置 http 服务器,但这也不起作用。有什么我想念的吗?我无法解决这个问题。谢谢大家的帮助。

编辑 两者都在 python 中,不同的文件,但导入到主文件中,而 运行 则在一个文件中。 我在尝试 asyncio,那是后台的 discord bot 和 twitch,但我收到“此事件循环已经 运行ning”错误。 我也在不同的线程中尝试了 discord bot 和 http 服务器,但它的工作真的很奇怪,有时没有响应,有时没有事件开始,一段时间后关闭。

这是我试过但没有用的穿线方式

discord_bot = TestBot(command_prefix="?", intents=discord.Intents.default())
twitch_bot = Bot()

twitch_thread = threading.Thread(target=twitch_bot.run, daemon=True)

twitch_thread.start()
discord_bot.run(TOKEN)

有两种方法可以解决这个问题。

一个正在使用 background task.

另一个(我将重点介绍)正在使用线程 - 一个内置(我相信)python 库。


import threading
import twitch_bot, discord_bot

#remember not to add brackets after the funcion name, I do that way too often.
#Setting `daemon` to `True` will make the Twitch bot stay online if the discord one crashes.
t = threading.Thread(target = twitch_bot.main,daemon=True)
t.start()

#here we are calling the main funtion of the discord bot in the current thread; there is no need to create a new one.
discord_bot.main()

根据 discord.py API 中的 discord.Client.run 部分参考:

This function must be the last function to call due to the fact that it is blocking. That means that registration of events or anything being called after this function call will not execute until it returns.

我建议您使用 discord.Client.start 而不是 discord.Client.run。它应该与 asyncio 一起工作,假设 twitch_bot.run 不会像 discord.Client.run 那样阻塞。

loop = asyncio.get_event_loop()
loop.create_task(discord_bot.start(TOKEN))
loop.create_task(twitch_bot.run())
loop.run_forever()