This commit is contained in:
xds
2026-02-03 14:42:48 +03:00
parent 7050999ed8
commit a1dc734cdb
2 changed files with 26 additions and 6 deletions

View File

@@ -27,8 +27,8 @@ class AssetsRepo:
return assets return assets
async def get_asset(self, asset_id: str) -> Asset: async def get_asset(self, asset_id: str, with_data: bool = True) -> Asset:
res = await self.collection.find_one({"_id": ObjectId(asset_id)}) res = await self.collection.find_one({"_id": ObjectId(asset_id)}, {"data": 0 if not with_data else 1})
res["id"] = str(res.pop("_id")) res["id"] = str(res.pop("_id"))
return Asset(**res) return Asset(**res)

View File

@@ -1,6 +1,7 @@
from aiogram import Router from aiogram import Router, F
from aiogram.filters import Command from aiogram.filters import Command
from aiogram.types import Message, InputMediaPhoto, InputMedia, BufferedInputFile from aiogram.types import Message, InputMediaPhoto, InputMedia, BufferedInputFile, InlineKeyboardButton, CallbackQuery, \
InlineKeyboardMarkup
from repos.dao import DAO from repos.dao import DAO
@@ -11,7 +12,8 @@ router = Router()
async def assets_command(msg: Message, dao: DAO): async def assets_command(msg: Message, dao: DAO):
assets = await dao.assets.get_assets(limit=10, offset=0) assets = await dao.assets.get_assets(limit=10, offset=0)
media_group = [] media_group = []
for asset in assets: keyboard = []
for index, asset in enumerate(assets):
if asset.tg_photo_file_id: if asset.tg_photo_file_id:
media_group.append(InputMediaPhoto(media=asset.tg_photo_file_id)) media_group.append(InputMediaPhoto(media=asset.tg_photo_file_id))
elif asset.tg_doc_file_id: elif asset.tg_doc_file_id:
@@ -19,8 +21,26 @@ async def assets_command(msg: Message, dao: DAO):
media_group.append(InputMediaPhoto(media=BufferedInputFile(asset_full_info.data, asset_full_info.name))) media_group.append(InputMediaPhoto(media=BufferedInputFile(asset_full_info.data, asset_full_info.name)))
else: else:
continue continue
mg = await msg.answer_media_group(media_group) keyboard.append(InlineKeyboardButton(text=F"{index + 1}", callback_data=f"asset_doc_{asset.id}"))
mg = await msg.answer_media_group(media_group,
reply_markup=InlineKeyboardMarkup(inline_keyboard=[keyboard]))
await msg.answer("Для запроса документов выбери фото и на кнопку ниже:",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[keyboard]))
for media_index, media in enumerate(mg): for media_index, media in enumerate(mg):
if assets[media_index].tg_photo_file_id is None: if assets[media_index].tg_photo_file_id is None:
assets[media_index].tg_photo_file_id = media.photo[-1].file_id assets[media_index].tg_photo_file_id = media.photo[-1].file_id
await dao.assets.update_asset(assets[media_index].id, assets[media_index]) await dao.assets.update_asset(assets[media_index].id, assets[media_index])
@router.callback_query(F.data.startswith("asset_doc_"))
async def assets_callback_query(call: CallbackQuery, dao: DAO):
await call.answer()
assets_id = call.data.split("asset_doc_")[-1]
asset = await dao.assets.get_asset(assets_id, with_data=False)
if asset.tg_doc_file_id:
await call.message.answer_document(asset.tg_doc_file_id)
else:
asset_full_info = await dao.assets.get_asset(assets_id)
doc = await call.message.answer_document(BufferedInputFile(asset_full_info.data, asset_full_info.name))
asset_full_info.tg_doc_file_id = doc.document.file_id
await dao.assets.update_asset(assets_id, asset_full_info)