From 21e5a71ed094076ff5f69fd25e7d684d508672be Mon Sep 17 00:00:00 2001 From: Delitel Date: Fri, 22 Sep 2023 22:02:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B2=D0=B8=D0=B4=D0=B5=D0=BE=20=D0=B8=D0=B7=20?= =?UTF-8?q?=D0=B2=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sync/vk/handlers/__init__.py | 1 + sync/vk/handlers/videos.py | 73 ++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 sync/vk/handlers/videos.py diff --git a/sync/vk/handlers/__init__.py b/sync/vk/handlers/__init__.py index 72679ce..626192f 100644 --- a/sync/vk/handlers/__init__.py +++ b/sync/vk/handlers/__init__.py @@ -1,3 +1,4 @@ +from . import videos from . import photos from . import stickers from . import voices diff --git a/sync/vk/handlers/videos.py b/sync/vk/handlers/videos.py new file mode 100644 index 0000000..2e260cc --- /dev/null +++ b/sync/vk/handlers/videos.py @@ -0,0 +1,73 @@ +from ..core import bot +from vkbottle.user import Message +from ...db import Sessions +from ...db.models import Conversations +from sqlalchemy import select +from ...tg.core import bot as tg +from ..utils import create_vk_link +from ...utils import get_file_from_url +from vkbottle.dispatch.rules import ABCRule +from aiogram.types import InputMediaVideo + + +class VideoRule(ABCRule[Message]): + """ + Кастомное правило которое будет срабатывать если + будет отправлено видео + """ + + async def check(self, event: Message): + if event.attachments: + if event.attachments[0].video: + return True + else: + return False + else: + return False + + +@bot.on.message(VideoRule()) +async def on_video(message: Message): + async with Sessions() as session: + bundle = await session.scalar( + select(Conversations).where(Conversations.vk_id == message.peer_id) + ) + if bundle: + user_info = await bot.api.users.get(message.from_id) + text = f"{user_info[0].first_name} {user_info[0].last_name}\n" + if message.text: + text += "‾" * 10 + text += f"\n{message.text}" + + videos = [] + for index, attachment in enumerate(message.attachments): + if attachment and attachment.video: + videos.append( + InputMediaVideo( + await get_file_from_url( + await get_best_quality_video(attachment.video.files) + ), + parse_mode="html", + caption=text if index == 0 else None, + ) + ) + await tg.send_media_group(bundle.tg_id, videos) + + +async def get_best_quality_video(files): + qualities = [ + 'mp4_2160', # 4K + 'mp4_1440', # 1440p + 'mp4_1080', # 1080p + 'mp4_720', # 720p + 'mp4_480', # 480p + 'mp4_360', # 360p + 'mp4_240', # 240p + 'mp4_144', # 144p + ] + + for quality in qualities: + if getattr(files, quality) is not None: + return getattr(files, quality) + + return None