From f281cc98b240048924608f46e8fe08c2b980c9bd Mon Sep 17 00:00:00 2001 From: AAA <35992542+TNTcraftHIM@users.noreply.github.com> Date: Sun, 11 Oct 2020 19:00:49 +0800 Subject: [PATCH] =?UTF-8?q?stickertopic=E6=8F=92=E4=BB=B6=EF=BC=88?= =?UTF-8?q?=E8=B4=B4=E7=BA=B8=E8=BD=AC=E5=9B=BE=E7=89=87=EF=BC=89=E5=86=99?= =?UTF-8?q?=E5=A5=BD=E4=BA=86=20(#61)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: TNTcraftHIM --- list.json | 10 +++++ stickertopic.py | 110 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 stickertopic.py diff --git a/list.json b/list.json index c740922..0fc5cb9 100644 --- a/list.json +++ b/list.json @@ -319,6 +319,16 @@ "supported": true, "des-short": "光速发Aff信息", "des": "在别人要打算买机场的时候光速发出提前准备好的Aff信息与链接~ (尽量用短链接哦)。命令:aff。" + }, + { + "name": "stickertopic", + "version": "1.0", + "section": "chat", + "maintainer": "TNTcraftHIM", + "size": "3.6 kb", + "supported": true, + "des-short": "贴纸转图片", + "des": "把别人发的贴纸转换成图片(只支持静态)。命令:pic。" } ] } diff --git a/stickertopic.py b/stickertopic.py new file mode 100644 index 0000000..8715d15 --- /dev/null +++ b/stickertopic.py @@ -0,0 +1,110 @@ +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