Как пометить пользователя с помощью discord.Аргумент участника?

#python #discord #discord.py

Вопрос:

У меня есть бот для разногласий с командой !sad . При выполнении бот должен ответить случайным string от sad_list .

 sad_list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"]

@client.command()
async def sad(ctx, user: discord.Member=None):
    print("running 'sad'")
    
    if user is None:
        await ctx.send(f"{sad_list[randint(0, len(sad_list))]} <3")
 

Я хочу, чтобы бот пометил кого-то, если вы выполните команду с user: discord.Member аргументом.

Предпочтительный выход:

 @user#0000 [positive message] <3
 

в отличие от только

 [Positive message] <3
 

Следующее уже было опробовано:

 if user is None:
        await ctx.send(f"{ctx.message.author} {sad_list[randint(0, len(sad_list))]} <3")
    else:
        await ctx.send(f"{user} {sad_list[randint(0, len(sad_list))]} <3")
 

Однако это просто пишет:

 user#0000 [positive comment] <3
 

В отличие от фактического упоминания о них

Комментарии:

1. Почему нет — ctx.send(f"@{user} {sad_list[randint(0, len(sad_list))]} <3")

2. @PCM, что заставляет бота говорить @user#0000 [positive message] <3 . Но на самом деле не упоминайте пользователя

Ответ №1:

Используйте user.mention для упоминания пользователей

await ctx.send(f"{user.mention} {sad_list[randint(0, len(sad_list))]} <3")

https://discordpy.readthedocs.io/en/master/api.html?выделите=пользователь внимание#раздор.Пользователь.упоминание

Для будущих ссылок вы также можете упомянуть пользователей следующим образом: <@!user_id> , user_id заменить фактическим идентификатором пользователя. Вы можете использовать это в тех случаях, когда user.mention это непрактично.

Ответ №2:

если вы хотите упомянуть пользователя, просто введите

await ctx.send(f"{user.mention} {sad_list[randint(0, len(sad_list))]} <3")