copy_sticker_set 复制整个贴纸包

This commit is contained in:
xtaodada 2022-12-15 20:29:52 +08:00
parent 229316755c
commit 647fe560fe
Signed by: xtaodada
GPG Key ID: 4CBB3F4FA8C85659

89
copy_sticker_set/main.py Normal file
View File

@ -0,0 +1,89 @@
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("请指定贴纸包链接和贴纸包名称,例如 <code>xxxx_sticker xxxx 的贴纸包</code>")
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"复制贴纸包成功 <a href=\"https://t.me/addstickers/{set_name}\">{name}</a>")