discord.py RuntimeWarning:协程未被等待问题求助(附相关代码)
Discord.py RuntimeWarning 问题解决
问题代码
发送初始消息
embed = discord.Embed(title="**hi**", color=discord.Color.green()) embed.add_field(name="", value=f"(**hello**)", inline=False) Origin_embed = await interaction.response.send_message(embed=embed, ephemeral=False)
支付检查处理函数
async def perform_toss_check_pay(name, amount, interaction: discord.Interaction, random_name, Origin_embed): res = toss.check(name.strip(), amount) print(res) if res.get('result') == True: MSG = res.get('msg') embed = discord.Embed(title="**``✅`` ┃ checked**", color=discord.Color.green()) await interaction.response.send_message(embed=embed, ephemeral=False) Interaction.delete_original_response(Origin_embed) if res.get('msg') == '입금 미확인': Interaction.delete_original_response(Origin_embed)
触发的警告
RuntimeWarning: coroutine 'Interaction.delete_original_response' was never awaited
Interaction.delete_original_response(Origin_embed)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback.
试过的无效写法
await Interaction.delete_original_response(Origin_embed) Interaction.delete_original_response(await Origin_embed) Interaction.delete_original_response.Origin_embed
问题原因及修复方案
几个关键错误
- 异步方法未加
await:delete_original_response是异步协程方法,必须用await关键字触发执行,否则只会生成未执行的协程对象,触发警告。 - 调用方式错误:直接用
Interaction类调用方法是错误的,应该使用函数参数里的interaction实例来调用该方法。 - 重复响应交互:处理函数中再次调用
interaction.response.send_message会报错——一个交互只能用response.send_message响应一次,后续消息必须用followup.send发送。 - 参数传递错误:
delete_original_response是实例方法,不需要传入Origin_embed;或者直接用Origin_embed(这是Message对象)调用delete()方法更直观。
修复后的代码
async def perform_toss_check_pay(name, amount, interaction: discord.Interaction, random_name, Origin_embed): res = toss.check(name.strip(), amount) print(res) if res.get('result') == True: MSG = res.get('msg') embed = discord.Embed(title="**``✅`` ┃ checked**", color=discord.Color.green()) # 用followup发送后续消息,避免重复响应交互 await interaction.followup.send(embed=embed, ephemeral=False) # 方案1:通过interaction实例删除原响应 await interaction.delete_original_response() # 方案2:直接删除返回的Message对象(二选一即可) # await Origin_embed.delete() if res.get('msg') == '입금 미확인': # 二选一即可 await interaction.delete_original_response() # await Origin_embed.delete()
内容的提问来源于stack exchange,提问作者Jimin Sung
相关产品推荐
相关产品推荐

