如何通过Discord bot检测用户是否拥有Discord Nitro(不依赖头像判断)
无需依赖头像检测Discord Nitro的实现方案
直接调用Discord官方API拉取用户对象,读取内置的premium_type字段即可实现100%准确的Nitro状态判定,不会受到用户是否使用动图头像的影响。
字段取值说明
0:用户未订阅任何等级的Discord Nitro1:用户订阅了Nitro Classic(已停售的旧版基础Nitro)2:用户订阅了完整版Nitro(包含服务器增压、高清串流等全量权益)3:用户订阅了Nitro Basic(现行低价基础版Nitro,仅支持动图头像、大文件上传等基础权益)
前置要求
- 需要在Discord开发者平台的Bot管理页,开启
Presence Intent和Server Members Intent两个特权网关意图,否则API返回的用户信息不会包含premium_type字段 - 服务器内检测需要Bot拥有读取成员信息的权限,私聊检测需要目标用户曾和Bot产生过私聊交互
代码示例(以discord.js v14为例)
// 从交互事件中获取目标成员对象 const targetMember = await interaction.guild.members.fetch(interaction.user.id); // 判定逻辑:只要premiumType大于0 或 有本服务器增压记录,就说明持有Nitro const hasNitro = targetMember.user.premiumType > 0 || targetMember.premiumSince !== null; if (hasNitro) { console.log("该用户持有Discord Nitro"); } else { console.log("该用户未持有Discord Nitro"); }
原有方案的缺陷补充
你之前使用的动图头像判定法除了会漏判持Nitro但用静态头像的用户外,还存在以下误判场景:
- 早期Discord官方活动曾给普通用户发放过临时动图头像权限,无Nitro也可使用GIF头像
- Discord合作伙伴、员工等特殊身份组用户无需订阅Nitro也可使用动图头像
内容的提问来源于stack exchange,提问作者TimeDeod
相关产品推荐
相关产品推荐

