Исходный код denoise_bot.routers.generate_image_button
importbase64importuuidfromdatetimeimportdatetimeimportsupabaseassbfromaiogramimportF,Routerfromaiogram.fsm.contextimportFSMContextfromaiogram.typesimportBufferedInputFile,CallbackQuery,Message,ReplyKeyboardRemovefromdotenvimportload_dotenvfrom..fusion_brainimportFusionBrainAPIfrom.startimportmenu_buttonsfrom.button_statesimportForm,GenImage_Statesfrom.startimportmenu_buttonsload_dotenv()generate_image=Router()# Константы для FusionBrain APIFUSIONBRAIN_API_KEY="E41777D35F336F1D0C2B00EB08D75F38"FUSIONBRAIN_API_SECRET="1E0A23558FF802583C814E5AD49C4814"FUSIONBRAIN_URL="https://api-key.fusionbrain.ai/key/api/v1/pipeline/run'"
[документация]@generate_image.callback_query(Form.is_choosing,F.data.startswith("generate_image"))asyncdefhandle_generate_image(callback:CallbackQuery,state:FSMContext)->None:"""Обработка нажатия кнопки генерации изображения."""awaitcallback.message.answer(_("Введите текст для генерации изображения:"),reply_markup=ReplyKeyboardRemove())awaitstate.set_state(GenImage_States.waiting_for_prompt)
[документация]@generate_image.message(GenImage_States.waiting_for_prompt)asyncdefgenerate_image_from_text(message:Message,state:FSMContext,supabase_client:sb.Client)->None:"""Генерация изображения по тексту через API."""prompt=message.textuser=message.from_userawaitmessage.answer(_("Генерирую изображение...⏳"))try:api=FusionBrainAPI("https://api-key.fusionbrain.ai/",FUSIONBRAIN_API_KEY,FUSIONBRAIN_API_SECRET)pipeline_id=api.get_pipeline()generated_uuid=api.generate(prompt,pipeline_id)files=api.check_generation(generated_uuid)image_base64=files[0]image_data=base64.b64decode(image_base64)file_name=f"generated_{user.id}_{uuid.uuid4().hex}.png"file_path=f"users/{user.id}/{file_name}"# Загружаем изображение в Supabasestorage_response=supabase_client.storage.from_("images").upload(file_path,image_data,file_options={"content-type":"image/png"})image_url=supabase_client.storage.from_("images").get_public_url(file_path)request_data={"created_at":datetime.now().isoformat(),"user_id":user.id,"request":prompt,"image_url":image_url}db_response=supabase_client.table("images").insert(request_data).execute()photo_file=BufferedInputFile(file=image_data,filename="result.jpg")awaitmessage.answer_photo(photo=photo_file,caption=_("Ваше изображение готово!"))exceptExceptionase:awaitmessage.answer(_("Произошла ошибка при обработке: {}").format(error=str(e)))awaitmessage.answer(_("Выберите действие:"),reply_markup=menu_buttons())awaitstate.set_state(Form.is_choosing)