PagerMaid_Plugins/getstickerset.py

104 lines
4.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from telethon.errors import StickersetInvalidError
from telethon.tl.custom.message import Message
from telethon.tl.functions.messages import GetStickerSetRequest
from telethon.tl.functions.upload import GetFileRequest
from telethon.tl.types import DocumentAttributeFilename, InputStickerSetEmpty, InputStickerSetID, StickerSet, \
InputStickerSetThumb, MessageMediaPhoto
from PIL import Image
from pytz import timezone
from pagermaid import bot
from pagermaid.listener import listener
from pagermaid.utils import alias_command
@listener(is_plugin=True, outgoing=True, command=alias_command("getstickerset"),
description="获取所回复贴纸的贴纸包信息。")
async def get_sticker_set(context: Message):
""" get sticker set """
reply = await context.get_reply_message()
if not reply:
await context.edit('出错了呜呜呜 ~ 没有回复贴纸消息。')
return
if not reply.media:
await context.edit('出错了呜呜呜 ~ 没有回复贴纸消息。')
return
if isinstance(reply.media, MessageMediaPhoto):
await context.edit('出错了呜呜呜 ~ 没有回复贴纸消息。')
return
elif "image" in reply.media.document.mime_type.split('/'):
if (DocumentAttributeFilename(file_name='sticker.webp') not in
reply.media.document.attributes):
await context.edit('出错了呜呜呜 ~ 没有回复贴纸消息。')
return
elif (DocumentAttributeFilename(file_name='AnimatedSticker.tgs') in
reply.media.document.attributes):
pass
else:
await context.edit('出错了呜呜呜 ~ 没有回复贴纸消息。')
return
sticker_set = reply.media.document.attributes[1].stickerset
if isinstance(sticker_set, InputStickerSetEmpty):
await context.edit('出错了呜呜呜 ~ 您回复的贴纸不包含任何贴纸包信息。')
return
await context.edit('获取中。。。')
try:
stickers = await context.client(GetStickerSetRequest(
stickerset=InputStickerSetID(id=sticker_set.id, access_hash=sticker_set.access_hash)))
except StickersetInvalidError:
await context.edit('出错了呜呜呜 ~ 您回复的贴纸不包含任何贴纸包信息。')
return
stickers_set = stickers.set
# 再次判断变量类型
if not isinstance(stickers_set, StickerSet):
await context.edit('出错了呜呜呜 ~ 您回复的贴纸不包含任何贴纸包信息。')
return
# 初始化变量
sid = sticker_set.id
access_hash = sticker_set.access_hash
thumb_version = stickers_set.thumb_version
official = '' if stickers_set.official else ''
animated = '(动态)' if stickers_set.animated else ''
archived = '💤' if stickers_set.archived else ''
time_zone = timezone('Etc/GMT-8')
installed_date = stickers_set.installed_date.astimezone(time_zone).strftime('%Y-%m-%d %H:%M:%S') if \
stickers_set.installed_date else '未添加'
# 下载预览图
file = None
if thumb_version:
thumb = await bot(GetFileRequest(location=InputStickerSetThumb(
stickerset=InputStickerSetID(id=sid, access_hash=access_hash),
thumb_version=thumb_version), offset=-1, limit=1048576, precise=False, cdn_supported=True))
with open('data/sticker_thumb.jpg', 'wb') as f:
f.write(thumb.bytes)
file = 'data/sticker_thumb.jpg'
else:
if not stickers_set.animated:
await bot.download_media(stickers.documents[0], file='data/sticker_thumb.webp')
convert_png('data/sticker_thumb.webp')
file = 'data/sticker_thumb.png'
text = f'贴纸包:{official}[{stickers_set.title}](https://t.me/addstickers/{stickers_set.short_name}) {animated}' \
f'{archived}\n' \
f'贴纸数:`{stickers_set.count}`\n' \
f'添加时间:`{installed_date}`\n' \
f'id`{sid}`\n' \
f'access_hash: `{access_hash}`'
if file:
await context.client.send_file(
context.chat_id,
file,
caption=text,
force_document=False,
allow_cache=False
)
await context.delete()
else:
await context.edit(text)
def convert_png(path):
im = Image.open(path)
im = im.convert('RGBA')
new_path = path.replace(".webp", ".png")
im.save(new_path, 'PNG')
return new_path