Как заставить тг бота aiogram реагировать на сообщение только текстового формата?

У меня есть код:

@dp.message(lambda message: message.text.startswith("/hello"))

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


Ответы (2 шт):

Автор решения: diasporx

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

from aiogram import types

@dp.message_handler(content_types=[types.ContentType.TEXT])
async def handle_text_messages(message: types.Message):
    if message.text.startswith("/hello"):
        # Ваш код для обработки сообщений, начинающихся с "/hello"
        await message.answer("Привет!")

мы проверяем начало текста сообщения (message.text.startswith("/hello")), и если текст начинается с "/hello", выполняется соответствующее действие.

@dp.message_handler(content_types=[types.ContentType.TEXT]), что означает, что этот обработчик будет реагировать только на текстовые сообщения.

→ Ссылка
Автор решения: CausonQ

В Aiogram 3 есть Магический фильтр

Используйте его:

F.text.startswith('foo')  # lambda message: message.text.startswith('foo')
F.text.endswith('bar')  # lambda message: message.text.startswith('bar')

В вашем случае будет:

@dp.message(F.text.startswith("/hello"))
→ Ссылка