aoigram, pil Помощь с обработкой фото (питон и библиотеки все ластовые) При отправке фото, выдаёт ошибку в боте, но в терминали ничего нету

kolpac21

Новичок
Пользователь
Авг 7, 2023
2
0
1
Python:
from datetime import datetime
import io

from aiogram import types
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters import Text
from aiogram.dispatcher.filters.state import State, StatesGroup
from asyncio import sleep
from PIL import Image

from keyboards import inline, default
from misc import dp, bot, only_numerics
import fakedraw

class Settings(StatesGroup):
    zakaz = State()
    add_product_photo = State()
users_data = {} 
last_bot_photo = None

@dp.message_handler(lambda message: message.text == "Главное меню", content_types=types.ContentTypes.TEXT, state="*")
async def main(message: types.Message, state: FSMContext):
    await message.answer("Главное меню", reply_markup=default.Start())
    await state.finish()


@dp.message_handler(lambda message: message.text == "Заказ оплачен", content_types=types.ContentTypes.TEXT, state="*")
async def zakaz(message: types.Message, state: FSMContext):
    await message.answer("Выберите действие с помощью клавиатуры", reply_markup=default.Zakaz())
    await Settings.zakaz.set()

@dp.message_handler(lambda message: message.text == "Ввести данные", content_types=types.ContentTypes.TEXT, state=Settings.zakaz)
async def zakaz(message: types.Message, state: FSMContext):
    await message.answer_photo(fakedraw.fake_zakaz(message), caption="""
Введи необходимые данные:

1️⃣ - Время
2️⃣ - Первая буква именни аккаунта (Пример: Н)
3️⃣ - Имя аккаунта (Пример: Николай)
4️⃣ - Название товара (Пример: Тачка на прокачку)

Пример:
14:37
Н
Николай
Тачка на прокачку)
""")
    await Settings.zakaz.set()


@dp.message_handler(content_types=types.ContentTypes.TEXT, state=Settings.zakaz)
async def zakaz(message: types.Message, state: FSMContext):
    await message.answer_photo(fakedraw.fake_zakaz(message), reply_markup=inline.AddPhoto())
    await Settings.next()

@dp.message_handler(content_types=types.ContentTypes.PHOTO, state=Settings.add_product_photo)
async def add_product_photo(message: types.Message, state: FSMContext):
    user_data = await state.get_data()
    user_id = user_data.get("user_id")
    order_data = user_data.get("order_data")
    global last_bot_photo
    if last_bot_photo:
        last_bot_photo_data = await bot.get_file(last_bot_photo)
        last_bot_photo_bytes = await bot.download_file(last_bot_photo_data.file_path)
        last_bot_photo_stream = io.BytesIO(last_bot_photo_bytes)
        last_bot_photo_stream.name = 'last_bot_photo.jpg'
    else:
        await message.answer("Произошла ошибка...")
        await state.finish()
        return
    product_photo_data = await bot.get_file(message.photo[-1].file_id)
    product_photo_bytes = await bot.download_file(product_photo_data.file_path)
    product_photo_stream = io.BytesIO(product_photo_bytes)
    product_photo_stream.name = 'product_photo.jpg'
    combined_photo_stream = io.BytesIO()
    with Image.open(last_bot_photo_stream) as img1, Image.open(product_photo_stream) as img2:
        img1.paste(img2, (0, 0), img2)
        img1.save(combined_photo_stream, format='JPEG')
    await message.answer_photo(combined_photo_stream.getvalue(), caption="Обработанное фото с текстом и добавленным товаром", reply_markup=inline.AddPhoto())
    users_data[user_id]["product_photo_id"] = message.photo[-1].file_id
    await Settings.add_product_photo.set()

@dp.callback_query_handler(text='add_photo', state=Settings.add_product_photo)
async def ask_for_product_photo(call: types.CallbackQuery, state: FSMContext):
    await call.message.answer("Отправьте фото товара")
    await Settings.add_product_photo.set()

@dp.message_handler(lambda message: message.text == "📈 Информация", content_types=types.ContentTypes.TEXT, state="*")
async def info(message: types.Message, state: FSMContext):
    await message.answer(f"Тайная разработка компании - НессаАйтиЧиллКомпани")
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
374
108
43
а ошибку в боте вы предлагаете нам угадать или обратиться за помощью к экстрасенсам?
 

kolpac21

Новичок
Пользователь
Авг 7, 2023
2
0
1
а ошибку в боте вы предлагаете нам угадать или обратиться за помощью к экстрасенсам?
else:
await message.answer("Произошла ошибка...")
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
374
108
43
у вас изначально last_bot_photo = None, вот при проверке условия if last_bot_photo: оно и переходит в else
 

Форум IT Специалистов