PagerMaid_Plugins/stickertopic.py

111 lines
3.6 KiB
Python
Raw Normal View History

from time import sleep
from os import remove
from urllib import request
from io import BytesIO
from telethon.tl.types import DocumentAttributeFilename, MessageMediaPhoto
from PIL import Image
from math import floor
from pagermaid import bot
from pagermaid.listener import listener
from random import random
@listener(outgoing=True, command="pic",
description="将你回复的静态贴纸转换为图片")
async def stickertopic(context):
user = await bot.get_me()
if not user.username:
user.username = user.first_name
message = await context.get_reply_message()
custom_emoji = False
animated = False
await context.edit("开始转换...\n███30%")
if message and message.media:
if isinstance(message.media, MessageMediaPhoto):
photo = BytesIO()
photo = await bot.download_media(message.photo, photo)
elif "image" in message.media.document.mime_type.split('/'):
photo = BytesIO()
await context.edit("正在转换...\n██████60%")
await bot.download_file(message.media.document, photo)
if (DocumentAttributeFilename(file_name='sticker.webp') in
message.media.document.attributes):
custom_emoji = True
elif (DocumentAttributeFilename(file_name='AnimatedSticker.tgs') in
message.media.document.attributes):
photo = BytesIO()
await bot.download_file(message.media.document, "AnimatedSticker.tgs")
for _ in range(len(message.media.document.attributes)):
try:
break
except:
pass
custom_emoji = True
animated = True
photo = 1
else:
await context.edit("出错了呜呜呜 ~ 目标不是贴纸 。")
sleep(2)
await context.delete()
return
else:
await context.edit("出错了呜呜呜 ~ 目标不是贴纸 。")
sleep(2)
await context.delete()
return
if photo:
if not custom_emoji:
await context.edit("出错了呜呜呜 ~ 目标不是贴纸 。")
sleep(2)
await context.delete()
return
if not animated:
await context.edit("正在转换...\n█████████90%")
image = await resize_image(photo)
filename = "sticker"+str(random())+".png"
image.save(filename, "PNG")
else:
await context.edit("出错了呜呜呜 ~ 目标不是**静态**贴纸 。")
sleep(2)
await context.delete()
return
await context.edit("正在上传...\n██████████99%")
await bot.send_file(context.chat_id,filename)
try:
await context.delete()
except:
pass
try:
remove(filename)
except:
pass
try:
remove("AnimatedSticker.tgs")
except:
pass
async def resize_image(photo):
image = Image.open(photo)
maxsize = (512, 512)
if (image.width and image.height) < 512:
size1 = image.width
size2 = image.height
if image.width > image.height:
scale = 512 / size1
size1new = 512
size2new = size2 * scale
else:
scale = 512 / size2
size1new = size1 * scale
size2new = 512
size1new = floor(size1new)
size2new = floor(size2new)
size_new = (size1new, size2new)
image = image.resize(size_new)
else:
image.thumbnail(maxsize)
return image