Commit 55eec40
Changed files (5)
src
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: