Discord.py 从后台线程关闭 Bot
Posted
技术标签:
【中文标题】Discord.py 从后台线程关闭 Bot【英文标题】:Discord.py close Bot from background thread 【发布时间】:2021-05-29 19:07:36 【问题描述】:我真的没有很好的理由这样做,但我一直在坚持,我现在真的很想这样做。我的不和谐服务器有一个不和谐机器人,主要在晚上使用。所以我想创建一个线程,在“非活动”时间关闭机器人。然而,我真的很难做到。到目前为止我所拥有的:
async def wait():
print('In thread')
time.sleep(5)
await bot.close()
print('Bot should now be stopped')
def threat():
asyncio.run(wait())
p1 = Process(target=threat)
p1.start()
bot.run(TOKEN)
这不是所有的代码,但这些是重要的东西。一般来说,我真的不明白 asyncio 有什么大惊小怪的,因为无论哪种方式,您都必须等待一个协程完成才能进入下一个协程,而它一直在阻止您的执行.. 不是吗那么普通的线性执行?
无论如何,我们将不胜感激任何帮助! :)
【问题讨论】:
【参考方案1】:您基本上可以使用 time 模块并创建一个函数,例如每 30 分钟检查一次小时或执行命令时(如果您的机器人有命令)。 然后,如果返回的小时在您的“非活动”时间戳中,只需关闭机器人。
【讨论】:
【参考方案2】:你可以尝试做任务
...
from discord.ext import tasks
...
@task.loop(seconds=3600) # this will execute the func. every 1 hour
async def Do_Something():
# your code
...
更多信息,您可以阅读官方文档。 https://discordpy.readthedocs.io/en/latest/ext/tasks/index.html
【讨论】:
我添加了这个:python @tasks.loop(seconds=5) async def death(): await bot.close() print("I died?")
但没有任何反应。在我看到他们使用 Cog 类的文档中,我是否必须在这样的类中添加它?
我无法编辑我之前的评论,所以我添加了一条新评论。我没有调用 .start() 方法来启动任务。我将它添加到 Cog 类中并且工作得非常好。它也是@task**s**.loop
而不是@task.loop
。谢谢!以上是关于Discord.py 从后台线程关闭 Bot的主要内容,如果未能解决你的问题,请参考以下文章
数据未在 github 上为 discord.py bot 保存