调用Discord guilds.join接口加用户入服务器返回400错误如何解决
400错误核心原因
你当前的代码存在参数传递位置错误的问题,是导致400 Bad Request的直接诱因:
- fetch API的配置项没有顶层
access_token参数,你将用户OAuth访问令牌放在配置顶层的写法不会被接口识别,而Discord的添加服务器成员接口明确要求access_token必须放在JSON格式的请求体中传递,接口收不到必填的用户令牌参数就会返回400错误。 - 你指定了请求头
Content-Type: application/json,但未传递任何序列化后的请求体内容,也不符合接口要求。
修复后的代码示例
let response = await fetch( `https://discord.com/api/guilds/877414872068001853/members/[替换为实际用户ID]`, { method: 'PUT', headers: { "Authorization": `Bot [替换为实际Bot令牌]`, "Content-Type": "application/json" }, // 新增body字段,将用户访问令牌放在请求体中 body: JSON.stringify({ access_token: "[替换为实际用户OAuth访问令牌]" }) } ); // 先读取响应体获取具体错误信息,便于后续排查 let resData = await response.json(); console.log(resData);
后续排查注意事项
如果修复参数位置后仍有报错,按以下顺序排查:
- 打印上述代码中的
resData,Discord会在响应体中返回具体错误描述,比如invalid access_token代表用户令牌无效、missing permissions代表Bot权限不足,可以直接定位问题 - 确认用户OAuth访问令牌未过期,且授权时确实申请了
guilds.join权限范围 - 确认Bot在目标服务器拥有「创建即时邀请」权限,没有该权限即使参数正确也无法拉用户进服
- 确认目标用户未被目标服务器封禁,也未达到Discord账号加入服务器的数量上限
内容的提问来源于stack exchange,提问作者Jack Crispy
相关产品推荐
相关产品推荐

