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