heroku “运行时警告:更新www.example.com后,从未等待协同程序“BotBase.load_extension”discord.py

qc6wkl3g  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(117)

我一年前做的discord bot部署到Heroku上,一直工作到现在。但是,在更改了一些齿轮并将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]}")

机器人上线了,但没有回应任何命令。除了上面列出的,我没有做任何其他的修改。
当我在PC上运行我的机器人时,它工作正常,所以我怀疑可能是版本问题。
如何解决此问题?

oug3syen

oug3syen1#

说明

从discord.py 2.0版本开始,Bot.load_extension现在是一个协程,必须等待。这是为了允许Cog子类用协程覆盖cog_unload
编号
await必须用在client.load_extension前面,如下所示:

await client.load_extension("your_extension")

"在你的每一个齿轮里“
将标准setup函数替换为异步函数:

async def setup(bot):
    await bot.add_cog(YourCog(bot))

如果要使用常规约定添加扩展,则需要使用以下代码:

在您客户的档案中:

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]}")

您还应该将您的登录 Package 在一个异步的'main'函数中,您将在其中调用此函数。请注意,下面的代码没有设置日志记录you need to do so yourself

async def main():
    async with client:
        await load_extensions()
        await client.start('your_token')

asyncio.run(main())

这两个功能取代了旧的方式:

client.run("your_token")

沿着您在问题中发布的代码。

参考

discord.py 2.0 async changes(感谢ChrisDewa在评论中提到这一点)

相关问题