You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

额外提示

  1. 建议把value统一转成字符串类型,避免数字、布尔值等非字符串类型可能引发的API兼容问题。
  2. 如果不想跳过空值字段,而是希望显示友好的默认内容,就把continue换成value = "暂无数据"这类默认值即可。
  3. 你可以通过打印的attr和value信息,精准定位哪些字段是空值,也能针对性地优化这些属性的数据源处理。

内容的提问来源于stack exchange,提问作者KRIShark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 19:57:31