【问题标题】:How can I get it all in one embed?我怎样才能在一个嵌入中获得所有内容?
【发布时间】:2021-11-06 12:12:26
【问题描述】:

我想发出一个命令来查看该服务器中具有特定角色的所有成员。但是有了我现在拥有的,我得到了一个嵌入到每个具有该角色的成员。但我想把它全部嵌入到一个嵌入中,但是如何?

@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)

【问题讨论】:

    标签: python discord.py


    【解决方案1】:

    请记住以下几点

    1. 您可以使用discord.utils.get,而不是循环遍历Guild.roles
    2. 我们没有循环通过 Guild.members 并检查成员是否具有该角色,而是使用 Role.members 返回具有该角色的成员列表。
    3. 可以使用join() 代替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)
    

    【讨论】:

    • 如果超过 2000 个字符,我如何进行额外的嵌入
    • 检查len(member_string) > 2000是否再嵌入,在描述中的第一个放入member_string[:1999],在描述中的第二个嵌入放入member_string[2000:]
    【解决方案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)
    

    【讨论】:

    • 如果超过 2000 个字符,我如何进行额外的嵌入
    猜你喜欢
    • 2018-10-05
    • 2021-06-22
    • 2011-05-02
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    相关资源
    最近更新 更多