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

Discord.py角色检查命令报错求助:无法输出无指定角色的服务器成员

解决Discord.py命令中的AttributeError问题

先直接说你遇到的核心问题:AttributeError: can't set attribute 完全是由代码里这一行错误导致的:

for guild.members in range(10):

guild.members 是Discord.py提供的只读属性,用来获取服务器的成员集合,你不能把它当作循环变量来赋值,这就像你试图修改一个固定值一样,自然会触发属性错误。

另外你的代码逻辑也偏离了需求:原本是要找出没有Free Customers角色的成员,但你却在遍历成员后,重复10次发送整个服务器的成员列表,这显然不是你想要的结果。

修正后的完整代码

@client.command()
@commands.has_permissions(ban_members=True)
async def check(ctx):
    guild = ctx.guild
    # 先获取目标角色,避免后续重复查找
    target_role = discord.utils.get(guild.roles, name='Free Customers')
    
    # 先检查角色是否存在,防止后续报错
    if not target_role:
        await ctx.send("服务器里找不到名为'Free Customers'的角色,请检查角色名称拼写!")
        return
    
    # 用列表推导式收集所有没有该角色的成员,高效又清晰
    members_without_role = [member for member in guild.members if target_role not in member.roles]
    
    # 处理空结果的情况
    if not members_without_role:
        await ctx.send("所有成员都已经拥有'Free Customers'角色啦!")
        return
    
    # 格式化成员列表,显示昵称和ID方便识别
    member_list = "\n".join([f"- {member.display_name} (ID: {member.id})" for member in members_without_role])
    
    # 处理Discord消息长度限制(单条消息最多2000字符)
    if len(member_list) > 2000:
        # 把长内容拆分成多个块发送
        chunks = [member_list[i:i+2000] for i in range(0, len(member_list), 2000)]
        for chunk in chunks:
            await ctx.send(f"未拥有'Free Customers'角色的成员:\n{chunk}")
    else:
        await ctx.send(f"未拥有'Free Customers'角色的成员:\n{member_list}")

关键修正说明

  1. 移除错误循环:删掉了for guild.members in range(10):这行错误代码,替换为正确的成员筛选逻辑
  2. 角色预检查:先确认目标角色存在,避免后续代码因为找不到角色而报错
  3. 高效筛选成员:用列表推导式一次性收集符合条件的成员,比嵌套循环更简洁
  4. 处理边界情况:考虑了角色不存在、所有成员都有角色的特殊场景
  5. 适配Discord限制:拆分过长的消息内容,避免超过单条消息2000字符的限制

额外注意事项

如果你发现返回的成员列表只有Bot自己,那是因为你没有开启服务器成员意图。需要在Discord开发者门户的Bot设置里开启「Server Members Intent」,同时在代码中启用:

intents = discord.Intents.default()
intents.members = True

# 初始化Bot时传入intents
client = commands.Bot(command_prefix='你的命令前缀', intents=intents)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:09:11