@FurryFandom

Как упростить код в Embed?

Я пытался написать код, что бы при команде >usercheck бот выводил сообщение, где показывает информацию о пользователе (не через упоминания, а через НикНейм) через эмбед. Можно ли как-то упростить и сделать так, чтоб бот находил где-то записанный ник и давал по нему информацию, записанную в коде.
client.command(pass_context = True)
@commands.has_permissions(administrator = True)
async def checkuser_user(ctx):
    await ctx.channel.send('Please, wait')
    PREFIX = '>'
    emb = discord.Embed(title = 'User info')

    emb.add_field(name = '{}Bans'.format(PREFIX),value = '0')
    emb.add_field(name = '{}Kicks'.format(PREFIX),value = '0')
    emb.add_field(name = '{}Warns'.format(PREFIX),value = '1/3')
    emb.add_field(name = '{}Ban reason: '.format(PREFIX),value = 'None')
    emb.add_field(name = '{}Role history'.format(PREFIX),value = 'Verify.')
    await ctx.send(embed = emb)
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
retUrn3d
@retUrn3d
Пользователь, просто пользователь...
Сделал для вас такое решение, однако это не панацея и ники по типу: "Nick Name" он не найдет.
Но за то будет отлично работать для ников по типу: "Nickname".
@bot.command(pass_context = True)
@commands.has_permissions(administrator = True)
async def checkuser_user(ctx, arg):
    await ctx.channel.send('Please, wait')
    # Пребираем все пользователей на сервере.
    for guild in bot.guilds:
        for member in guild.members:
            # Сравниваем введенный ник и ники тех кто есть на сервере, убирая идентификатор из ника "#9999" 
            if arg == str(member)[0:-5]:
                PREFIX = '>'
                emb = discord.Embed(title = 'User info')

                emb.add_field(name = '{}Bans'.format(PREFIX),value = '0')
                emb.add_field(name = '{}Kicks'.format(PREFIX),value = '0')
                emb.add_field(name = '{}Warns'.format(PREFIX),value = '1/3')
                emb.add_field(name = '{}Ban reason: '.format(PREFIX),value = 'None')
                emb.add_field(name = '{}Role history'.format(PREFIX),value = 'Verify.')
                await ctx.send(embed = emb)


И второй вариант с использованием пакета: fuzzywuzzy
Этот вариант позволяет более гибко искать нужных пользователей, в том числе, если будет допущена незначительная ошибка в написании ника.

from fuzzywuzzy import fuzz

@bot.command(pass_context = True)
@commands.has_permissions(administrator = True)
async def checkuser_user(ctx, arg):
    await ctx.channel.send('Please, wait')
    # Пребираем все пользователей на сервере.
    for guild in bot.guilds:
        for member in guild.members:
            # Сравниваем введенный ник и ники полученные из списка.
            if fuzz.partial_ratio(arg, str(member)[0:-5]) > 95:  # <- Процент при котором совпадение "успешно".
                PREFIX = '>'
                emb = discord.Embed(title = 'User info')

                emb.add_field(name = '{}Bans'.format(PREFIX),value = '0')
                emb.add_field(name = '{}Kicks'.format(PREFIX),value = '0')
                emb.add_field(name = '{}Warns'.format(PREFIX),value = '1/3')
                emb.add_field(name = '{}Ban reason: '.format(PREFIX),value = 'None')
                emb.add_field(name = '{}Role history'.format(PREFIX),value = 'Verify.')
                await ctx.send(embed = emb)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы