from pyrogram.raw.functions.messages import GetStickerSet
from pyrogram.raw.functions.stickers import CreateStickerSet
from pyrogram.raw.types import (
InputStickerSetShortName,
InputStickerSetItem,
InputDocument,
)
from pyrogram.raw.types.messages import StickerSet
from pagermaid.listener import listener
from pagermaid.services import bot
from pagermaid.enums import Message
class NoStickerSetNameError(Exception):
"""
Occurs when no username is provided
"""
def __init__(self, string: str = "贴纸包不存在"):
super().__init__(string)
async def get_pack(name: str):
try:
return await bot.invoke(
GetStickerSet(stickerset=InputStickerSetShortName(short_name=name), hash=0)
)
except Exception as e: # noqa
raise NoStickerSetNameError() from e
async def create_sticker_set(
sticker_set: str, title: str, is_animated: bool, is_video: bool, stickers
):
try:
await bot.invoke(
CreateStickerSet(
user_id=await bot.resolve_peer((await bot.get_me()).id),
title=title,
short_name=sticker_set,
stickers=stickers,
animated=is_animated,
videos=is_video,
software="pagermaid-pyro",
)
)
except Exception as e:
raise NoStickerSetNameError("贴纸包名称或者链接非法或者已被占用,请换一个") from e
async def process_old_sticker_set(sticker_set: str):
pack: StickerSet = await get_pack(sticker_set)
is_animated = pack.set.animated
is_video = pack.set.videos
hash_map = {}
for i in pack.packs:
for j in i.documents:
hash_map[j] = i.emoticon
stickers = [
InputStickerSetItem(
document=InputDocument(
id=i.id,
access_hash=i.access_hash,
file_reference=i.file_reference,
),
emoji=hash_map.get(i.id, "👀"),
)
for i in pack.documents
]
return stickers, is_animated, is_video
@listener(
command="copy_sticker_set",
parameters="贴纸包链接 贴纸包名称",
description="复制某个贴纸包",
)
async def copy_sticker_set(message: Message):
if (
(not message.reply_to_message)
or (not message.reply_to_message.sticker)
or (not message.reply_to_message.sticker.set_name)
):
return await message.edit("请先回复一张需要复制的贴纸包的贴纸")
sticker_set = message.reply_to_message.sticker.set_name
if len(message.parameter) < 2:
return await message.edit(
"请指定贴纸包链接和贴纸包名称,例如 xxxx_sticker xxxx 的贴纸包
"
)
set_name = message.parameter[0]
name = " ".join(message.parameter[1:])
try:
stickers, is_animated, is_video = await process_old_sticker_set(sticker_set)
await create_sticker_set(set_name, name, is_animated, is_video, stickers)
except Exception as e:
return await message.edit(f"复制贴纸包失败:{e}")
await message.edit(
f'复制贴纸包成功 {name}'
)