PyroFork: Add support to send animation in media group

Signed-off-by: wulan17 <wulan17@nusantararom.org>
This commit is contained in:
wulan17 2023-01-14 00:20:05 +07:00
parent c484e82810
commit f55d75d3bb
No known key found for this signature in database
GPG key ID: 318CD6CD3A6AC0A5
2 changed files with 18 additions and 5 deletions

View file

@ -20,6 +20,7 @@ import logging
import os import os
import re import re
from datetime import datetime from datetime import datetime
from pymediainfo import MediaInfo
from typing import Union, List from typing import Union, List
import pyrogram import pyrogram
@ -40,7 +41,8 @@ class SendMediaGroup:
"types.InputMediaPhoto", "types.InputMediaPhoto",
"types.InputMediaVideo", "types.InputMediaVideo",
"types.InputMediaAudio", "types.InputMediaAudio",
"types.InputMediaDocument" "types.InputMediaDocument",
"types.InputMediaAnimation"
]], ]],
disable_notification: bool = None, disable_notification: bool = None,
message_thread_id: int = None, message_thread_id: int = None,
@ -58,7 +60,7 @@ class SendMediaGroup:
For your personal cloud (Saved Messages) you can simply use "me" or "self". For your personal cloud (Saved Messages) you can simply use "me" or "self".
For a contact that exists in your Telegram address book you can use his phone number (str). For a contact that exists in your Telegram address book you can use his phone number (str).
media (List of :obj:`~pyrogram.types.InputMediaPhoto`, :obj:`~pyrogram.types.InputMediaVideo`, :obj:`~pyrogram.types.InputMediaAudio` and :obj:`~pyrogram.types.InputMediaDocument`): media (List of :obj:`~pyrogram.types.InputMediaPhoto`, :obj:`~pyrogram.types.InputMediaVideo`, :obj:`~pyrogram.types.InputMediaAudio`, :obj:`~pyrogram.types.InputMediaDocument` and :obj:`~pyrogram.types.InputMediaAnimation`):
A list describing photos and videos to be sent, must include 210 items. A list describing photos and videos to be sent, must include 210 items.
disable_notification (``bool``, *optional*): disable_notification (``bool``, *optional*):
@ -159,9 +161,17 @@ class SendMediaGroup:
), ),
spoiler=i.has_spoiler spoiler=i.has_spoiler
) )
elif isinstance(i, types.InputMediaVideo): elif (
isinstance(i, types.InputMediaVideo)
or
isinstance(i, types.InputMediaAnimation)
):
if isinstance(i.media, str): if isinstance(i.media, str):
is_animation = False
if os.path.isfile(i.media): if os.path.isfile(i.media):
videoInfo = MediaInfo.parse(i.media)
if not any([track.track_type == 'Audio' for track in videoInfo.tracks]):
is_animation = True
media = await self.invoke( media = await self.invoke(
raw.functions.messages.UploadMedia( raw.functions.messages.UploadMedia(
peer=await self.resolve_peer(chat_id), peer=await self.resolve_peer(chat_id),
@ -170,14 +180,16 @@ class SendMediaGroup:
thumb=await self.save_file(i.thumb), thumb=await self.save_file(i.thumb),
spoiler=i.has_spoiler, spoiler=i.has_spoiler,
mime_type=self.guess_mime_type(i.media) or "video/mp4", mime_type=self.guess_mime_type(i.media) or "video/mp4",
nosound_video=is_animation,
attributes=[ attributes=[
raw.types.DocumentAttributeVideo( raw.types.DocumentAttributeVideo(
supports_streaming=i.supports_streaming or None, supports_streaming=True if is_animation else (i.supports_streaming or None),
duration=i.duration, duration=i.duration,
w=i.width, w=i.width,
h=i.height h=i.height
), ),
raw.types.DocumentAttributeFilename(file_name=os.path.basename(i.media)) raw.types.DocumentAttributeFilename(file_name=os.path.basename(i.media)),
raw.types.DocumentAttributeAnimated() if is_animation else None
] ]
) )
) )

View file

@ -1,2 +1,3 @@
pyaes==1.6.1 pyaes==1.6.1
pymediainfo==6.0.1
pysocks==1.7.1 pysocks==1.7.1