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

Discord.py如何判断消息作者是否拥有给定列表中的任意身份组

故障原因

你的代码逻辑出错核心有两个问题:

  1. discord.utils.find 仅会返回遍历范围内第一个匹配到的角色对象,你当前从整个服务器的角色列表中搜索,最终得到的role变量永远是premium、verified两个角色中排序靠前的那一个,判断逻辑只会校验这一个角色的持有情况,不会覆盖整个列表。
  2. 你当前的判断逻辑是「判断服务器里找到的那个匹配角色是否不在用户的角色列表中」,和你要的「判断用户是否持有列表中任意一个角色」的需求完全不匹配。

正确实现方案

推荐直接用Python内置的any()函数遍历用户持有的角色做匹配,逻辑最直观,性能也最优:

author = await context.guild.fetch_member(context.author_id)
# 定义要匹配的角色名集合,用集合做包含查询的效率远高于列表
target_role_names = {'premium', 'verified'}
# 校验用户是否持有任意一个目标角色,返回布尔值
has_matched_role = any(role.name in target_role_names for role in author.roles)

# 如果你需要「用户不持有任意一个目标角色」时执行代码,用如下判断
if not has_matched_role:
    # 你的业务代码

# 如果你需要「用户持有任意一个目标角色」时执行代码,用如下判断
if has_matched_role:
    # 你的业务代码

如果你需要额外获取到用户持有的匹配角色对象做后续操作,可以调整为discord.utils.find的写法:

author = await context.guild.fetch_member(context.author_id)
target_role_names = {'premium', 'verified'}
# 直接在用户持有的角色范围内搜索匹配项
matched_role = discord.utils.find(lambda r: r.name in target_role_names, author.roles)

# 没有匹配到任何角色时执行代码
if not matched_role:
    # 你的业务代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:06:06