python aiogram Как проверить, что пользователь прислал боту именно фото?

Как сделать проверку, что пользователь прислал боту именно фото? В python не так давно, поэтому не судите строго :/

Добавление пока сделал на команду /newpic

class bot(StatesGroup):
    newpic = State()

@dp.message_handler(commands="newpic")
async def new_pic(message):
    await message.answer("Пришлите фото для добавления:")
    await bot.newpic.set()

нашел вот такое решение, но оно не работает

@dp.message_handler(state=bot.newpic)
async def process_newpic(message: types.Message, state: FSMContext):
try:
        photo_id = message.photo[-1].file_id
        await dp.bot.send_message(message.chat.id,'получил фото')
        await state.finish()
except:
        dp.bot.send_message(message.chat.id,'это не фото')

сам пытался сделать вот так, но тоже не работает

@dp.message_handler(state=bot.newpic)
async def process_newpic(message: types.Message, state: FSMContext):
    if message.content_type == 'photo':
        await dp.bot.send_message(message.chat.id,'получил фото', reply_to_message_id=message.message_id)
        await state.finish()
    else: await dp.bot.send_message(message.chat.id,'это не фото', reply_to_message_id=message.message_id)

Можете подсказать как это лучше организовать?


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

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

Простой способ написания обработчика, который реагирует на определённый тип сообщения, в Вашем случае - фото:

@dp.message_handler(content_types=['photo']):
async def message_photo_handler(message: types.Message):
    file_id = message.photo[-1].file_id
    # Тут Ваша логика
    await message.reply("Вы отправили фотографию!")
→ Ссылка
Автор решения: A_Vaclav

Я писал бота на другой библиотеке... но API у телеги одинаковы для всего... https://core.telegram.org/bots/api#document вот на content_types=['document'] реагировало, когда фото присылали.

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

Могу предложить вам такой вариант: Код Python:

@dp.message_handler(state=Info.fobackbankcard, content_types=types.ContentTypes.ANY)
async def get_migrabank(message: types.Message, state: FSMContext):
    if message.photo:
        fileID = message.photo[-1].file_id
        await state.update_data(fobackbankcard=f"{fileID}")
        await bot.send_message(chat_id=message.chat.id, text=f'''Отправь фото миграционной карты''')
        await Info.fomegbankcard.set()
    else:
        await bot.send_message(chat_id=message.chat.id, text=f'''Вы отправили что-то не то.
Отправьте заднюю часть регистрационной карты:''')

Данный способ мне самому помог, возможно вам пригодится .

→ Ссылка