diff --git a/app/chain/download.py b/app/chain/download.py index 9586edde..83236a1f 100644 --- a/app/chain/download.py +++ b/app/chain/download.py @@ -171,7 +171,7 @@ class DownloadChain(ChainBase): return 0 # 分组排序 - contexts = TorrentHelper.sort_group_torrents(contexts) + contexts = TorrentHelper().sort_group_torrents(contexts) # 如果是电影,直接下载 for context in contexts: diff --git a/app/chain/user_message.py b/app/chain/user_message.py index 13fb0131..0548accc 100644 --- a/app/chain/user_message.py +++ b/app/chain/user_message.py @@ -97,6 +97,7 @@ class UserMessageChain(ChainBase): logger.info(f"{mediainfo.get_title_string()} 媒体库中不存在,开始搜索 ...") self.post_message( title=f"开始搜索 {mediainfo.type.value} {mediainfo.get_title_string()} ...", userid=userid) + # 开始搜索 contexts = self.searchchain.process(meta=self._current_meta, mediainfo=mediainfo, no_exists=no_exists) @@ -104,6 +105,8 @@ class UserMessageChain(ChainBase): # 没有数据 self.post_message(title=f"{mediainfo.title} 未搜索到资源!", userid=userid) return + # 搜索结果排序 + # 更新缓存 self._user_cache[userid] = { "type": "Torrent", diff --git a/app/helper/torrent.py b/app/helper/torrent.py index c91c2c33..0ca07cc0 100644 --- a/app/helper/torrent.py +++ b/app/helper/torrent.py @@ -149,9 +149,9 @@ class TorrentHelper: return file_name @staticmethod - def sort_group_torrents(torrent_list: List[Context]) -> List[Context]: + def sort_torrents(torrent_list: List[Context]) -> List[Context]: """ - 对媒体信息进行排序、去重 + 对种子对行排序 """ if not torrent_list: return [] @@ -171,6 +171,19 @@ class TorrentHelper: # 匹配的资源中排序分组选最好的一个下载 # 按站点顺序、资源匹配顺序、做种人数下载数逆序排序 torrent_list = sorted(torrent_list, key=lambda x: get_sort_str(x), reverse=True) + + return torrent_list + + def sort_group_torrents(self, torrent_list: List[Context]) -> List[Context]: + """ + 对媒体信息进行排序、去重 + """ + if not torrent_list: + return [] + + # 排序 + torrent_list = self.sort_torrents(torrent_list) + # 控重 result = [] _added = [] diff --git a/app/modules/filter/__init__.py b/app/modules/filter/__init__.py index a6a9231d..2fbc97e4 100644 --- a/app/modules/filter/__init__.py +++ b/app/modules/filter/__init__.py @@ -116,11 +116,13 @@ class FilterModule(_ModuleBase): if not torrent_episodes: # 整季按匹配处理 return True - if len(torrent_episodes) == 1 \ - and not set(torrent_seasons).intersection(set(season_episodes.get(torrent_seasons[0]))): - # 单季集没有交集的不要 - logger.info(f"种子 {torrent.title} 集 {torrent_episodes} 没有需要的集") - return False + if len(torrent_seasons) == 1: + need_episodes = season_episodes.get(torrent_seasons[0]) + if need_episodes \ + and not set(torrent_seasons).intersection(set(need_episodes)): + # 单季集没有交集的不要 + logger.info(f"种子 {torrent.title} 集 {torrent_episodes} 没有需要的集") + return False return True def __get_order(self, torrent: TorrentInfo, rule_str: str) -> Optional[TorrentInfo]: diff --git a/app/modules/telegram/telegram.py b/app/modules/telegram/telegram.py index 2fb58ccb..55ce66eb 100644 --- a/app/modules/telegram/telegram.py +++ b/app/modules/telegram/telegram.py @@ -1,3 +1,4 @@ +import re import threading from pathlib import Path from threading import Event @@ -9,6 +10,7 @@ from telebot.types import InputFile from app.core.config import settings from app.core.context import MediaInfo, Context +from app.core.metainfo import MetaInfo from app.log import logger from app.utils.http import RequestUtils from app.utils.singleton import Singleton @@ -140,8 +142,12 @@ class Telegram(metaclass=Singleton): for context in torrents: torrent = context.torrent_info site_name = torrent.site_name + meta = MetaInfo(torrent.title, torrent.description) link = torrent.page_url - title = torrent.title + title = f"{meta.get_season_episode_string()} " \ + f"{meta.get_resource_type_string()} " \ + f"{meta.get_resource_team_string()}" + title = re.sub(r"\s+", " ", title).strip() free = torrent.get_volume_factor_string() seeder = f"{torrent.seeders}↑" description = torrent.description diff --git a/app/modules/wechat/wechat.py b/app/modules/wechat/wechat.py index e5f7152f..ddc7ca46 100644 --- a/app/modules/wechat/wechat.py +++ b/app/modules/wechat/wechat.py @@ -1,4 +1,5 @@ import json +import re import threading from datetime import datetime from typing import Optional, List @@ -211,11 +212,13 @@ class WeChat(metaclass=Singleton): for context in torrents: torrent = context.torrent_info meta = MetaInfo(title=torrent.title, subtitle=torrent.description) - torrent_title = f"【{torrent.site_name}】" \ + torrent_title = f"{index}.【{torrent.site_name}】" \ f"{meta.get_season_episode_string()} " \ f"{meta.get_resource_type_string()} " \ + f"{meta.get_resource_team_string()}" \ f"{torrent.get_volume_factor_string()} " \ f"{torrent.seeders}↑" + title = re.sub(r"\s+", " ", title).strip() articles.append({ "title": torrent_title, "description": torrent.description if index == 1 else '',