"RuntimeWarning: coroutine 'BotBase.load_extension' was never awaited" 更新后 discord.py
"RuntimeWarning: coroutine 'BotBase.load_extension' was never awaited" after updating discord.py
我一年前制作并部署到 Heroku 的 discord 机器人一直运行到现在。但是,在更改一些齿轮并将 python 更新到版本 3.9.10 之后,我在 Heroku 日志中收到以下警告:
app[worker.1]: /app/m_bot.py:120: RuntimeWarning: coroutine 'BotBase.load_extension' was never awaited
app[worker.1]: client.load_extension(f"cogs.{filename[:-3]}")
app[worker.1]: RuntimeWarning: Enable tracemalloc to get the object allocation traceback
app[worker.1]: Bot is ready.
app[api]: Build succeeded>
120行块是:
for filename in os.listdir("./cogs"):
if filename.endswith(".py"):
# cut of the .py from the file name
client.load_extension(f"cogs.{filename[:-3]}")
机器人上线但不响应任何命令。除了上面列出的内容之外,我没有进行任何其他更改。
当我 运行 我的 bot 在我的 PC 上时它可以工作,所以我怀疑这可能是版本问题。
我该如何解决这个问题?
说明
从 discord.py 2.0 版开始,Bot.load_extension
现在是协程,必须等待。这是为了允许 Cog
子类用协程覆盖 cog_unload
。
代码
在您客户的文件中:
async def load_extensions():
for filename in os.listdir("./cogs"):
if filename.endswith(".py"):
# cut off the .py from the file name
await client.load_extension(f"cogs.{filename[:-3]}")
您还应该将登录包装在一个异步 'main' 函数中,您将在其中调用此函数:
async def main():
async with client:
await load_extensions()
await client.start('your_token')
asyncio.run(main())
这两个函数替代了旧方法:
client.run("your_token")
以及您在问题中发布的代码。
在你的每个齿轮中:
用异步函数替换标准 setup
函数:
async def setup(bot):
await bot.add_cog(YourCog(bot))
参考
discord.py 2.0 async changes(感谢 ChrisDewa 在您的评论中提到这一点)
我一年前制作并部署到 Heroku 的 discord 机器人一直运行到现在。但是,在更改一些齿轮并将 python 更新到版本 3.9.10 之后,我在 Heroku 日志中收到以下警告:
app[worker.1]: /app/m_bot.py:120: RuntimeWarning: coroutine 'BotBase.load_extension' was never awaited
app[worker.1]: client.load_extension(f"cogs.{filename[:-3]}")
app[worker.1]: RuntimeWarning: Enable tracemalloc to get the object allocation traceback
app[worker.1]: Bot is ready.
app[api]: Build succeeded>
120行块是:
for filename in os.listdir("./cogs"):
if filename.endswith(".py"):
# cut of the .py from the file name
client.load_extension(f"cogs.{filename[:-3]}")
机器人上线但不响应任何命令。除了上面列出的内容之外,我没有进行任何其他更改。
当我 运行 我的 bot 在我的 PC 上时它可以工作,所以我怀疑这可能是版本问题。
我该如何解决这个问题?
说明
从 discord.py 2.0 版开始,Bot.load_extension
现在是协程,必须等待。这是为了允许 Cog
子类用协程覆盖 cog_unload
。
代码
在您客户的文件中:
async def load_extensions():
for filename in os.listdir("./cogs"):
if filename.endswith(".py"):
# cut off the .py from the file name
await client.load_extension(f"cogs.{filename[:-3]}")
您还应该将登录包装在一个异步 'main' 函数中,您将在其中调用此函数:
async def main():
async with client:
await load_extensions()
await client.start('your_token')
asyncio.run(main())
这两个函数替代了旧方法:
client.run("your_token")
以及您在问题中发布的代码。
在你的每个齿轮中:
用异步函数替换标准 setup
函数:
async def setup(bot):
await bot.add_cog(YourCog(bot))
参考
discord.py 2.0 async changes(感谢 ChrisDewa 在您的评论中提到这一点)