Spaces:
Running
Running
#Thanks @DeletedFromEarth for helping in this journey | |
from pyrogram import Client | |
from typing import Any, Optional | |
from pyrogram.types import Message | |
from pyrogram.file_id import FileId | |
from pyrogram.raw.types.messages import Messages | |
from server.exceptions import FIleNotFound | |
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: int, id: int) -> Optional[FileId]: | |
message = await client.get_messages(chat_id, id) | |
if message.empty: | |
raise 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_hash(media_msg: Message) -> str: | |
media = get_media_from_message(media_msg) | |
return getattr(media, "file_unique_id", "")[:6] | |
def get_name(media_msg: Message) -> str: | |
media = get_media_from_message(media_msg) | |
return getattr(media, 'file_name', "") | |
def get_media_file_size(m): | |
media = get_media_from_message(m) | |
return getattr(media, "file_size", 0) | |