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

调用Discord API v8创建私信频道时出现Bad Request(错误码0)问题求助

排查Discord API v8创建私信频道的Bad Request错误

我帮你梳理几个大概率导致这个错误的原因,你可以逐一排查:

1. 请求URL错误(核心问题)

Discord API中,创建私信频道的正确端点是POST /users/@me/channels,其中@me代表当前授权的账号(也就是你的Bot)。你现在用的是/users/{ctx.author.id}/channels,这相当于试图以命令发起用户的身份创建私信频道,但你的授权Token属于Bot账号,两者不匹配,直接触发了Bad Request错误。

修复方式:把URL中的{ctx.author.id}替换成@me,示例代码调整后:

r1 = requests.request("POST", "https://discord.com/api/v8/users/@me/channels", headers=headers, json=data1)

2. 请求体格式不正确

你使用了data=data1参数传递请求体,但requests库的data参数如果传入字典,会默认以application/x-www-form-urlencoded格式发送,而Discord API明确要求application/json格式的请求体。虽然你手动设置了Content-Type头,但字典并没有被序列化为JSON字符串,导致API无法解析请求。

修复方式:改用json=data1参数,requests会自动将字典序列化为JSON,并正确处理请求头:

r1 = requests.post("https://discord.com/api/v8/users/@me/channels", headers=headers, json=data1)

(也可以手动用json.dumps(data1)将字典转为JSON字符串后传入data参数,但用json参数更简洁可靠)

3. 额外排查点

如果上面两个修改后还是报错,可以检查这些点:

  • 确认目标用户member.id和你的Bot在至少一个共同服务器中:Discord不允许Bot和无共同服务器的用户创建私信频道。
  • 检查目标用户是否屏蔽了你的Bot,或者设置了拒绝接收服务器成员的私信。
  • 验证你的Bot Token是否有效,没有过期或权限缺失(创建私信频道不需要特殊权限,但Token必须对应Bot账号)。

小技巧:可以打印响应的详细内容来获取更精准的错误提示:

print(r1.status_code)
print(r1.text)

响应文本里通常会明确说明错误原因,比如"Cannot send messages to this user"之类的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:59:07