【问题标题】:Message not sending because of a "BAD REQUEST" with discord.py由于 discord.py 的“错误请求”,消息未发送
【发布时间】:2026-02-08 09:00:01
【问题描述】:

我正在使用 Discord.py 制作机器人,但在尝试发送带有嵌入的消息时不断收到错误消息。

这是我得到的错误:

Traceback (most recent call last):
  File "C:\Users\pc\Documents\Storage\python\NanoBot\bot.py", line 101, in on_message
    await client.send_message(message.channel, embed=embed)
  File "C:\Users\pc\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\client.py", line 1152, in send_message
data = yield from self.http.send_message(channel_id, content, guild_id=guild_id, tts=tts, embed=embed)
  File "C:\Users\pc\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\http.py", line 198, in request
raise HTTPException(r, data)
discord.errors.HTTPException: BAD REQUEST (status code: 400)

我的代码:

embed = discord.Embed(color=target.color)
embed.set_thumbnail(url=target.avatar_url)
embed.set_author(name=str(target.name), url="Playing " + str(target.game))
embed.set_footer(text="!!userinfo command")
embed.add_field(name="Status", value=str(target.status))
embed.add_field(name="Nickname", value=str(target.nick))
embed.add_field(name="Account Created", value=str(target.created_at))
embed.add_field(name="Roles", value=str(roles))
embed.add_field(name="Joined at", value=str(target.joined_at))
await client.send_message(message.channel, embed=embed)

【问题讨论】:

  • 您可以在C:\Users\pc\Documents\Storage\python\NanoBot\bot.py 中添加一些打印语句,并检查作为message.chanelembed 传递的值.. 如果您确定这些值对于http 400 errors 是正确的google找到pages like this one,这可能会帮助您更好地了解可能出了什么问题..
  • 如果这没有帮助,看看你是否可以添加你的机器人的代码。重新写入Minimal, Complete, and Verifiable 示例并编辑/更新您的问题。
  • @SB87 我添加了用于程序的代码。

标签: python discord python-asyncio discord.py


【解决方案1】:

由于您使用的是discord api,如果您阅读client.send_message 的描述,如果您在embed 中发送消息超过2000 chrs,discord 将引发400 请求错误。因为 Discord 的字符数限制是 2000。

如您所见,这实际上并不是真正的错误,discord.errors.HTTPException: BAD REQUEST (status code: 400)。这是不和谐 API 造成的自定义错误。要更正它,您可以将消息拆分为少于 2000 chrs 的嵌入,然后单独发送。需要明确的是,这不是因为服务器已关闭,而是因为服务器拒绝发送您的消息,因为它太长了。

【讨论】:

  • 感谢您的帮助!删除一些fields 工作。
  • @Nanomotion 供将来参考,这些是嵌入的限制:字段数 = 25,字段名称 = 256,值 = 1024,描述 = 2048。