Spaces:
Running
Running
import math | |
import os | |
from PIL import Image | |
from pyrogram import Client, raw | |
from pyrogram.file_id import FileId | |
# ------------------ | |
STICKER_DIMENSIONS = (512, 512) | |
# ------------------- | |
async def resize_file_to_sticker_size(file_path: str) -> str: | |
im = Image.open(file_path) | |
if (im.width, im.height) < STICKER_DIMENSIONS: | |
size1 = im.width | |
size2 = im.height | |
if im.width > im.height: | |
scale = STICKER_DIMENSIONS[0] / size1 | |
size1new = STICKER_DIMENSIONS[0] | |
size2new = size2 * scale | |
else: | |
scale = STICKER_DIMENSIONS[1] / size2 | |
size1new = size1 * scale | |
size2new = STICKER_DIMENSIONS[1] | |
size1new = math.floor(size1new) | |
size2new = math.floor(size2new) | |
sizenew = (size1new, size2new) | |
im = im.resize(sizenew) | |
else: | |
im.thumbnail(STICKER_DIMENSIONS) | |
try: | |
os.remove(file_path) | |
file_path = f"{file_path}.png" | |
return file_path | |
finally: | |
im.save(file_path) | |
async def upload_document( | |
client: Client, file_path: str, chat_id: int | |
) -> raw.base.InputDocument: | |
media = await client.invoke( | |
raw.functions.messages.UploadMedia( | |
peer=await client.resolve_peer(chat_id), | |
media=raw.types.InputMediaUploadedDocument( | |
mime_type=client.guess_mime_type(file_path) | |
or "application/zip", | |
file=await client.save_file(file_path), | |
attributes=[ | |
raw.types.DocumentAttributeFilename( | |
file_name=os.path.basename(file_path) | |
) | |
], | |
), | |
) | |
) | |
return raw.types.InputDocument( | |
id=media.document.id, | |
access_hash=media.document.access_hash, | |
file_reference=media.document.file_reference, | |
) | |
async def get_document_from_file_id( | |
file_id: str, | |
) -> raw.base.InputDocument: | |
decoded = FileId.decode(file_id) | |
return raw.types.InputDocument( | |
id=decoded.media_id, | |
access_hash=decoded.access_hash, | |
file_reference=decoded.file_reference, | |
) |