import asyncio import math import os import shlex import textwrap from typing import List, Tuple from PIL import Image, ImageDraw, ImageFont from pyrogram import errors, raw from pyrogram.file_id import FileId from Powers.bot_class import Gojo async def get_sticker_set_by_name( client: Gojo, name: str ) -> raw.base.messages.StickerSet: try: return await client.invoke( raw.functions.messages.GetStickerSet( stickerset=raw.types.InputStickerSetShortName(short_name=name), hash=0, ) ) except errors.exceptions.not_acceptable_406.StickersetInvalid: return None async def create_sticker_set( client: Gojo, owner: int, title: str, short_name: str, stickers: List[raw.base.InputStickerSetItem], animated:bool=False, video:bool=False ) -> raw.base.messages.StickerSet: return await client.invoke( raw.functions.stickers.CreateStickerSet( user_id=await client.resolve_peer(owner), title=title, short_name=short_name, stickers=stickers, animated=animated, videos=video ) ) async def add_sticker_to_set( client: Gojo, stickerset: raw.base.messages.StickerSet, sticker: raw.base.InputStickerSetItem, ) -> raw.base.messages.StickerSet: return await client.invoke( raw.functions.stickers.AddStickerToSet( stickerset=raw.types.InputStickerSetShortName( short_name=stickerset.set.short_name ), sticker=sticker, ) ) async def create_sticker( sticker: raw.base.InputDocument, emoji: str ) -> raw.base.InputStickerSetItem: return raw.types.InputStickerSetItem(document=sticker, emoji=emoji) STICKER_DIMENSIONS = (512, 512) async def resize_file_to_sticker_size(file_path: str,length:int=512,width:int=512) -> 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 = length / size1 size1new = length size2new = size2 * scale else: scale = width / size2 size1new = size1 * scale size2new = width size1new = math.floor(size1new) size2new = math.floor(size2new) sizenew = (size1new, size2new) im = im.resize(sizenew) else: im.thumbnail(STICKER_DIMENSIONS) file_pathh = "./downloads/resized.png" im.save(file_pathh) os.remove(file_path) return file_pathh async def upload_document( client: Gojo, 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) ) ], force_file=True, ), ) ) 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, ) async def draw_meme(image_path: str, text: str, sticker: bool, fiill: str) -> list: _split = text.split(";", 1) if len(_split) == 2: lower_text = _split[1] upper_text = _split[0] else: upper_text = text lower_text = "" image = Image.open(image_path) width, height = image.size font_size = int(width / 11) font = ImageFont.truetype("./extras/comic.ttf", font_size) draw = ImageDraw.Draw(image) upper_text_width, _ = draw.textsize(upper_text, font=font) lower_text_width, lower_text_height = draw.textsize(lower_text, font=font) upper_text_position = ((width - upper_text_width) // 2, height // 10) lower_text_position = ((width - lower_text_width) // 2, height - lower_text_height - (height // 10)) draw.text(upper_text_position, upper_text, font=font, fill=fiill) draw.text(lower_text_position, lower_text, font=font, fill=fiill) if sticker: stick_path = image_path else: stick_path = await resize_file_to_sticker_size(image_path) image1 = image_path image2 = tosticker(stick_path,"@memesofdank_memer_hu_vai.webp") image.save(image1) image.save(image2) image.close() return [image1, image2] # async def draw_meme(image_path, text:str,stick): # """Hellbot se churaya hai hue hue hue...""" # img = Image.open(image_path) # i_width, i_height = img.size # m_font = ImageFont.truetype( # "./extras/comic.ttf", int((70 / 640) * i_width) # ) # if ";" in text: # upper_text, lower_text = text.split(";") # else: # upper_text = text # lower_text = "" # draw = ImageDraw.Draw(img) # current_h, pad = 10, 5 # if upper_text: # for u_text in textwrap.wrap(upper_text,width=15,subsequent_indent=" "): # u_width, u_height = draw.textsize(u_text, font=m_font) # draw.text( # xy=(((i_width - u_width) / 2) - 1, int((current_h / 640) * i_width)), # text=u_text, # font=m_font, # fill=(0, 0, 0), # ) # draw.text( # xy=(((i_width - u_width) / 2) + 1, int((current_h / 640) * i_width)), # text=u_text, # font=m_font, # fill=(0, 0, 0), # ) # draw.text( # xy=((i_width - u_width) / 2, int(((current_h / 640) * i_width)) - 1), # text=u_text, # font=m_font, # fill=(0, 0, 0), # ) # draw.text( # xy=(((i_width - u_width) / 2), int(((current_h / 640) * i_width)) + 1), # text=u_text, # font=m_font, # fill=(0, 0, 0), # ) # draw.text( # xy=((i_width - u_width) / 2, int((current_h / 640) * i_width)), # text=u_text, # font=m_font, # fill=(255, 255, 255), # ) # current_h += u_height + pad # if lower_text: # for l_text in textwrap.wrap(upper_text,width=15,subsequent_indent=" "): # u_width, u_height = draw.textsize(l_text, font=m_font) # draw.text( # xy=( # ((i_width - u_width) / 2) - 1, # i_height - u_height - int((20 / 640) * i_width), # ), # text=l_text, # font=m_font, # fill=(0, 0, 0), # ) # draw.text( # xy=( # ((i_width - u_width) / 2) + 1, # i_height - u_height - int((20 / 640) * i_width), # ), # text=l_text, # font=m_font, # fill=(0, 0, 0), # ) # draw.text( # xy=( # (i_width - u_width) / 2, # (i_height - u_height - int((20 / 640) * i_width)) - 1, # ), # text=l_text, # font=m_font, # fill=(0, 0, 0), # ) # draw.text( # xy=( # (i_width - u_width) / 2, # (i_height - u_height - int((20 / 640) * i_width)) + 1, # ), # text=l_text, # font=m_font, # fill=(0, 0, 0), # ) # draw.text( # xy=( # (i_width - u_width) / 2, # i_height - u_height - int((20 / 640) * i_width), # ), # text=l_text, # font=m_font, # fill=(255, 255, 255), # ) # current_h += u_height + pad # hue = image_path # if stick: # stick_path = image_path # else: # stick_path = await resize_file_to_sticker_size(hue) # mee = tosticker(stick_path,"@memesofdank_memer_hu_vai.webp") # img.save(hue) # img.save(mee) # return hue, mee def toimage(image, filename=None, is_direc=False): filename = filename if filename else "gojo.jpg" if is_direc: os.rename(image,filename) return filename img = Image.open(image) if img.mode != "RGB": img = img.convert("RGB") img.save(filename, "jpeg") os.remove(image) return filename def tosticker(response, filename=None, is_direc=False): filename = filename if filename else "gojo.webp" if is_direc: os.rename(response,filename) return filename image = Image.open(response) if image.mode != "RGB": image.convert("RGB") image.save(filename, "webp") os.remove(response) return filename