如何在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
相关产品推荐
相关产品推荐

