Discord.py ping命令报400错误码50006无法发送空消息排查求助
问题诱因
这个报错是Discord API规则更新和Python SDK版本迭代共同导致的,核心原因如下:
Discord在2022年对消息接口做了强制限制:所有新发送、编辑后的消息,必须至少包含一项非空内容(文本内容content、嵌入消息embed、附件、贴纸四者其一),否则就会返回错误码50006的空消息错误。
你代码的触发点是:首次调用await ctx.send(embed=embed)时仅传递了embed参数,没有显式指定content参数,部分版本的Discord Python库(discord.py/nextcord/pycord等)在后续调用msg.edit()时,会将未显式传递的content默认置为空值,一旦编辑时传入的embed因为变量异常(比如colour取值无效、嵌入字段长度超限)被判定为空,就会触发该错误。
修复方案
按以下两处修改代码即可解决问题:
- 首次发消息时显式指定所有用到的参数,避免隐式空值问题:
# 显式声明content初始为空,避免后续编辑时SDK的隐式赋值 msg = await ctx.send(content="", embed=embed)
- 给最终编辑操作加兜底校验,确保至少有一个字段非空:
# 提前计算结果,避免f-string内运算出现异常空值 avg_ping = round((round(sum(times)) + round(bot.latency * 1000))/4) await msg.edit( content=f":ping_pong: **{avg_ping if avg_ping is not None else 0}ms**", embed=embed )
如果修改后仍然报错,可以检查全局colour变量的取值是否有效,建议直接给embed设置固定颜色值测试,比如把color=colour改成color=0x2ea7ff。
内容的提问来源于stack exchange,提问作者digasred
相关产品推荐
相关产品推荐

