我怎样才能一次完成所有的工作

2022-12-05 03:12:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想发出一个命令来查看该服务器中具有特定角色的所有成员。但我现在拥有的是,我为每一个拥有这个角色的成员嵌入了一个插件。但我想把所有的东西都放在一个嵌件里,但是怎么做呢

@bot.command(name='members', aliases=['Members'])
@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:
            embed=discord.Embed(title=f"Members of {role}",description=f"{member.display_name} - {member.id}", color=0xfcf8f8)
            await ctx.send(embed=embed)

2条回答

您现在所做的是在每个成员之间循环,如果他们具有您想要的角色,则发送嵌入。因此,您将为每个成员发送一个嵌入,而不是发送一个包含所有所需信息的嵌入。我写的一个可能的解决方案是创建一个包含所有成员及其信息的字符串,然后将其发送到一个嵌入文件中

member_string = ""

for member in server.members:
    if role_id in member.roles:
        member_string += "\nmember.display_name - member.id"
embed = discord.Embed(title=f"Members of {role}",description=member_string, color=0xfcf8f8)
await ctx.send(embed=embed)

这里有几件事需要记住

  1. 您可以使用^{},而不是通过Guild.roles循环
  2. 我们使用^{}返回具有该角色的成员列表,而不是通过Guild.members循环并检查成员是否具有该角色
  3. 可以使用^{}代替for循环,并且可以最小化代码
@bot.command(name='members', aliases=['Members'])
@commands.has_permissions(manage_messages=True)
async def members(ctx,*args):
    name = " ".join(args)
    role = discord.utils.get(ctx.guild.roles, name=name)
    if not role:
        return await ctx.send("Role not found")
    member_string = "\n".join([i.display_name + " - " + str(i.id) for i in role.members])
    e = discord.Embed(title=f"Members of {role.name}", description=member_string, color=0xfcf8f8)
    await ctx.send(embed=e)