aiogram, Бот, ответы на вопросы

Как сделать чтобы бот слушал все сообщения, но реагировал на них если: 1)тип сообщения от пользователя будет текстовой тогда бот выдаёт нужную информацию, 2)если пользователь вводит что-то отличное от текста, тогда бот будет выводить ему что-то вроде ошибки, я понял что нужно внести параметрв в @dp.message_handler(content_types=????), сделал, как реагировать только на текст, а что-бы он паралельно реагировал на остальные сообщения, не пойму как, неужели нужно перечислить все типы сообщений в @dp.message_handler?


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

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

Если поискать в примерах в репозитории aiogram, то много чего полезного можно найти. Например, частично то, что Вам нужно - эхо-бот:

@dp.message_handler()
async def echo(message: types.Message):
    # old style:
    # await bot.send_message(message.chat.id, message.text)

    await message.answer(message.text)

Теперь, Вы можете достать из объекта Message тип сообщения, и делать с этой информацией всё, что хотите. Например, в Вашем случае, выглядеть это будет примерно так:

@dp.message_handler(content_types=types.ContentType.ANY)
async def echo(message: types.Message):
    if message.content_type == types.ContentType.TEXT:
        # Тут делайте всё, что нужно, если юзер отправил обычное сообщение
        await message.answer("Вы отправили текст!")
    else:
        # Всё, что не попадает под текст
        await message.answer("Отправьте, пожалуйста, текст!")

Ну, или так:

@dp.message_handler(content_types=types.ContentType.ANY)
async def echo(message: types.Message):
    if message.text:
        # Тут делайте всё, что нужно, если юзер отправил обычное сообщение
        await message.answer("Вы отправили текст!")
    else:
        # Всё, что не попадает под текст
        await message.answer("Отправьте, пожалуйста, текст!")
→ Ссылка