@znsxwq

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

Всем добрый вечер! Делаю бота для дискорд сервера и хочу сделать команду профиля. В профиле хочу сделать вывод ролей пользователя, но не всех а только трёх.

@client.command(aliases = ['me', 'profile'])
async def __profile(ctx, member: discord.Member = None):
    if member is None:
        mentions = [role.mention for role in ctx.author.roles[1:]]
        rolescount = len(mentions)
        embed = discord.Embed(title = f'Профиль - {ctx.author}', 
            description = f"**```fix\nО себе: {cursor.execute('SELECT bio FROM users WHERE id = ?', (ctx.author.id,)).fetchone()[0]}```**" , color = 0xb5bceb)

        t = ctx.message.author.status
        if t == discord.Status.online:
             d = "В сети"

        t = ctx.message.author.status
        if t == discord.Status.offline:
            d = "Не в сети"

        t = ctx.message.author.status
        if t == discord.Status.idle:
            d = "Не активен"

        t = ctx.message.author.status
        if t == discord.Status.dnd:
            d = "Не беспокоить"
        

        embed.set_thumbnail(url=f'{ctx.author.avatar_url}')
        embed.add_field(name=':cookie:Сообщений', value=f"```ini\n{cursor.execute('SELECT message_count FROM users WHERE id = ?', (ctx.author.id,)).fetchone()[0]}```", inline = True)
        embed.add_field(name=':sparkles:Репутация', value=f"```ini\n{cursor.execute('SELECT rep FROM users WHERE id = ?', (ctx.author.id,)).fetchone()[0]}```", inline = True)
        embed.add_field(name=":computer:Активность", value=f"**```{d}```**",inline=True)
        embed.add_field(name=f"Роли ({rolescount})", value=f"".join(mentions))
        embed.add_field(name=":calendar:Возраст аккаунта / Присоединился к серверу", value=f"**```{ctx.message.author.created_at.strftime('%d.%m.%Y')} / {ctx.message.author.joined_at.strftime('%d.%m.%Y')}```**", inline=False)
            

        await ctx.message.delete()
        await ctx.send(embed=embed)

Бот выводит все роли пользователя, не подскажете как сделать только три?
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ответы на вопрос 1
Самый простой вариант - добавьте еще один slice.

mentions = [role.mention for role in ctx.author.roles[1:][:3]]   # "Первые" 3 роли (в интерфейсе Дискорда - нижние роли)
mentions = [role.mention for role in ctx.author.roles[1:][-3:]]  # "Последние" 3 роли (в интерфейсе Дискорда - верхние роли)


Ежели необходимо показывать только три определенных роли:

ROLES = [945967796849310659, 945967801044219854, 945967796847229780]
mentions = [role.mention for role in ctx.author.roles[1:] if role.id in ROLES]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
28 апр. 2024, в 21:29
3000 руб./за проект
28 апр. 2024, в 20:09
9000 руб./за проект
28 апр. 2024, в 19:54
2000 руб./за проект