Как заставить тг бота aiogram реагировать на сообщение только текстового формата?
У меня есть код:
@dp.message(lambda message: message.text.startswith("/hello"))
Когда я отправляю картинку боту, он выдает ошибку тк пытается найти текст в сообщении но его нет. Как заставить этот кусок кода реагировать только на текстовые сообщения?
Ответы (2 шт):
Чтобы этот кусок кода реагировал только на текстовые сообщения и не вызывал ошибку при отправке изображений или других неподходящих типов сообщений, можно добавить проверку на тип сообщения перед проверкой текста.
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])
, что означает, что этот обработчик будет реагировать только на текстовые сообщения.
В 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"))