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

如何在on_message事件中检查用户是否拥有特定Discord角色?

检查Discord用户是否拥有特定角色的基础实现示例

你可以通过直接检查用户的角色列表来判断他们是否拥有目标角色,不用依赖权限系统。下面是基于你现有代码修改后的完整示例,核心是判断目标角色是否存在于用户的角色集合中:

@client.event
async def on_message(message):
    if message.content.lower().startswith('/role'):
        # 第一步:定义需要检查的"权限角色"ID
        required_role_id = "123456789012345678"  # 替换成你要检查的角色ID
        required_role = discord.utils.get(message.guild.roles, id=required_role_id)
        
        # 检查用户是否拥有该角色
        if required_role in message.author.roles:
            # 用户有权限,执行分配角色的操作
            target_role_id = "437923291047526402"  # 你原来要分配的角色ID
            target_role = discord.utils.get(message.guild.roles, id=target_role_id)
            await client.add_roles(message.author, target_role)
            await message.channel.send(f"已为你分配角色 {target_role.name}!")
        else:
            # 用户没有权限,提示错误
            await message.channel.send("抱歉,你没有执行这个命令的权限,请先获取指定角色!")

关键部分说明:

  • 首先通过discord.utils.get获取需要检查的角色(用ID比名称更可靠,避免重名问题)
  • 用required_role in message.author.roles直接判断用户是否拥有该角色,这个方法简单直观
  • 分情况处理:有权限就执行分配逻辑,没权限就给用户反馈

另外注意,Discord.py v1.x版本里user.server已经改成message.guild了,所以代码里我换成了message.guild.roles,确保兼容性。

如果你想通过角色名称检查(不推荐,因为可能重名),可以把获取角色的代码改成:

required_role = discord.utils.get(message.guild.roles, name="管理员")  # 替换成目标角色名称

这样就能实现你要的“仅允许特定角色用户执行命令”的需求啦!

内容的提问来源于stack exchange,提问作者Cupcake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:15:58