You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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是服务器内唯一且不会随名称修改变化的标识,步骤如下:

  1. 在Discord设置中开启「开发者模式」
  2. 右键目标角色复制ID
  3. 替换代码中的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:55:56