discord.py开发中如何在角色匹配场景使用或逻辑?
实现方案
你原代码的错误点在于 discord.utils.find 只接收1个判断函数作为第一个入参,第二个入参是要遍历的角色集合,你传入多个lambda的写法不符合方法要求。
要实现或逻辑匹配,直接在单个lambda函数内用 or 运算符 拼接所有判断条件即可,示例如下:
# 写法1:匹配到第一个符合要求的角色就返回,适合需要拿到具体角色对象的场景 matched_role = discord.utils.find( lambda r: r.name == 'Member of IMP' or r.name == 'Blitzo' or r.name == 'Stolas' or r.name == 'Moxxie' or r.name == 'Millie' or r.name == 'Loona', user.roles # 此处传入你要校验的用户的角色列表 ) if matched_role: # 用户持有目标角色之一,执行对应逻辑 pass
如果仅需要判断是否持有任意目标角色,不需要获取具体角色对象,还有更易维护的简化写法:
# 写法2:后续新增允许角色只需修改ALLOWED_ROLES集合即可 ALLOWED_ROLES = {'Member of IMP', 'Blitzo', 'Stolas', 'Moxxie', 'Millie', 'Loona'} has_permission = any(r.name in ALLOWED_ROLES for r in user.roles) if has_permission: # 对应逻辑 pass
内容的提问来源于stack exchange,提问作者Blitzo
相关产品推荐
相关产品推荐

