Как в FSM передать фото и потом вывести его

Рейтинг: 0Ответов: 2Опубликовано: 12.04.2023

введите сюда описание изображения

Добрый вечер! Столкнулся с проблемой в FSM. Суть машины: пользователь передаёт бренд кроссовок, модель, цену и в конце фото.

Бренд, модель и цену я смог записать в машину, а вот фото не смог. Фото по идее должно записывать в message.photo, но когда прописал этот метод, он почему-то не работает или я просто неправильно вывел.

Код FSM:

    class Form(StatesGroup):
        photo = State()
        brend = State()
        model = State()
        price = State()
    
    @dp.message_handler(text='Добавить товар')
    async def update_tovar(message: types.Message):
        if message.from_user.id == int(ADMIN_ID):
            await bot.send_message(message.chat.id, "Добавитте товар\nНапишите бренд:")
            await Form.brend.set()
        else:
            bot.send_message(message.chat.id, "Я тебя не понимаю")
    
    
    @dp.message_handler(state=Form.brend)
    async def process_brend(message: types.Message, state: FSMContext):
        async with state.proxy() as data:
            data['brend'] = message.text
            await message.reply("Введите название модели: ")
            await Form.model.set()
    
    
    @dp.message_handler(state=Form.model)
    async def process_modeld(message: types.Message, state: FSMContext):
        async with state.proxy() as data:
            data['model'] = message.text
        await message.answer("Теперь введите цену: ")
        await Form.price.set()  # либо же UserState.adress.set()
    
    
    @dp.message_handler(state=Form.price)
    async def process_price(message: types.Message, state: FSMContext):
        async with state.proxy() as data:
            data['price'] = int(message.text)
        await message.reply("Теперь отправте фото модели: ")
        await Form.photo.set()
    
    
@dp.message_handler(state=Form.photo)
async def process_text(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        photo = data['photo'] = message.photo[-1].file_id
    send_shoes = f"brend: {data['brend']}\n" \
     f"model: {data['model']}\n"
    await bot.send_message(message.chat.id, send_shoes)
    await bot.send_photo(message.chat.id, photo=photo)
    await state.finish()

Ответы

▲ 0

надо было просто в await bot.send_photo(message.chat.id, photo=photo) добавить .file_id await bot.send_photo(message.chat.id, photo=photo.file_id)

▲ 0

Нужно добавить в @dp.message_handler(state=Form.photo,content_types=ContentType.PHOTO) чтобы обработчик смог оперировать фотками.