如何在 serverinfo 的嵌入中列出具有管理员权限的角色的用户

How do I list users with roles that have administrator privileges in an embed for serverinfo

用途: 我希望我的机器人中的服务器信息命令提及所有拥有管理员角色的用户,而不是角色,而是拥有管理员角色的人,所以就像拥有管理员角色的人的列表。

更多见解:

因此机器人会检查服务器中有多少角色以及哪些角色具有 admin=True,然后列出具有这些角色的用户。所以他们在我的“.serverinfo”命令中被视为管理员。

我的代码:

@client.command(aliases = ['sinfo'])
async def serverinfo(ctx, guild: discord.Guild = None):
    
    admin_roles = [role for role in ctx.guild.roles if role.permissions.administrator]
    members = set([member.display_name for role in admin_roles for member in role.members])

    embed = discord.Embed(title=f'Server Information {ctx.guild.name}' , description= 'Server Info' , color=0x8FE381, timestamp=ctx.message.created_at)
    embed.set_thumbnail(url =f'{ctx.guild.icon_url}')
    embed.add_field(name= "Owner" , value= f"{ctx.guild.owner}")
    embed.add_field(name= "Admins" , value= f" " .join(members.mention))   #my attempt
    embed.add_field(name= "Region" , value= f"{ctx.guild.region}")
    embed.add_field(name= "Members" , value= f"{ctx.guild.member_count}")
    embed.add_field(name= "Server Roles" , value= f"{len(ctx.guild.roles)}")
    embed.add_field(name= "Text Channels" , value= f"{len(ctx.guild.text_channels)}")
    embed.add_field(name= "Voice Channels" , value= f"{len(ctx.guild.voice_channels)}")
    embed.add_field(name= "Server Boosts" , value= f"{ctx.guild.premium_subscription_count}")
    embed.add_field(name= "Credit to" , value= f"ャ  | MysT#9105")
    embed.set_footer(text=f"Server ID: {ctx.guild.id}" , icon_url=ctx.author.avatar_url)
    await ctx.send(embed = embed)

抱歉,我是 python 的新手,在不知道 python 的工作原理的情况下,我不知道该怎么做。

您可以使用 role.members,但请确保您已启用 intents.members。这是一个例子

# Getting the role
role = ctx.guild.get_role(id_here)
# Going through every member and pinging him
for member in role.members:
    await ctx.send(member.mention)

另外 guild 参数在那里没用,你已经在 ctx.guild.

中有了它

Reference

编辑:

# Getting the roles that have administrator set to True
admin_roles = [role for role in ctx.guild.roles if role.permissions.administrator]

for role in admin_roles:
    for member in roles:
        await ctx.send(member)