Вставить не отображается правильно - PullRequest
1 голос
/ 24 марта 2019

Привет. У меня возникли проблемы с отображением списков в моем коде. Я пытаюсь сделать так, чтобы мои роли отображались под одним заголовком списка, вот проблема, которая возникает у меня с тем, как мои списки отображаются во вставке.

enter image description here

Кажется, что каждая роль дублируется под заголовком списка.

Я пытался inline=True, похоже, это не решает проблему.

     #--- Below is the list command ---

@commands.command(pass_context=True, no_pm=True, name='list', aliases=['roles', 'role'])
async def _list(self, ctx):
    """List of all available roles """
    guild = ctx.message.guild
    author = ctx.message.author
    botroom = self.bot.get_channel(555844758778544160) 
    intros = self.bot.get_channel(485381365366390796)
     #--- Role list Categories ---"
    Colours = ['Blue', 'Green', 'Orange', 'Yellow', 'Pink', 'Purple']
    Colours.sort(key=str.lower)

    Games = ['LoL', 'WoW', 'Overwatch']
    Games.sort(key=str.lower)

    Platforms = ['PC', 'Xbox', 'PS4', 'Nintendo Switch']
    Platforms.sort(key=str.lower)

    if ctx.message.channel == intros:
        pass
    else:
        if ctx.message.channel == botroom:
            title = '**Hey {}, here is a list of roles you can add:**'.format(author.display_name)
            embed = discord.Embed(title=title.format(), colour=0x0080c0)
            embed.add_field(name="**Have a role suggestion?**", value="If you can't find the role you want but would like to see it added to the roles list please tell us in <#555371532390760473>.", inline=False)
            embed.set_footer(text="Tip: to add a role from the list type the command !add/remove followed by the role.")

            #Lets start embed roles list below#
            for role in Games:
                embed.add_field(name="**Game Roles**", value="\n{} **({})**".format(role, len([member for member in guild.members if ([r for r in member.roles if r.name == role])])))

            for role in Platforms:
                embed.add_field(name="**Plaforms Roles**", value="\n{} **({})**".format(role, len([member for member in guild.members if ([r for r in member.roles if r.name == role])])))
            await ctx.send(embed=embed)
        else:
            await ctx.send('You can only use this command in {}.'.format(botroom.mention))

Роли в списках отображаются не так, как должны.

1 Ответ

2 голосов
/ 25 марта 2019

В настоящее время вы добавляете категории один раз для каждого элемента в категории.Вместо этого вы хотите добавить каждую категорию один раз, перечислив все роли под ней.Вы также можете получить объект роли и получить прямой доступ к len(role.members):

def role_name_to_summary(ctx, name):
    role = get(ctx.guild.roles, name=name)
    if not role:
        return None
    return f"{role.name} **({len(role.members)})**"

embed.add_field(name="**Game Roles**", value="\n".join(filter(None, [role_name_to_summary(ctx, name) for name in Games]))
...