Spaces:
Sleeping
Sleeping
| 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 | |