Discord.py как мне получить имя пользователя в команде лидеров mongoDB?

Поэтому я сделал команду таблицы лидеров Discord.py с MongoDB, все работает, но я не могу отправить имя пользователя.

Данные хранятся так:

_id: 484363190168322049 #users id
experience: 964
level: 5

Код Python:

@client.command(aliases = ["et", "leaderboard"])
async def lb(ctx, arg=10):
    rankings = collection.find().sort("experience",-1)
    i=1
    embed = discord.Embed(title = f"***Top {arg} users***")
    for x in rankings:
        print(x["_id"])
        user = client.get_user(x["_id"])
        user_xp = x["experience"]
        ##########################################################################
        # This is where I want to add the user username instead of <@{x['_id']}> #
        ##########################################################################
        embed.add_field(name=f"{i}: <@{x['_id']}>", value=f"XP │ {user_xp}", inline=False)
        if i == arg:
            break
        else:
            i += 1
    embed.set_footer(text=f"{ctx.guild}", icon_url=f"{ctx.guild.icon_url}")
    embed.timestamp = datetime.datetime.utcnow()
    await ctx.send(embed=embed)

Это упоминает пользователя, но я этого не хочу, я хочу только имя пользователя пользователя, я пробовал:

user = client.get_user(x["_id"])
embed.add_field(name=f"{i}: {user.name}>", value=f"XP │ {user_xp}", inline=False)

Раньше это работало с другими моими командами, но возвращает:

discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'NoneType' object has no attribute 'name'

person McBigBob    schedule 07.04.2021    source источник


Ответы (1)


Ваша проблема в том, что бот не получает пользователя (ошибка NoneType). Попробуйте сделать это:

user1 = int(x["_id"])
user = client.get_user(user1) 
embed.add_field(name=f"{i}: {user.name}>", value=f"XP │ {user_xp}", inline=False)

Или проверьте базу данных, ошибка может быть выше, или это может быть ошибка базы данных find().

person filipporomani    schedule 07.04.2021
comment
Он отлично распечатывает все идентификаторы, но все равно выдает ту же ошибку. - person McBigBob; 07.04.2021
comment
попробуйте распечатать (пользователь) - person filipporomani; 07.04.2021
comment
и если это не сработает, попробуйте client.fetch_user() вместо get_user() - person filipporomani; 07.04.2021
comment
Спасибо, client.fetch_user() сработало для меня! - person McBigBob; 08.04.2021
comment
Ошибка, вероятно, заключалась в том, что пользователь не был на сервере с ботом, в этом случае полезен fetch_user. Рад помочь вам! - person filipporomani; 08.04.2021