Commit c4e977a

benny-dou <60535774+benny-dou@users.noreply.github.com>
2025-07-09 02:40:38
chore(favorite): add reaction emoji
1 parent 892056a
Changed files (2)
src
messages
others
src/messages/utils.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
-
+import contextlib
 import re
 
 from loguru import logger
@@ -8,7 +8,7 @@ from pyrogram.client import Client
 from pyrogram.enums import ParseMode
 from pyrogram.parser.markdown import BLOCKQUOTE_EXPANDABLE_DELIM, BLOCKQUOTE_EXPANDABLE_END_DELIM
 from pyrogram.parser.parser import Parser
-from pyrogram.types import Message, ReplyParameters
+from pyrogram.types import Message, ReactionTypeEmoji, ReplyParameters
 
 from config import TEXT_LENGTH
 from utils import myself, readable_size, to_int
@@ -219,3 +219,12 @@ async def sent_from_me(client: Client, message: Message) -> bool:
         logger.error(e)
         return False
     return me.id == uid
+
+
+async def set_reaction(client: Client, message: Message, reaction: str | list[str] = ""):
+    with contextlib.suppress(Exception):
+        if reaction:
+            emojis = [ReactionTypeEmoji(emoji=reaction)] if isinstance(reaction, str) else [ReactionTypeEmoji(emoji=x) for x in reaction]
+            await client.set_reaction(message.chat.id, message.id, reaction=emojis)  # type: ignore
+        else:
+            await client.set_reaction(message.chat.id, message.id)
src/others/favorite.py
@@ -10,7 +10,7 @@ from config import DB, FAVORITE
 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, startswith_prefix
+from messages.utils import equal_prefix, set_reaction, startswith_prefix
 from utils import strings_list, to_int
 
 HELP = f"""⭐️**收藏消息**
@@ -42,6 +42,7 @@ async def save_favorite(client: Client, message: Message, **kwargs):
         await message.reply("【保存收藏】功能缺失必要参数设置", quote=True)
         return
 
+    await set_reaction(client, message, reaction="👌")
     keyword = info["text"].removeprefix(FAVORITE.SAVE_PREFIX).strip()
     is_force_save = keyword.startswith(("!", "!"))  # noqa: RUF001
     keyword = keyword.removeprefix("!").removeprefix("!")  # noqa: RUF001
@@ -80,9 +81,11 @@ async def save_favorite(client: Client, message: Message, **kwargs):
     for key in keywords:
         if not await set_cf_r2(FAVORITE.R2_PREFIX + key, save_info, silent=True):
             logger.error(f"保存【{key}】到收藏失败")
+            await set_reaction(client, message, reaction="💔")
             return
         logger.success(f"【{key}】已保存到收藏")
     with contextlib.suppress(Exception):
+        await set_reaction(client, message, reaction="✍️")
         await message.delete()
 
 
@@ -109,23 +112,29 @@ async def send_favorite(client: Client, message: Message, **kwargs):
     if not keyword:
         return
 
+    await set_reaction(client, message, reaction="👌")
     save_key = f"{FAVORITE.R2_PREFIX}{keyword}"
     # check if key is existed
     save_info = await get_cf_r2(save_key)
     if not save_info:
         await send2tg(client, message, texts=f"【{keyword}】不存在", **kwargs)
+        await set_reaction(client, message, reaction="💔")
         return
     reply_message_id = message.reply_to_message.id if message.reply_to_message else None
     reply = ReplyParameters(message_id=reply_message_id)  # type: ignore
     if use_forward:
         if save_info.get("media_group_id"):
             messages = await client.get_media_group(save_info["cid"], save_info["mid"])
-            await client.forward_messages(chat_id=info["cid"], from_chat_id=save_info["cid"], message_ids=[m.id for m in messages])
+            succ = await client.forward_messages(chat_id=info["cid"], from_chat_id=save_info["cid"], message_ids=[m.id for m in messages])
         else:
-            await client.forward_messages(chat_id=info["cid"], from_chat_id=save_info["cid"], message_ids=save_info["mid"])
+            succ = await client.forward_messages(chat_id=info["cid"], from_chat_id=save_info["cid"], message_ids=save_info["mid"])
     elif save_info.get("media_group_id"):
-        await client.copy_media_group(chat_id=info["cid"], from_chat_id=save_info["cid"], message_id=save_info["mid"], reply_parameters=reply)
+        succ = await client.copy_media_group(chat_id=info["cid"], from_chat_id=save_info["cid"], message_id=save_info["mid"], reply_parameters=reply)
     else:
-        await client.copy_message(chat_id=info["cid"], from_chat_id=save_info["cid"], message_id=save_info["mid"], reply_parameters=reply)
+        succ = await client.copy_message(chat_id=info["cid"], from_chat_id=save_info["cid"], message_id=save_info["mid"], reply_parameters=reply)
+    if isinstance(succ, Message) or (isinstance(succ, list) and all(isinstance(s, Message) for s in succ)):
+        await set_reaction(client, message)
+    else:
+        await set_reaction(client, message, reaction="💔")
     with contextlib.suppress(Exception):
         await message.delete()