我正在运行 discord.py 1.6。 我加载了一个 Cog,它在 Discord 上维护仪表板样式的消息(定期更新)。
卸载这个Cog的时候,我想自动删除这个仪表盘消息使用默认的
await message.delete()
方法,这是一个异步调用。
根据文档,基本上有两个选项可以自动运行 Cog-cleanup 代码:
扩展清理函数 teardown()
- 非异步。
https://discordpy.readthedocs.io/en/latest/ext/commands/extensions.html#cleaning-up
Cog 方法 cog_unload()
- 也不是异步的。
https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.Cog.cog_unload
然而,在加载 Cog 时,有 async
调用前和调用后挂钩可用。
https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.Cog.cog_before_invoke
因此,我的问题是:
有没有什么办法可以在卸载 Cogs时自动运行(await
)异步代码?
编辑: 通过构建自定义扩展重新加载器,调用 exit()、reload() 和 init() 解决了这个问题。
谢谢!
答案 0 :(得分:0)
你试过 asyncio.run() 吗?它通常是尝试在同步线程中调用 async
函数时的解决方案,因为您不需要 await
run() 函数
答案 1 :(得分:0)
asyncio.create_task 安排协程运行,但不等待它运行。如果您使用的是 Python 3.6 或更低版本,请使用 asyncio.ensure_future()。