Discord.py如何获取成员角色以用于match/case逻辑判断?
实现步骤
你可以通过事件回调传入的member对象直接获取成员的角色信息,member.roles会返回该成员在当前服务器拥有的所有角色列表,排序规则为「权限从低到高」,通常我们取最高权限的角色来做匹配即可。
如果你的判断逻辑是基于成员的最高权限角色名,直接把person_role赋值为最高角色的名称即可,完整代码如下:
@client.event async def on_voice_state_update(member, before, after): # 取成员最高权限角色的名称 person_role = member.roles[-1].name match person_role: case "User 1": # 对应角色的频道创建逻辑 pass case "User 2": pass case _: # 无匹配角色的默认逻辑 pass
注意事项
- 你需要先在Discord开发者门户开启机器人的
Server Members Intent权限,否则无法正常获取成员的角色信息 member.roles列表的第一个元素永远是默认的@everyone角色,如果你不需要匹配该角色,不要取索引为0的元素- 如果你的判断逻辑需要匹配成员拥有的任意角色而非最高权限角色,可以先遍历
member.roles筛选出目标角色后再进行匹配
内容的提问来源于stack exchange,提问作者Les_Grosman
相关产品推荐
相关产品推荐

