discord.py - discord.py - 使用异步清理功能卸载 Cogs
问题描述
我正在运行 discord.py 1.6。我加载了一个 Cog,它在 Discord 上维护一个仪表板样式的消息(定期更新)。
卸载此 Cog 时,我想使用默认
await message.delete()
方法(即异步调用)自动删除此仪表板消息。
根据文档,自动运行 Cog-cleanup 代码基本上有 2 个选项:
扩展清理功能
teardown()
- 不是异步的。 https://discordpy.readthedocs.io/en/latest/ext/commands/extensions.html#cleaning-upCog 方法
cog_unload()
- 也不是异步的。 https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.Cog.cog_unload
但是,在加载 Cog 时,可以使用async
pre-invoke 和 post-invoke 钩子。
https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.Cog.cog_before_invoke
因此,我的问题是:有什么方法可以在卸载Cogsawait
时自动运行()异步代码?
编辑:通过构建自定义扩展重新加载器、调用 exit()、reload() 和 init() 来解决它。
谢谢!
解决方案
asyncio.create_task调度协程运行,但不等待它运行。如果您使用的是 Python 3.6 或更低版本,请使用asyncio.ensure_future()。
推荐阅读
- php - 会话值到数组
- python - 如何在 JSON 文件中按字母顺序按一个字符串对列表进行排序
- html - 如何解决具有背景 div 的 2 列布局中的高度自动问题
- python - 将 Selenium CSV 下载到 python 变量中
- python - 将高度作为值放入另一列
- c# - 在 C# 中使用 APNS 推送进行编码
- javascript - TypeError:无法读取未定义的属性“oldRole”
- angular - 返回成功的 Observable On Route Resolve Call Failure?
- python-3.x - 数据包生成脚本的优化
- machine-learning - 用于 MLP Keras 预测的循环程序