← Все вопросы

Как бот может отвечать по-разному на разный текст пользователя?

Задан 16 месяцев назад751 просмотров2 ответа
5

Хочу, чтобы бот реагировал на слова: если написать «привет» — здоровался, если «погода» — что-то отвечал про погоду. Сейчас у меня только эхо. Как проверять, что именно написал человек?

2 ответа

9
✓ Принятый ответ — помог автору

Самый простой способ — внутри хендлера смотреть на message.text обычным if:

@dp.message()
async def answer(message: Message):
    text = message.text.lower()  # привести к нижнему регистру
    if text == "привет":
        await message.answer("И тебе привет!")
    elif "погода" in text:
        await message.answer("За окном программирование :)")
    else:
        await message.answer("Не понял тебя, напиши /help")

.lower() нужен, чтобы «Привет», «ПРИВЕТ» и «привет» считались одинаково. "погода" in text сработает, даже если в сообщении есть другие слова.

4

Если конкретных фраз будет много, удобнее ловить их фильтром прямо в декораторе, чтобы не городить длинный if:

from aiogram import F

@dp.message(F.text.lower() == "привет")
async def hi(message: Message):
    await message.answer("И тебе привет!")

F (магический фильтр) удобен, когда у каждой фразы свой обработчик.

Ваш ответ

Войдите, чтобы ответить на вопрос.