From 535960b8ae139157a3d99a62f2247c54de65294a Mon Sep 17 00:00:00 2001 From: grassblock Date: Thu, 31 Jul 2025 18:06:03 +0800 Subject: [PATCH] fix: more flexible link handling --- adapters/tg.py | 2 +- core/link.py | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/adapters/tg.py b/adapters/tg.py index bf4c6b4..20b3502 100644 --- a/adapters/tg.py +++ b/adapters/tg.py @@ -54,7 +54,7 @@ class TelegramAdapter: router.message(F.text.startswith('\\'))(handle_reverse_actions) router.message(F.text == '我是笨蛋')(handle_baka) # link 模块 - router.message(F.text.regexp(r'https?:\/\/(?:www\.)?([-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b)*(\/[\/\d\w\.-]*)*(?:[\?])*(.+)*'))(handle_links) + router.message(F.text.contains('http'))(handle_links) # repeater 模块 router.message(F.chat.type.in_({'group', 'supergroup'}))(MessageRepeater().handle_message) diff --git a/core/link.py b/core/link.py index 1b40d76..9dae7e9 100644 --- a/core/link.py +++ b/core/link.py @@ -165,21 +165,26 @@ async def process_url(url): else: # 对于其他链接,直接对其进行跟踪参数清理 final_url = remove_tracking_params(extended_url) - - return final_url - + if url != final_url: + return final_url + return None async def handle_links(message: Message): if not config.is_feature_enabled('link', message.chat.id): return # URL regex pattern url_pattern = r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+' - + text = message.text or message.caption # Extract URLs from message text - if message.text: - urls = re.findall(url_pattern, message.text) + if text: + urls = re.findall(url_pattern, text) + if not urls: + return final_urls = await asyncio.gather(*[process_url(url) for url in urls]) + # Filter out None values + final_urls = [url for url in final_urls if url is not None] + # 回复处理后的链接 if final_urls: await message.reply(f"{"\n".join(final_urls)}\n消息里有包含跟踪参数的链接,已经帮你转换了哦") \ No newline at end of file