← Все вопросы
Как бот может отвечать по-разному на разный текст пользователя?
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 (магический фильтр) удобен, когда у каждой фразы свой обработчик.
Ваш ответ
Войдите, чтобы ответить на вопрос.