|
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, |
|
) |