Discord.py | Бот отвечает, когда его пингуют

#python #discord #discord.py

#python #Discord #discord.py

Вопрос:

Если я делаю что-то подобное if message.content.startswith('hello'): , это работает нормально.

Однако я не могу найти способ заставить его работать для пингов. Я попробовал идентификатор и имя бота. Мой код с идентификатором бота:

 @client.event
async def on_message(message):
    await client.process_commands(message)
    if message.content.startswith('<@741352621826375781>'):
        embed = discord.Embed(
            colour = discord.Colour.red())
     
        embed.add_field(name='Hello', value='''My prefix is `.`, type `.help` for help.''', inline=False)
            
        await message.channel.send(embed=embed)
 

Кто-нибудь может помочь?

Ответ №1:

Вот немного улучшенная версия Sofia

 @client.event
async def on_message(message): 
    # Adding `<!@{id_here}>` so it's gonna work whether it's mentioned by nick or simply by the name
    if message.content in [f'<!@{client.user.id}>', f'<@{client.user.id}>']:
        await message.channel.send('Hello there')

    await client.process_commands(message)
 

Ответ №2:

Это должно устранить вашу проблему, причина, по которой ваш код не работал, заключается в ошибке атрибута.

 @client.event
async def on_message(message):
   if str(message.content) == '<@741352621826375781>':
        await message.channel.send('Hello ?')
    await client.process_commands(message)
 

Ответ №3:

Существует более простой способ проверить, был ли бот упомянут в сообщении или нет.

 @client.event
async def on_message(message):
    if client.user in message.mentions:
        await message.channel.send("Hello!")