不和列表所有成员python



我正在尝试制作一个机器人来制作一个拥有角色的成员列表,我问(命令:$role Admin答案:3人有角色Admin),当我问(命令:$role list Admin答案:@Justyn, @JustBoy, @JustBoss)。

我试过这个代码:

@bot.command(pass_context=True)
@commands.has_permissions(manage_messages=True)
async def members(ctx,*args):
    server = ctx.message.guild
    role_name = (' '.join(args))
    role_id = server.roles[0]
    for role in server.roles:
        if role_name == role.name:
            role_id = role
            break
    else:
        await ctx.send("Role doesn't exist")
        return
    for member in server.members:
        if role_id in member.roles:
            await ctx.send(f"{member.display_name} - {member.id}")

但是当我问$members Botz时,答案只有"Justyn Bot - 799779320906121236"(在服务器上,我有8机器人角色Botz,但它只列出自己的机器人(本身))。所以我很困惑。

如果有人知道怎么做,请告诉我!谢谢你。

列出成员

Guild.members要求启用intents.members,以启用它们:

intents = discord.Intents.default()
intents.members = True
bot = commands.Bot(..., intents=intents)

还要确保在开发人员门户中启用它们,(如下所示)

编辑列出具有特定角色的成员

async def whatever(ctx, role: discord.Role): # The `role` arg will be converted to a `discord.Role` instance
    await ctx.send(f"There's {len(role.members)} users with the role {role.name}")
参考:

  • Guild.get_role
  • Role.members
  • Role.name

您必须启用Discord Developer Portal的意图,并且您必须在代码中定义它,以便使用一些事件和方法,如discord.Member.roles

在Developer Portal中,您必须执行:

Select Application ->机器人→特权网关意图->启用存在意图&Server Members Intent

在你的代码中:

import discord
from discord.ext import commands
intents = discord.Intents().all()
bot = commands.Bot(command_prefix="<prefix>", intents=intents)

要了解更多信息,可以查看有关intent的API References。

最新更新