首页 > 解决方案 > discord.py - 使用异步清理功能卸载 Cogs

问题描述

我正在运行 discord.py 1.6。我加载了一个 Cog,它在 Discord 上维护一个仪表板样式的消息(定期更新)。

卸载此 Cog 时,我想使用默认 await message.delete() 方法(即异步调用)自动删除此仪表板消息。

根据文档,自动运行 Cog-cleanup 代码基本上有 2 个选项:

  1. 扩展清理功能teardown()- 不是异步的。 https://discordpy.readthedocs.io/en/latest/ext/commands/extensions.html#cleaning-up

  2. Cog 方法cog_unload()- 也不是异步的。 https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.Cog.cog_unload

但是,在加载 Cog 时,可以使用asyncpre-invoke 和 post-invoke 钩子。 https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.Cog.cog_before_invoke

因此,我的问题是:有什么方法可以在卸载Cogsawait时自动运行()异步代码?

编辑:通过构建自定义扩展重新加载器、调用 exit()、reload() 和 init() 来解决它。

谢谢!

标签: discord.py

解决方案


asyncio.create_task调度协程运行,但不等待它运行。如果您使用的是 Python 3.6 或更低版本,请使用asyncio.ensure_future()


推荐阅读