Discord机器人角色判断异常求助:始终显示为Staff
问题分析与解决
你的代码核心问题是没有针对执行命令的用户(ctx.author)调用角色检查逻辑,直接写has_role('HCRP | Staff Team')是无效的写法,这导致条件判断完全失效,所以无论用户实际角色是什么,都会进入Is Staff分支。
修正方案
方法1:通过角色名称检查(不推荐,角色名易修改)
直接调用命令发起者的has_role方法,关联到具体用户:
@client.hybrid_command(description="All Commands") async def cmds(ctx): # 检查当前用户是否拥有指定名称的角色 if ctx.author.has_role('HCRP | Staff Team'): print("Is Staff") else: print("Is Member")
方法2:通过角色ID检查(推荐,更稳定)
角色ID是服务器内唯一且不会随名称修改变化的标识,步骤如下:
- 在Discord设置中开启「开发者模式」
- 右键目标角色复制ID
- 替换代码中的ID值:
@client.hybrid_command(description="All Commands") async def cmds(ctx): # 替换为你的「HCRP | Staff Team」角色ID(整数类型) staff_role_id = 123456789012345678 # 遍历用户角色列表,匹配目标ID if staff_role_id in [role.id for role in ctx.author.roles]: print("Is Staff") else: print("Is Member")
方法3:直接检查管理员权限
如果你的「Staff Team」角色拥有管理员权限,也可以直接判断用户的全局权限:
@client.hybrid_command(description="All Commands") async def cmds(ctx): # 检查用户是否具备服务器管理员权限 if ctx.author.guild_permissions.administrator: print("Is Staff") else: print("Is Member")
内容的提问来源于stack exchange,提问作者Patryk Patrzk
相关产品推荐
相关产品推荐

