diff --git a/copy_sticker_set/DES.md b/copy_sticker_set/DES.md
index b526608..6e619b2 100644
--- a/copy_sticker_set/DES.md
+++ b/copy_sticker_set/DES.md
@@ -1 +1 @@
-copy_sticker_set 复制整个贴纸包
\ No newline at end of file
+copy_sticker_set 复制一个/多个贴纸包到一个贴纸包
diff --git a/copy_sticker_set/main.py b/copy_sticker_set/main.py
index 8c27c8b..3bff680 100644
--- a/copy_sticker_set/main.py
+++ b/copy_sticker_set/main.py
@@ -1,3 +1,5 @@
+from typing import List
+
from pyrogram.raw.functions.messages import GetStickerSet
from pyrogram.raw.functions.stickers import CreateStickerSet
from pyrogram.raw.types import (
@@ -49,49 +51,56 @@ async def create_sticker_set(
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
- ]
+async def process_old_sticker_set(sticker_sets: List[str]):
+ is_animated = False
+ is_video = False
+ stickers = []
+ for idx, sticker_set in enumerate(sticker_sets):
+ pack: StickerSet = await get_pack(sticker_set)
+ if idx == 0:
+ is_animated = pack.set.animated
+ is_video = pack.set.videos
+ else:
+ if pack.set.animated != is_animated:
+ raise NoStickerSetNameError("贴纸包类型不一致")
+ if pack.set.videos != is_video:
+ raise NoStickerSetNameError("贴纸包类型不一致")
+ 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
+ ]
+ if len(stickers) + len(_stickers) > 120:
+ raise NoStickerSetNameError("贴纸包过多")
+ stickers.extend(_stickers)
return stickers, is_animated, is_video
@listener(
command="copy_sticker_set",
- parameters="贴纸包链接 贴纸包名称",
+ parameters="旧的贴纸包用户名1,旧的贴纸包用户名2 贴纸包用户名 贴纸包名称",
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:
+ if len(message.parameter) < 3:
return await message.edit(
- "请指定贴纸包链接和贴纸包名称,例如 xxxx_sticker xxxx 的贴纸包
"
+ "请指定贴纸包链接和贴纸包名称,例如 xxx xxxx_sticker xxxx 的贴纸包
"
)
- set_name = message.parameter[0]
- name = " ".join(message.parameter[1:])
+ old_set_names = message.parameter[0].split(",")
+ set_name = message.parameter[1]
+ name = " ".join(message.parameter[2:])
try:
- stickers, is_animated, is_video = await process_old_sticker_set(sticker_set)
+ stickers, is_animated, is_video = await process_old_sticker_set(old_set_names)
await create_sticker_set(set_name, name, is_animated, is_video, stickers)
except Exception as e:
return await message.edit(f"复制贴纸包失败:{e}")