Как я могу создать список внутри встраивания?

#discord.py

#discord.py

Вопрос:

В первом примере после распределения ролей нескольким игрокам. Они регистрируются отдельно. Как мне сделать их в виде списка внутри встраивания?

 @command(name="bulktake")
    @has_permissions(manage_roles=True)
    async def bulktake_role(self, ctx, targets: Greedy[Member], *, role: discord.Role):
        if not len(targets):
            await ctx.send("One or more required arguments are missing.")

        else:
            for target in targets:
                await target.remove_roles(role)

                embed = Embed(title="Roles Taken",
                              colour=role.colour,
                              timestamp=datetime.utcnow())

                fields = [("--------------------------------------", f"***{target.display_name}*** successfully removed from ***{role.name}*** role by ***{ctx.author.display_name}***", False)]

                for name, value, inline in fields:
                    embed.add_field(name=name, value=value, inline=inline)

                await ctx.send(f"***{target.display_name}*** successfully removed from ***{role.name}*** role by ***{ctx.author.display_name}***")
                await self.log_channel.send(embed=embed)

        await ctx.message.delete()
 

Во втором примере это почти то же самое. Здесь я перечисляю участников в указанной роли. Они размещаются отдельно.

     @command(name="list")
    async def search_member(self, ctx, role_name):
        role = discord.utils.find(lambda r: r.name == role_name, ctx.guild.roles)
        userlist = []

        for user in ctx.guild.members:
            if role in user.roles:
                userlist.append(user)

                embed = Embed(title="Members in Role",
                      colour=role.colour,
                      timestamp=datetime.utcnow())

                fields = [("Name", str(user.display_name), True),]

                for name, value, inline in fields:
                    embed.add_field(name=name, value=value, inline=inline)

                await ctx.send(embed=embed)

                await ctx.send(f"{user.display_name} has the role {role.name}")
 

Когда я сохраняю оба примера в списке, а затем добавляю выходные данные, я не получаю результата. Не уверен, что я делаю неправильно. Я представил код, который работает, но выводит результаты отдельно. Заранее большое спасибо!

Ответ №1:

Вот пример простой команды для перечисления участников в роли.

Используется:

  • discord.utils.get Чтобы получить роль в гильдии, используя имя
  • Role.members Чтобы получить список всех членов роли.
  • enumerate Возвращает индекс и элемент для списка

введите описание изображения здесь

 @bot.command(name="list")
async def search_member(ctx, *, role_name):
    role = discord.utils.get(ctx.guild.roles, name=role_name)

    embed = discord.Embed(title="Members in Role",
                          colour=role.colour,
                          timestamp=dt.datetime.utcnow())

    for index, member in enumerate(role.members):
        embed.add_field(name=f'Name {index 1}',
                        value=member.mention, inline=True)

    await ctx.send(embed=embed)
 

Комментарии:

1. Ты потрясающий. Большое вам спасибо!