使用undici通过POST请求调用Discord API发送频道消息返回400错误的问题排查
解决Discord API发送消息返回400错误的问题
你这明显是踩了Discord API的基础格式坑啦!返回400(Bad Request)基本就是服务器读不懂你的请求,核心问题有两个:
- 请求体格式不对:Discord的
/channels/{channel_id}/messages接口要求POST的请求体是JSON对象,不是直接传字符串。你得把消息内容塞进content字段里,不能直接把字符串当body发。 - 缺了关键请求头:你的headers里没加
Content-Type: application/json,服务器根本不知道你发的是JSON数据,自然没法解析。
给你改好的代码,直接用就行:
await request(`https://discord.com/api/v9/channels/${channel_id}/messages`, { method: "POST", // 把字符串content包装成JSON对象再序列化 body: JSON.stringify({ content: content }), headers: { authorization: `Bot ${token}`, accept: "*/*", // 必须加这个头,告诉服务器请求体是JSON格式 "Content-Type": "application/json" }, });
另外再提两个要排查的点,以防还有隐藏问题:
- 确认Bot Token是对的,而且Bot已经被邀请到目标服务器,同时在目标频道拥有Send Messages权限。
- 检查消息内容有没有违反Discord规则:比如长度超2000字符、包含违规内容之类的。
先把前两个格式问题解决,应该就能正常发消息了!
内容的提问来源于stack exchange,提问作者clapmemereview
相关产品推荐
相关产品推荐

