From a216412ab61f3a9b0fe9ac724ff9559f33609bdf Mon Sep 17 00:00:00 2001 From: grassblock Date: Mon, 8 Sep 2025 16:47:27 +0800 Subject: [PATCH] fix: youtube mobile links processed by redirect --- core/link.py | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/core/link.py b/core/link.py index 07d43e6..ab95828 100644 --- a/core/link.py +++ b/core/link.py @@ -14,7 +14,7 @@ from config import config whitelist_param_links = ['www.iesdouyin.com','item.taobao.com', 'detail.tmall.com', 'h5.m.goofish.com', 'music.163.com', 'www.bilibili.com', 'm.bilibili.com', 'bilibili.com', 'mall.bilibili.com', 'space.bilibili.com', 'live.bilibili.com','item.m.jd.com','item.jd.com', - 'www.xiaohongshu.com','zhuanlan.zhihu.com','www.baidu.com','www.youtube.com', + 'www.xiaohongshu.com','zhuanlan.zhihu.com','www.baidu.com','m.youtube.com','www.youtube.com', 'music.youtube.com','youtu.be'] has_self_redirection_links = ['www.cnbeta.com.tw','m.cnbeta.com.tw','www.landiannews.com', 'www.bilibili.com'] @@ -182,7 +182,7 @@ def reserve_whitelisted_params(url): # 重新构建URL cleaned_query = urlencode(new_query_params, doseq=True) return urlunparse(parsed_url._replace(query=cleaned_query)) - elif parsed_url.hostname in ['www.baidu.com','www.youtube.com','music.youtube.com','youtu.be']: + elif parsed_url.hostname in ['www.baidu.com','m.youtube.com','www.youtube.com','music.youtube.com','youtu.be']: new_query_params = {} if parsed_url.hostname == 'www.baidu.com' and 'wd' in query_params: # 百度搜索链接保留 wd 参数 @@ -261,23 +261,29 @@ async def process_url(url): return final_url return None +async def clean_link_in_text(text): + # URL regex pattern + url_pattern = r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+' + urls = re.findall(url_pattern, text) + if not urls: + return None + 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] + return final_urls + 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 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] + final_urls = await clean_link_in_text(text) # 回复处理后的链接 if final_urls: - await message.reply(f"
{"\n\n".join(final_urls)}\n
\n消息里有包含跟踪参数的链接,已经帮你转换了哦~\n\n" - f"注意:这个功能是试验性的,可能会出现问题。" - f"\n如果你找到了问题,欢迎" - f"把它通过 /report_broken_links 链接 需要去除的参数等等 报告给开发者!") \ No newline at end of file + await message.reply( + f"
{"\n\n".join(final_urls)}\n
\n消息里有包含跟踪参数的链接,已经帮你转换了哦~\n\n" + f"注意:这个功能是试验性的,可能会出现问题。" + f"\n如果你找到了问题,欢迎" + f"把它通过 /report_broken_links 链接 需要去除的参数等等 报告给开发者!")