Commit 874d49e
Changed files (1)
src
others
src/others/favorite.py
@@ -1,6 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import contextlib
+import re
from loguru import logger
from pyrogram.client import Client
@@ -11,7 +12,7 @@ from database.r2 import get_cf_r2, set_cf_r2
from messages.parser import parse_msg
from messages.sender import send2tg
from messages.utils import equal_prefix, set_reaction, startswith_prefix
-from utils import strings_list, to_int
+from utils import slim_cid, strings_list, to_int
HELP = f"""⭐️**收藏消息**
- `{FAVORITE.SAVE_PREFIX} keyword` : 保存消息为"keyword"到收藏夹
@@ -46,31 +47,50 @@ async def save_favorite(client: Client, message: Message, **kwargs):
keyword = info["text"].removeprefix(FAVORITE.SAVE_PREFIX).strip()
is_force_save = keyword.startswith(("!", "!")) # noqa: RUF001
keyword = keyword.removeprefix("!").removeprefix("!") # noqa: RUF001
+ msg_to_save = message.reply_to_message
+
+ # custom chat_id and message_id
+ if "cid=" in keyword and "mid=" in keyword:
+ cid = msg_to_save.chat.id
+ mid = msg_to_save.id
+ if matched := re.search(r"cid=(-?\w+)", keyword, re.IGNORECASE):
+ cid = to_int(matched.group(1))
+ keyword = re.sub(r"cid=(-?\w+)", "", keyword).strip()
+ if matched := re.search(r"mid=(\d+)", keyword, re.IGNORECASE):
+ mid = to_int(matched.group(1))
+ keyword = re.sub(r"mid=(\d+)", "", keyword).strip()
+ msg: Message = await client.get_messages(cid, mid) # type: ignore
+ if isinstance(msg, Message):
+ msg_to_save = msg
+ else:
+ await send2tg(client, message, texts=f"❌获取此消息失败, 可能是消息已被删除或者无访问权限.\nChatID={cid}, MessageID={mid}", **kwargs)
+ return
+
if not keyword:
return
- if keyword.lower() in PRESERVED_KEYS:
- await message.reply(f"【{keyword}】为保留关键字, 请使用其他关键词", quote=True)
- return
keywords = strings_list(keyword.replace(",", ",")) # noqa: RUF001
# check if key is existed
for key in keywords:
if not is_force_save and await get_cf_r2(FAVORITE.R2_PREFIX + key):
await send2tg(client, message, texts=f"⚠️【{key}】已存在\n🔄请使用以下命令覆盖收藏:\n`{FAVORITE.SAVE_PREFIX}! {keyword}`", **kwargs)
return
+ if key.lower() in PRESERVED_KEYS:
+ await message.reply(f"【{key}】为保留关键字, 请使用其他关键词", quote=True)
+ return
# forward message to backup chat
- reply_msg = message.reply_to_message
- if reply_msg.media_group_id:
- messages = await client.get_media_group(reply_msg.chat.id, reply_msg.id)
+ if msg_to_save.media_group_id:
+ messages = await client.get_media_group(msg_to_save.chat.id, msg_to_save.id)
save_msgs: list[Message] = await client.forward_messages(
chat_id=to_int(FAVORITE.BACKUP_CHAT),
- from_chat_id=reply_msg.chat.id,
+ from_chat_id=msg_to_save.chat.id,
message_ids=[m.id for m in messages],
) # type: ignore
save_msg = save_msgs[0]
else:
- save_msg: Message = await reply_msg.forward(to_int(FAVORITE.BACKUP_CHAT)) # type: ignore
- await save_msg.reply(" ".join([f"#{key}" for key in keywords]), quote=True)
+ save_msg: Message = await msg_to_save.forward(to_int(FAVORITE.BACKUP_CHAT)) # type: ignore
+ metainfo = " ".join([f"#{key}" for key in keywords]) + f"\nhttps://t.me/c/{slim_cid(msg_to_save.chat.id)}/{msg_to_save.id}"
+ await save_msg.reply(metainfo, quote=True)
save_info = parse_msg(save_msg, silent=True, use_cache=False)
# only allow standard type
keys_to_remove = []