调用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
相关产品推荐
相关产品推荐

