beta-tgdrive / utils /streamer /file_properties.py
dragxd's picture
Initial commit for beta-tgdrive
19f62c1
from pyrogram import Client
from pyrogram.types import Message
from pyrogram.file_id import FileId
from typing import Any, Optional, Union
from pyrogram.raw.types.messages import Messages
from datetime import datetime
async def parse_file_id(message: "Message") -> Optional[FileId]:
media = get_media_from_message(message)
if media:
return FileId.decode(media.file_id)
async def parse_file_unique_id(message: "Messages") -> Optional[str]:
media = get_media_from_message(message)
if media:
return media.file_unique_id
async def get_file_ids(client: Client, chat_id, message_id) -> Optional[FileId]:
message = await client.get_messages(chat_id, int(message_id))
if message.empty:
raise Exception("FileNotFound")
media = get_media_from_message(message)
file_unique_id = await parse_file_unique_id(message)
file_id = await parse_file_id(message)
setattr(file_id, "file_size", getattr(media, "file_size", 0))
setattr(file_id, "mime_type", getattr(media, "mime_type", ""))
setattr(file_id, "file_name", getattr(media, "file_name", ""))
setattr(file_id, "unique_id", file_unique_id)
return file_id
def get_media_from_message(message: "Message") -> Any:
media_types = (
"audio",
"document",
"photo",
"sticker",
"animation",
"video",
"voice",
"video_note",
)
for attr in media_types:
media = getattr(message, attr, None)
if media:
return media
def get_name(media_msg: Union[Message, FileId]) -> str:
if isinstance(media_msg, Message):
media = get_media_from_message(media_msg)
file_name = getattr(media, "file_name", "")
elif isinstance(media_msg, FileId):
file_name = getattr(media_msg, "file_name", "")
if not file_name:
if isinstance(media_msg, Message) and media_msg.media:
media_type = media_msg.media.value
elif media_msg.file_type:
media_type = media_msg.file_type.name.lower()
else:
media_type = "file"
formats = {
"photo": "jpg",
"audio": "mp3",
"voice": "ogg",
"video": "mp4",
"animation": "mp4",
"video_note": "mp4",
"sticker": "webp",
}
ext = formats.get(media_type)
ext = "." + ext if ext else ""
date = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
file_name = f"{media_type}-{date}{ext}"
return file_name