Discord机器人检测用户Nitro状态异常:用户有Nitro却返回None排查
问题原因与解决方案
你的代码里用user.premium_since判断Nitro状态,这是核心错误——这个属性检测的是用户是否为当前服务器的Nitro Boost用户,而非用户是否拥有Discord Nitro会员。哪怕用户自己购买了Nitro,但没给当前服务器充Boost,premium_since就会是None,导致误判。
要正确检测用户是否拥有Nitro,需要检查用户的公开权限标识(public_flags):
修改后的代码如下:
@bot.command(name="nitro") async def has_nitro(ctx, user_id: int): user = await ctx.guild.fetch_member(user_id) if user: # 检查用户是否拥有Discord Nitro会员 has_nitro = user.public_flags.premium nitro_status = 'Yes' if has_nitro else 'No' await ctx.send(f"{user.name} has nitro: {nitro_status}") else: await ctx.send("User not found in this server.")
补充说明
public_flags.premium对应用户是否拥有Nitro(包含Nitro Basic和Nitro Classic)- 机器人默认权限即可获取用户公开信息,无需额外配置
- 极少数情况下,用户隐私设置可能限制公开信息获取,但这种场景非常罕见
内容的提问来源于stack exchange,提问作者787 xd
相关产品推荐
相关产品推荐

