discord.py | проверьте наличие 2 или более сообщений

#python #discord.py

#python #discord.py

Вопрос:

Я попытался запрограммировать discord-бота, который проверяет несколько сообщений одно за другим. Поэтому, если кто-то пишет «Привет», бот должен написать «Привет там» и проверить, соответствует ли следующее сообщение «Как дела?».

     @client.event
async def on_message(message):
    if 'hi' in message.content:
        await message.channel.send('Hello there.')
        if 'How are you?' in message.content:
            await message.channel.send('I am fine.')
  

Но бот игнорирует вторую команду. Почему?

Ответ №1:

При написании такого сообщения проверяется, есть ли в сообщении «Как дела», где был привет. Чтобы заставить вашего бота ответить, а затем дождаться ответа, используйте wait_for

Это будет выглядеть так:

 @client.event
async def on_message(message):
    if 'hi' in message.content:
        await message.channel.send('Hello there.')
        await bot.wait_for("How are you", check=check)
  

Что это делает, так это то, что если в сообщении есть привет, бот отвечает, а затем ожидает сообщения с вопросом «Как дела

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

1. Бот ждет, но не может ответить на вопрос, как дела. Как мне это сделать?

2. в строке после await вы должны написать ctx.send(«отличный hbu»)

Ответ №2:

Второе отправленное вами сообщение снова будет передано как сообщение функции on_message(). попробуйте это

 async def on_message(message):
    if 'hi' in message.content:
        await message.channel.send('Hello there.')
    if 'How are you?' in message.content:
        await message.channel.send('I am fine.')
  

Ответ №3:

Чтобы завершить эту статью и помочь другим, я размещаю здесь правильный и законченный код.

 @client.event
async def on_message(message):
    if message.content.startswith('Hi'):
        channel = message.channel
        await channel.send('Hello!')

        def check(message1):
            return message1.content == 'How are you?' and message1.channel == channel

        msg = await client.wait_for('message', check=check)
        await channel.send("I am fine.".format(msg))
  

Я надеюсь, что эта статья поможет некоторым другим людям! Хорошего дня!