Discord OAuth2 如何获取指定服务器内当前用户的身份组信息
实现方案
可以实现该需求,具体操作步骤如下:
1. 确认OAuth2授权Scope配置
你之前调用接口拿不到身份组数据,核心原因是授权时没有申请对应的权限范围。必须在OAuth2授权链接中加入guilds.members.read scope,同时保留已有的identify、guilds scope。如果之前的授权没有包含该scope,需要重新走OAuth授权流程让用户重新授权,否则无法获取成员身份组信息。
2. 调用正确的API接口
不要使用/users/@me/guilds接口,该接口设计上仅返回用户所属服务器的基础公共信息,不包含用户在服务器内的角色数据。需要调用指定服务器的成员查询接口:
GET https://discord.com/api/v10/guilds/{替换为你的目标服务器ID}/members/{替换为目标用户ID}
其中目标用户ID可以通过你之前调用的/users/@me接口返回的id字段获取,请求头必须携带用户的access_token,格式如下:Authorization: Bearer <用户的access_token>
如果你仍需要使用v6版本API,将路径中的
v10替换为v6即可,不过更推荐使用新版API,旧版已停止官方维护。
3. 解析返回结果
该接口返回的成员对象中,roles字段即为用户在当前服务器的身份组ID数组。如果需要获取身份组的名称、权限、颜色等元信息,可以提前在你的服务端通过Discord Bot的token调用/guilds/{目标服务器ID}/roles接口拉取全量身份组映射,不要将Bot token暴露在Chrome扩展前端,避免token泄露。
注意事项
- 调用接口前先通过
/users/@me/guilds接口确认目标用户确实在你指定的服务器内,否则成员查询接口会返回404错误 - 遵守Discord API的速率限制规则,不要高频调用接口
- 所有需要使用Bot权限的操作都必须放到你的后端服务处理,禁止在前端扩展代码中硬编码任何Bot凭证
内容的提问来源于stack exchange,提问作者Sowam
相关产品推荐
相关产品推荐

