Как заставить бота отображать информацию о пользователе, если другой пользователь пингует этого пользователя discord.py

#python #discord #discord.py

#python #Discord #discord.py

Вопрос:

Я пытаюсь заставить своего бота отображать информацию о пользователях, если пользователь вводит профиль пользователя? [имя другого пользователя]’.

 if message.content == 'profile?'   user.mention:
   x=display_players_smiles(str(user.mention))            
   y=display_players_frowns(str(user.mention))
   embedVar = discord.Embed(title= str(user.mention), description="This is their profile", color=0x0210ff)
   embedVar.add_field(name="Smiles", value=str(x), inline=False)
   embedVar.add_field(name="Frowns", value=str(y), inline=False)
   await message.channel.send(embed=embedVar)
 

Я попытался использовать user.mention, но это выдало мне ошибку.

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

1. Есть ли какая-либо причина, по которой вы используете on_message события вместо команд? Это было бы намного проще для вас

2. Нет причин, и я бы не возражал вместо этого использовать команды. Я просто не знаю, как использовать команды для этого.

Ответ №1:

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

 @bot.command() # Or `client.command()` - depends how you named your bot instance
async def profile(ctx, user: discord.Member):
    x = display_players_smiles(user.mention)            
    y = display_players_frowns(user.mention)
    embedVar = discord.Embed(title=user.mention, description="This is their profile", color=0x0210ff)
    embedVar.add_field(name="Smiles", value=str(x), inline=False)
    embedVar.add_field(name="Frowns", value=str(y), inline=False)
    await ctx.send(embed=embedVar)
 

Пара вещей, о которых стоит упомянуть:

  • Вам нужно intents.members включить
  • В конце on_message события вам нужно добавить
 await bot.process_commands(message) # Or `client.process..` - depends how you named it
 
  • Не забывайте использовать commands.Bot , не discord.Client , также не забывайте использовать только ОДИН, а не оба.

Взгляните на введение в команды, надеюсь, это прояснит для вас некоторые вещи.

Вот еще одна полезная ссылка о том, как включить намерения и привилегированные намерения, ссылка heer

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

1. Я продолжаю получать эту ошибку Ignoring exception in on_message всякий раз, когда пытаюсь запустить код.

2. В чем ошибка? Также предполагается, что вы должны удалить profile команду в on_message событии, поскольку она у вас есть как команда

3. Что такое eo? И да, я удалил свою старую команду для profile, и это единственная, которая у меня есть сейчас, но я все равно получаю ту же ошибку.

4. Я написал это в комментариях, я не знаю, как вы назвали свой экземпляр бота, вы можете позвонить client . Взгляните на свой код и посмотрите, используете ли вы client или bot

5. Traceback (most recent call last): File "C:UsersGabe KAppDataLocalProgramsPythonPython38-32libsite-packagesdiscordclient.py", line 312, in _run_event await coro(*args, **kwargs) File "x-wingide-python-shell://114675904/2", line 162, in on_message AttributeError: 'MyClient' object has no attribute 'command' Ignoring exception in on_message Я все еще получаю сообщение об ошибке, когда я переношу его на клиент, хотя на этот раз все по-другому.