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的主要内容,如果未能解决你的问题,请参考以下文章

Discord.py 重写,设置后台任务,后台任务不加载

discord.py 后台任务循环的问题

@bot.event 在一个 cog discord.py

数据未在 github 上为 discord.py bot 保存

discord.py 'Bot' 对象没有属性 'send_message'

从用户名 Discord.py 获取用户 ID