mirror of
https://github.com/yasirarism/MissKatyPyro.git
synced 2025-12-29 17:44:50 +00:00
* Update ban_user_or_chat.py * Update ban_user_or_chat.py * Update ban_user_or_chat.py * Update ban_user_or_chat.py * Update ban_user_or_chat.py * Update ban_user_or_chat.py * Update ban_user_or_chat.py * Fix memify for pillow v10
180 lines
5.7 KiB
Python
180 lines
5.7 KiB
Python
import textwrap
|
|
from asyncio import gather
|
|
from os import remove as hapus
|
|
|
|
from PIL import Image, ImageDraw, ImageFont
|
|
from pyrogram import filters
|
|
|
|
from misskaty import app
|
|
from misskaty.core.decorator.errors import capture_err
|
|
from misskaty.core.decorator.ratelimiter import ratelimiter
|
|
from misskaty.helper.localization import use_chat_lang
|
|
from misskaty.vars import COMMAND_HANDLER
|
|
|
|
|
|
async def draw_meme_text(image_path, text):
|
|
img = Image.open(image_path)
|
|
hapus(image_path)
|
|
i_width, i_height = img.size
|
|
m_font = ImageFont.truetype(
|
|
"assets/MutantAcademyStyle.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):
|
|
u_width, u_height = draw.getbbox(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),
|
|
stroke_width=3,
|
|
stroke_fill="black",
|
|
)
|
|
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),
|
|
stroke_width=3,
|
|
stroke_fill="black",
|
|
)
|
|
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),
|
|
stroke_width=3,
|
|
stroke_fill="black",
|
|
)
|
|
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),
|
|
stroke_width=3,
|
|
stroke_fill="black",
|
|
)
|
|
|
|
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(lower_text, width=15):
|
|
u_width, u_height = draw.getbbox(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),
|
|
stroke_width=3,
|
|
stroke_fill="black",
|
|
)
|
|
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),
|
|
stroke_width=3,
|
|
stroke_fill="black",
|
|
)
|
|
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),
|
|
stroke_width=3,
|
|
stroke_fill="black",
|
|
)
|
|
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),
|
|
stroke_width=3,
|
|
stroke_fill="black",
|
|
)
|
|
|
|
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),
|
|
stroke_width=3,
|
|
stroke_fill="black",
|
|
)
|
|
current_h += u_height + pad
|
|
|
|
webp_file = "misskatyfy.webp"
|
|
png_file = "misskatyfy.png"
|
|
new_size = (512, 512)
|
|
img.resize(new_size)
|
|
img.save(webp_file, "WebP")
|
|
img.save(png_file, "PNG")
|
|
img.close()
|
|
return webp_file, png_file
|
|
|
|
|
|
@app.on_message(filters.command(["mmf"], COMMAND_HANDLER))
|
|
@capture_err
|
|
@ratelimiter
|
|
async def memify(client, message):
|
|
if message.reply_to_message and (
|
|
message.reply_to_message.sticker or message.reply_to_message.photo
|
|
):
|
|
try:
|
|
file = await message.reply_to_message.download()
|
|
webp, png = await draw_meme_text(
|
|
file, message.text.split(None, 1)[1].strip()
|
|
)
|
|
await gather(*[message.reply_document(png), message.reply_sticker(webp)])
|
|
try:
|
|
hapus(webp)
|
|
hapus(png)
|
|
except:
|
|
pass
|
|
except Exception as err:
|
|
try:
|
|
hapus(webp)
|
|
hapus(png)
|
|
except:
|
|
pass
|
|
await message.reply_msg(f"ERROR: {err}")
|
|
else:
|
|
await message.reply_msg(
|
|
"Gunakan command <b>/mmf <text></b> dengan reply ke sticker, pisahkan dengan ; untuk membuat posisi text dibawah."
|
|
)
|
|
|
|
|
|
@app.on_message(filters.command(["dice"], COMMAND_HANDLER))
|
|
@use_chat_lang()
|
|
async def dice(c, m, strings):
|
|
dices = await c.send_dice(m.chat.id, reply_to_message_id=m.id)
|
|
await dices.reply_msg(strings("result").format(number=dices.dice.value), quote=True)
|