如何获取Discord用户Nitro等级?Scope与邀请流程问题咨询
解决Discord用户Nitro等级获取问题
核心问题说明
你当前用Bot令牌调用/users/{id}接口无法拿到premium_type,是因为Bot令牌代表的是机器人账号的身份,而非用户授权的身份,Discord API不会通过Bot令牌返回其他用户的非公开个人信息(包括Nitro等级)。
能不能仅用bot和applications.commands scope获取?
不行。这两个scope仅用于赋予机器人在服务器内的操作权限(比如发送消息、管理频道),完全不涉及获取用户个人隐私数据的权限,无法用来获取Nitro等级。
正确的解决方案:通过OAuth2用户授权获取
要获取用户的Nitro等级,必须让用户通过OAuth2流程授权你的应用访问其个人信息,具体步骤如下:
- 配置Redirect URI:在Discord开发者平台的应用设置里,找到「OAuth2」→「Redirects」,添加一个合法的URI(比如本地调试用
http://localhost:8080,线上环境用你的服务器域名)。 - 生成用户授权链接:构造包含
identifyscope的OAuth2授权链接(identifyscope足够获取Nitro等级),格式示例:https://discord.com/oauth2/authorize?client_id=你的应用ID&redirect_uri=你设置的URI&response_type=code&scope=identify - 获取授权码并换取Access Token:用户点击链接授权后,会跳转到你设置的Redirect URI,URL中会携带
code参数。你的应用需要用这个code,结合应用的client_id、client_secret和Redirect URI,向https://discord.com/api/oauth2/token发送POST请求,换取用户的Access Token。 - 调用API获取用户数据:用拿到的用户Access Token调用
GET /users/@me接口(注意是@me,代表当前授权的用户),请求代码示例:
返回的import requests headers = {"Authorization": f"Bearer 用户的Access Token"} response = requests.get("https://discord.com/api/v8/users/@me", headers=headers) if response.status_code == 200: data = response.json() premium_type = data.get("premium_type") print(f"User has premium tier {premium_type}")premium_type对应等级:- 0:无Nitro
- 1:Nitro Classic
- 2:Nitro
- 3:Nitro Basic(新等级)
关于guilds scope的误区
你提到的guilds scope是用来获取用户加入的服务器列表的,和获取Nitro等级无关。之前的搜索信息有误,不需要这个scope来获取premium_type。
内容的提问来源于stack exchange,提问作者EntchenEric
相关产品推荐
相关产品推荐

