Python3开发Discord机器人发送Embed时遭遇400 Bad Request错误的排查求助
解决Discord机器人发送Embed时的400 Bad Request错误
从你的报错信息可以直接定位核心问题:你尝试添加的部分Embed字段的value是空值(比如None、空字符串),而Discord API明确要求Embed的字段必须包含非空的value内容。
看你生成Embed的代码,你遍历了serverdata.__dict__的所有属性并直接添加为字段,但显然其中有几个属性的值是空的,这就触发了Invalid Form Body的请求错误。
修复方案
只需要在添加字段前先检查value是否为空,为空的话要么跳过该字段,要么给一个默认占位值。修改你的formatmessage函数如下:
def formatmessage(serverdata: server): embed = discord.Embed(title=serverName, url=weblink, icon_url=icon, color=discord.Color.blue()) embed.set_author(name=owner) embed.set_thumbnail(url=icon) for attr, value in serverdata.__dict__.items(): # 检查value是否为空,匹配None、空字符串、空列表/字典等空值情况 if not value: # 可选方案1:用默认值替代空值 # value = "暂无数据" # 可选方案2:直接跳过这个空字段 continue # 统一转成字符串,避免非字符串类型value引发的潜在问题 embed.add_field(name=str(attr), value=str(value), inline=False) print(attr, value) embed.set_footer(text=weblink) return embed
额外提示
- 建议把
value统一转成字符串类型,避免数字、布尔值等非字符串类型可能引发的API兼容问题。 - 如果不想跳过空值字段,而是希望显示友好的默认内容,就把
continue换成value = "暂无数据"这类默认值即可。 - 你可以通过打印的
attr和value信息,精准定位哪些字段是空值,也能针对性地优化这些属性的数据源处理。
内容的提问来源于stack exchange,提问作者KRIShark
相关产品推荐
相关产品推荐

