Discord.py Отображение значков пользователей

#python #discord #discord.py

#python #Discord #discord.py

Вопрос:

Я пытаюсь выполнить команду, которая показывает значки пользователя. Это мой код:

 @bot.command(pass_context=True)
async def test(ctx, user: discord.Member):
        test = discord.Embed(title=f"{user.name} User's Badges", description=f"{user.public_flags}", color=0xff0000 )
        await ctx.channel.send(embed=test)
 

И бот отвечает так

 <PublicUserFlags value=64>
 

Я хочу, чтобы он реагировал следующим образом

 Hype Squad ...
 

Как мне это сделать?

Ответ №1:

user.public_flags это не способ получить доступ к профилю пользователя.

Из документации вам нужно использовать user.profile() для получения таких атрибутов, как premium, staff, hypesquad.

Поскольку discord.py 1.7 невозможно получить информацию из профиля пользователя с помощью await user.profile() . В документации указано, что эта функциональность устарела. Если вы попробуете это, вы получите сообщение об ошибке Forbidden: 403 Forbidden (error code: 20001): Bots cannot use this endpoint

Ответ №2:

Вы могли бы сделать str(user.public_flags.all()) , чтобы получить строковое значение всех значков, которые есть у пользователя. Хотя это улучшение, ваш результат все равно будет примерно таким: [<UserFlags.hypesquad_brilliance: 128>] . Но преимущество здесь в том, что слова hypesquad и brilliance четко указаны в строке. Теперь все, что вам нужно сделать, это удалить [<UserFlags. _ и : 128>] из строки.

Вот способ переопределить ваш код:

 @client.command(pass_context=True)
async def test(ctx, user: discord.Member):
    # Remove unnecessary characters
    hypesquad_class = str(user.public_flags.all()).replace('[<UserFlags.', '').replace('>]', '').replace('_',
                                                                                                         ' ').replace(
        ':', '').title()

    # Remove digits from string
    hypesquad_class = ''.join([i for i in hypesquad_class if not i.isdigit()])

    # Output
    test = discord.Embed(title=f"{user.name} User's Badges", description=f"{hypesquad_class}", color=0xff0000)
    await ctx.channel.send(embed=test)