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}' )