feat(*): send images from website
This commit is contained in:
@@ -9,6 +9,8 @@ from typing import Any
|
||||
from aiogram import BaseMiddleware, Bot, F, Router, html, types
|
||||
from aiogram.enums import ChatAction
|
||||
from aiogram.types import (
|
||||
BufferedInputFile,
|
||||
InputMediaPhoto,
|
||||
KeyboardButton,
|
||||
ReplyKeyboardMarkup,
|
||||
ReplyKeyboardRemove,
|
||||
@@ -169,8 +171,13 @@ async def send_long_message(
|
||||
)
|
||||
|
||||
|
||||
async def process_message_from_web( # noqa: C901, PLR0912, PLR0915
|
||||
convex_user_id: str, text: str, bot: Bot, convex_chat_id: str
|
||||
async def process_message_from_web( # noqa: C901, PLR0912, PLR0913, PLR0915
|
||||
convex_user_id: str,
|
||||
text: str,
|
||||
bot: Bot,
|
||||
convex_chat_id: str,
|
||||
images_base64: list[str] | None = None,
|
||||
images_media_types: list[str] | None = None,
|
||||
) -> None:
|
||||
user = await convex.query("users:getById", {"userId": convex_user_id})
|
||||
|
||||
@@ -181,9 +188,32 @@ async def process_message_from_web( # noqa: C901, PLR0912, PLR0915
|
||||
is_summarize = text == "/summarize"
|
||||
|
||||
if tg_chat_id and not is_summarize:
|
||||
await bot.send_message(
|
||||
tg_chat_id, f"📱 {html.quote(text)}", reply_markup=ReplyKeyboardRemove()
|
||||
)
|
||||
if images_base64 and images_media_types:
|
||||
if len(images_base64) == 1:
|
||||
photo_bytes = base64.b64decode(images_base64[0])
|
||||
await bot.send_photo(
|
||||
tg_chat_id,
|
||||
BufferedInputFile(photo_bytes, "photo.jpg"),
|
||||
caption=f"📱 {text}" if text else "📱",
|
||||
reply_markup=ReplyKeyboardRemove(),
|
||||
)
|
||||
else:
|
||||
media = []
|
||||
img_pairs = zip(images_base64, images_media_types, strict=True)
|
||||
for i, (img_b64, _) in enumerate(img_pairs):
|
||||
photo_bytes = base64.b64decode(img_b64)
|
||||
caption = f"📱 {text}" if i == 0 and text else None
|
||||
media.append(
|
||||
InputMediaPhoto(
|
||||
media=BufferedInputFile(photo_bytes, f"photo_{i}.jpg"),
|
||||
caption=caption,
|
||||
)
|
||||
)
|
||||
await bot.send_media_group(tg_chat_id, media)
|
||||
else:
|
||||
await bot.send_message(
|
||||
tg_chat_id, f"📱 {html.quote(text)}", reply_markup=ReplyKeyboardRemove()
|
||||
)
|
||||
|
||||
api_key = user["geminiApiKey"]
|
||||
model_name = user.get("model", "gemini-3-pro-preview")
|
||||
|
||||
@@ -51,6 +51,8 @@ async def handle_pending_generation(bot: Bot, item: dict, item_id: str) -> None:
|
||||
text=item["userMessage"],
|
||||
bot=bot,
|
||||
convex_chat_id=item["chatId"],
|
||||
images_base64=item.get("imagesBase64"),
|
||||
images_media_types=item.get("imagesMediaTypes"),
|
||||
)
|
||||
except Exception as e: # noqa: BLE001
|
||||
logger.error(f"Error processing {item_id}: {e}")
|
||||
|
||||
Reference in New Issue
Block a user