Commit 55eec40

benny-dou <60535774+benny-dou@users.noreply.github.com>
2025-01-24 08:33:30
refactor: extract `get_reply_to` function
1 parent 14bf7ae
src/others/download_external.py
@@ -8,10 +8,10 @@ from pathlib import Path
 import puremagic
 from loguru import logger
 from pyrogram.client import Client
-from pyrogram.types import Message, ReplyParameters
+from pyrogram.types import Message
 
 from config import ENABLE, MAX_FILE_BYTES, PREFIX
-from message_utils import equal_prefix, modify_progress, send2tg, startswith_prefix
+from message_utils import equal_prefix, get_reply_to, modify_progress, send2tg, startswith_prefix
 from multimedia import is_valid_video, validate_img
 from networking import download_file
 from utils import https_url, readable_size, to_int
@@ -42,13 +42,7 @@ async def download_url_in_message(client: Client, message: Message, **kwargs):
     target_chat = kwargs["target_chat"] if kwargs.get("target_chat") else message.chat.id
     target_chat = to_int(target_chat)
     reply_msg_id = kwargs.get("reply_msg_id", 0)
-    if reply_msg_id == 0:
-        reply_to = message.id
-    elif reply_msg_id == -1:
-        reply_to = None
-    else:
-        reply_to = reply_msg_id
-    reply_parameters = ReplyParameters(message_id=reply_to)  # type: ignore
+    reply_parameters = get_reply_to(message.id, reply_msg_id)
 
     regex = r"(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))"  # noqa: RUF001
     if matched := re.findall(regex, message.text):
src/others/extract_audio.py
@@ -4,10 +4,10 @@ from pathlib import Path
 
 from loguru import logger
 from pyrogram.client import Client
-from pyrogram.types import Message, ReplyParameters
+from pyrogram.types import Message
 
 from config import ENABLE, PREFIX, cache
-from message_utils import equal_prefix, modify_progress, parse_msg, send2tg, startswith_prefix
+from message_utils import equal_prefix, get_reply_to, modify_progress, parse_msg, send2tg, startswith_prefix
 from multimedia import convert_to_audio, parse_media_info
 from utils import to_int
 
@@ -65,13 +65,7 @@ async def extract_audio_file(client: Client, message: Message, **kwargs) -> None
 
     target_chat = kwargs["target_chat"] if kwargs.get("target_chat") else message.chat.id
     reply_msg_id = kwargs.get("reply_msg_id", 0)
-    if reply_msg_id == 0:
-        reply_to = message.id
-    elif reply_msg_id == -1:
-        reply_to = None
-    else:
-        reply_to = reply_msg_id
-    reply_parameters = ReplyParameters(message_id=reply_to)  # type: ignore
+    reply_parameters = get_reply_to(message.id, reply_msg_id)
     await client.send_audio(to_int(target_chat), Path(path).as_posix(), duration=duration, reply_parameters=reply_parameters)
     Path(video).unlink(missing_ok=True)
     path.unlink(missing_ok=True)
src/preview/twitter.py
@@ -127,10 +127,7 @@ async def preview_twitter(
     master_handle = master_info.get("handle", "")
     # 被回复主推
     if master_info:
-        if not (kwargs.get("target_chat") and kwargs.get("reply_msg_id") is None):
-            # 不是转发到其他chat, 并且不是回复给一条包含被解析链接的消息
-            msg += "🔗**该链接推文为主推下的一条跟推**\n"
-
+        msg += "🔗**该链接推文为主推下的一条跟推**\n"
         msg += "🕊**主推文内容:**"
         if author := master_info.get("author"):
             msg += f"\n🕊[{author}](https://x.com/{master_info['handle']}/status/{master_info['post_id']})"
src/preview/ytdlp.py
@@ -11,13 +11,13 @@ from pathlib import Path
 from bs4 import BeautifulSoup, MarkupResemblesLocatorWarning
 from loguru import logger
 from pyrogram.client import Client
-from pyrogram.types import Message, ReplyParameters
+from pyrogram.types import Message
 from yt_dlp import YoutubeDL
 from yt_dlp.utils import DownloadError, ExtractorError, YoutubeDLError
 
 from config import API, CAPTION_LENGTH, DB, DOWNLOAD_DIR, MAX_FILE_BYTES, PROVIDER, PROXY, TID, TOKEN, cache
 from database import get_db
-from message_utils import copy_messages_from_db, modify_progress, preprocess_media, save_messages, send2tg, telegram_uploading
+from message_utils import copy_messages_from_db, get_reply_to, modify_progress, preprocess_media, save_messages, send2tg, telegram_uploading
 from multimedia import generate_cover
 from networking import hx_req
 from others.emoji import emojify
@@ -192,6 +192,8 @@ async def preview_ytdlp(
     texts = texts.strip()
     sent_messages: list[Message | None] = []  # 把发送的消息都记录下来
     target_chat = kwargs["target_chat"] if kwargs.get("target_chat") else message.chat.id
+    reply_msg_id = kwargs.get("reply_msg_id", 0)
+    reply_parameters = get_reply_to(message.id, reply_msg_id)
     thumb = generate_cover(final_path)  # generate cover based on final_path
     if not Path(thumb).is_file():
         thumb = None
@@ -214,7 +216,7 @@ async def preview_ytdlp(
                 await client.send_video(
                     chat_id=to_int(target_chat),
                     caption=caption[:CAPTION_LENGTH],
-                    reply_parameters=ReplyParameters(message_id=kwargs.get("reply_msg_id", message.id)),
+                    reply_parameters=reply_parameters,
                     progress=telegram_uploading,
                     progress_args=(kwargs.get("progress", False), video["video"], true(kwargs.get("detail_progress"))),  # message, path, detail_progress
                     **video,
@@ -232,7 +234,7 @@ async def preview_ytdlp(
                 performer=author,
                 title=title,
                 duration=duration,
-                reply_parameters=ReplyParameters(message_id=kwargs.get("reply_msg_id", message.id)),
+                reply_parameters=reply_parameters,
                 progress=telegram_uploading,
                 progress_args=(kwargs.get("progress", False), audio_path, true(kwargs.get("detail_progress"))),  # message, path, detail_progress
                 thumb=thumb,  # type: ignore
src/message_utils.py
@@ -138,6 +138,16 @@ def equal_prefix(text: str | None = None, prefix: list[str] | None = None, ignor
     return bool(prefix and text.strip().lower() in prefix)
 
 
+def get_reply_to(msg_id: int, reply_msg_id: int | str) -> ReplyParameters:
+    if str(reply_msg_id) == "0":
+        reply_to = msg_id
+    elif str(reply_msg_id).lower() in ["-1", "none", "null", "false"]:
+        reply_to = None
+    else:
+        reply_to = to_int(reply_msg_id)
+    return ReplyParameters(message_id=reply_to)  # type: ignore
+
+
 def warp_media_group(media: list[dict], caption: str = "") -> list:
     """Warp media files into a list of InputMediaPhoto or InputMediaVideo objects.
 
@@ -300,13 +310,7 @@ async def send2tg(
     if not target_chat:
         target_chat = kwargs["target_chat"] if kwargs.get("target_chat") else message.chat.id
     target_chat = to_int(target_chat)
-    if str(reply_msg_id) == "0":
-        reply_to = message.id
-    elif str(reply_msg_id).lower() in ["-1", "none", "null", "false"]:
-        reply_to = None
-    else:
-        reply_to = to_int(reply_msg_id)
-    reply_parameters = ReplyParameters(message_id=reply_to)  # type: ignore
+    reply_parameters = get_reply_to(message.id, reply_msg_id)
     sent_messages: list[Message | None] = []  # save sent messages results
 
     if media is None: