#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))
Я надеюсь, что эта статья поможет некоторым другим людям! Хорошего дня!