Discord机器人@client.command下无法编辑自身消息报协程未await错误如何解决
问题原因
报错的核心原因是命名冲突:
- 你定义的命令函数名和你用来获取名言的原函数都叫
inspire - 当你在
wait_msg.edit里调用inspire()时,实际调用的是被@client.command装饰后的协程命令对象,不是你原本用来生成返回文本的函数,而协程必须要await才能执行,所以才抛出了「coroutine was never awaited」的警告。
你在@client.event装饰器下逻辑可以正常运行,是因为event对应的处理函数没有和获取名言的inspire函数重名,不会触发冲突问题。
修复方案
方案1:重命名命令函数,避免命名冲突
如果你的名言获取函数是普通同步函数,直接修改命令函数名即可:
# 你原本用来获取名言的函数,保持原名 def inspire(): # 原有生成名言的逻辑 return "生成的名言内容" # 命令函数改名,避免重名 @client.command() async def get_inspire(context): wait_msg = await context.send("Finding a quote for ya...") await wait_msg.edit(content=inspire())
方案2:如果名言获取函数本身是异步协程,补充await逻辑
如果你的inspire函数本身是异步的,除了重命名命令函数外,还要先await获取名言的结果再传入edit方法:
# 异步的名言获取函数 async def inspire(): # 原有异步请求名言接口的逻辑 return "异步获取的名言内容" @client.command() async def get_inspire(context): wait_msg = await context.send("Finding a quote for ya...") # 先await异步函数拿到结果 quote_content = await inspire() await wait_msg.edit(content=quote_content)
内容的提问来源于stack exchange,提问作者Shivacharan Reddy
相关产品推荐
相关产品推荐

