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 шт):
Простой способ написания обработчика, который реагирует на определённый тип сообщения, в Вашем случае - фото:
@dp.message_handler(content_types=['photo']):
async def message_photo_handler(message: types.Message):
file_id = message.photo[-1].file_id
# Тут Ваша логика
await message.reply("Вы отправили фотографию!")
Я писал бота на другой библиотеке... но API у телеги одинаковы для всего... https://core.telegram.org/bots/api#document вот на content_types=['document'] реагировало, когда фото присылали.
Могу предложить вам такой вариант: Код 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'''Вы отправили что-то не то.
Отправьте заднюю часть регистрационной карты:''')
Данный способ мне самому помог, возможно вам пригодится .