From c3eb42728434ab8fc4743c0c53e94b0374d811e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E7=8E=B2=E8=BE=89?= Date: Sun, 28 Apr 2024 11:37:36 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=A6=92=E5=A4=B4?= =?UTF-8?q?=E6=96=B0=E6=9E=B6=E6=9E=84=E8=BE=85=E7=A7=8D=E4=B8=8D=E6=88=90?= =?UTF-8?q?=E5=8A=9F=E7=9A=84=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 ++- plugins/iyuuautoseed/__init__.py | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index cacbb92..1f3daa4 100644 --- a/package.json +++ b/package.json @@ -208,11 +208,12 @@ "IYUUAutoSeed": { "name": "IYUU自动辅种", "description": "基于IYUU官方Api实现自动辅种。", - "version": "1.4", + "version": "1.4.1", "icon": "IYUU.png", "author": "jxxghp", "level": 2, "history": { + "v1.4.1": "修复馒头新架构辅种不成功的异常", "v1.4": "支持馒头新架构辅种" } }, diff --git a/plugins/iyuuautoseed/__init__.py b/plugins/iyuuautoseed/__init__.py index 5eb8788..c273581 100644 --- a/plugins/iyuuautoseed/__init__.py +++ b/plugins/iyuuautoseed/__init__.py @@ -906,6 +906,7 @@ class IYUUAutoSeed(_PluginBase): if not _apikey: logger.error("m-team站点的apikey未配置") return None + logger.info(f"m-team apikey: ${_apikey}") with RequestUtils( headers={ 'Content-Type': 'application/json', @@ -919,6 +920,8 @@ class IYUUAutoSeed(_PluginBase): if not res: logger.warn(f"m-team 获取种子下载链接失败:{tid}") return None + logger.info(f"m-team res: ${res}") + return res.json().get("data") def __is_special_site(url: str): """ From c0157d959fbcafcbdebfe0fe5dacd3d5e570894f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E7=8E=B2=E8=BE=89?= Date: Sun, 28 Apr 2024 11:39:57 +0800 Subject: [PATCH 02/10] no message --- plugins/iyuuautoseed/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/iyuuautoseed/__init__.py b/plugins/iyuuautoseed/__init__.py index c273581..16a222b 100644 --- a/plugins/iyuuautoseed/__init__.py +++ b/plugins/iyuuautoseed/__init__.py @@ -34,7 +34,7 @@ class IYUUAutoSeed(_PluginBase): # 插件图标 plugin_icon = "IYUU.png" # 插件版本 - plugin_version = "1.4" + plugin_version = "1.4.1" # 插件作者 plugin_author = "jxxghp" # 作者主页 From ca492a8ef767410dcd23ae3ede61085a2445503d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E7=8E=B2=E8=BE=89?= Date: Sun, 28 Apr 2024 11:46:41 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=A6=92=E5=A4=B4?= =?UTF-8?q?=E8=BE=85=E7=A7=8D=E7=9A=84=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/iyuuautoseed/__init__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/iyuuautoseed/__init__.py b/plugins/iyuuautoseed/__init__.py index 16a222b..70ed0c3 100644 --- a/plugins/iyuuautoseed/__init__.py +++ b/plugins/iyuuautoseed/__init__.py @@ -906,7 +906,6 @@ class IYUUAutoSeed(_PluginBase): if not _apikey: logger.error("m-team站点的apikey未配置") return None - logger.info(f"m-team apikey: ${_apikey}") with RequestUtils( headers={ 'Content-Type': 'application/json', @@ -920,7 +919,6 @@ class IYUUAutoSeed(_PluginBase): if not res: logger.warn(f"m-team 获取种子下载链接失败:{tid}") return None - logger.info(f"m-team res: ${res}") return res.json().get("data") def __is_special_site(url: str): From b964e2556c76c958236d5a24a0ef866ce90d0f61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E7=8E=B2=E8=BE=89?= Date: Mon, 29 Apr 2024 20:22:47 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E9=A6=92=E5=A4=B4?= =?UTF-8?q?=E8=BE=85=E5=8A=A9=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- icons/m-team.png | Bin 0 -> 27778 bytes package.json | 12 ++++ plugins/mteamhelper/__init__.py | 118 ++++++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 icons/m-team.png create mode 100644 plugins/mteamhelper/__init__.py diff --git a/icons/m-team.png b/icons/m-team.png new file mode 100644 index 0000000000000000000000000000000000000000..c69ed72657d41ea9c693c4a04ef77500f00a794b GIT binary patch literal 27778 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 literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 30a9a5c..e3083b1 100644 --- a/package.json +++ b/package.json @@ -226,6 +226,18 @@ "v1.2": "增强API安全性" } }, + "MTeamHelper": { + "name": "馒头辅助工具", + "description": "用于解决MP不支持馒头新架构更新导致的一些异常。", + "labels": "馒头,MTeam", + "version": "1.0", + "icon": "m-team.png", + "author": "goo4it", + "level": 1, + "history": { + "v1.0": "支持馒头新架构辅种" + } + }, "IYUUAutoSeed": { "name": "IYUU自动辅种", "description": "基于IYUU官方Api实现自动辅种。", diff --git a/plugins/mteamhelper/__init__.py b/plugins/mteamhelper/__init__.py new file mode 100644 index 0000000..ce9758d --- /dev/null +++ b/plugins/mteamhelper/__init__.py @@ -0,0 +1,118 @@ +import os +import re +from datetime import datetime, timedelta +from threading import Event +from typing import Any, List, Dict, Tuple, Optional + +from app.log import logger +from app.plugins import _PluginBase + +class MTeamHelper(_PluginBase): + # 插件名称 + plugin_name = "馒头辅助工具" + # 插件描述 + plugin_desc = "用于解决MP不支持馒头新架构更新导致的一些异常。" + # 插件图标 + plugin_icon = "m-team.png" + # 插件版本 + plugin_version = "1.0" + # 插件作者 + plugin_author = "goo4it" + # 作者主页 + author_url = "https://github.com/goo4it" + # 插件配置项ID前缀 + plugin_config_prefix = "mteamhelper_" + # 加载顺序 + plugin_order = 17 + # 可使用的用户级别 + auth_level = 1 + + # 私有属性 + _scheduler = None + # 开关 + _enabled = False + _apikey = "" + + def init_plugin(self, config: dict = None): + if not config: + return + logger.info(f"正在应用馒头配置:{config}") + self._enabled = config.get("enabled") + self._apikey = config.get("apikey") + if not self._enabled: + return + + def get_state(self) -> bool: + return self._enabled + + @staticmethod + def get_command() -> List[Dict[str, Any]]: + pass + + def get_api(self) -> List[Dict[str, Any]]: + pass + + def get_form(self) -> Tuple[List[dict], Dict[str, Any]]: + """ + 拼装插件配置页面,需要返回两块数据:1、页面配置;2、数据结构 + """ + return [ + { + 'component': 'VForm', + 'content': [ + { + 'component': 'VRow', + 'content': [ + { + 'component': 'VCol', + 'props': { + 'cols': 12, + 'md': 6 + }, + 'content': [ + { + 'component': 'VSwitch', + 'props': { + 'model': 'enabled', + 'label': '启用插件', + } + } + ] + } + ] + }, + { + 'component': 'VRow', + 'content': [ + { + "component": "VCol", + "props": { + "cols": 12, + }, + "content": [ + { + "component": "VTextField", + "props": { + "model": "apiKey", + "label": "APIKEY" + } + } + ] + } + ] + }, + ] + } + ], { + "enabled": False, + "apikey": "" + } + + def get_page(self) -> List[dict]: + pass + + def stop_service(self): + """ + 退出插件 + """ + pass From ec490f8a23346bbf4f28b96ff2c191f76d1ed35c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E7=8E=B2=E8=BE=89?= Date: Mon, 29 Apr 2024 20:31:59 +0800 Subject: [PATCH 05/10] 1 --- package.json | 670 +-------------------------------------------------- 1 file changed, 12 insertions(+), 658 deletions(-) diff --git a/package.json b/package.json index e3083b1..e561762 100644 --- a/package.json +++ b/package.json @@ -1,660 +1,14 @@ { - "AutoSignIn": { - "name": "站点自动签到", - "description": "自动模拟登录、签到站点。", - "labels": "站点", - "version": "2.1", - "icon": "signin.png", - "author": "thsrite", - "level": 2, - "history": { - "v2.1": "增强API安全性", - "v2.0": "站点签到时更新站点使用统计信息,需要主程序升级至v1.8.3+版本", - "v1.9": "支持馒头新架构自动签到" - } - }, - "CustomSites": { - "name": "自定义站点", - "description": "增加自定义站点为签到和统计使用。", - "labels": "站点", - "version": "1.0", - "icon": "world.png", - "author": "lightolly", - "level": 2 - }, - "SiteStatistic": { - "name": "站点数据统计", - "description": "自动统计和展示站点数据。", - "labels": "站点", - "version": "2.9", - "icon": "statistic.png", - "author": "lightolly", - "level": 2, - "history": { - "v2.9": "增强API安全性", - "v2.8": "修复馒头未读消息统计", - "v2.7": "修复憨憨种子信息只统计第一页的问题,增加移除失效统计选项", - "v2.6": "支持馒头新架构数据统计" - } - }, - "SiteRefresh": { - "name": "站点自动更新", - "description": "使用浏览器模拟登录站点获取Cookie和UA。", - "labels": "站点", - "version": "1.2", - "icon": "Chrome_A.png", - "author": "thsrite", - "level": 2 - }, - "DoubanSync": { - "name": "豆瓣想看", - "description": "同步豆瓣想看数据,自动添加订阅。", - "labels": "订阅", - "version": "1.8", - "icon": "douban.png", - "author": "jxxghp", - "level": 2, - "history": { - "v1.8": "不同步在看条目", - "v1.7": "增强API安全性", - "v1.6": "同步历史记录支持手动删除,需要主程序升级至v1.8.4+版本", - "v1.5": "豆瓣信息识别后直接添加订阅,不进行搜索下载" - } - }, - "DirMonitor": { - "name": "目录监控", - "description": "监控目录文件发生变化时实时整理到媒体库。", - "labels": "文件整理", - "version": "2.0", - "icon": "directory.png", - "author": "jxxghp", - "level": 1, - "history": { - "v2.0": "增强API安全性", - "v1.9": "修复目录监控不能正确获取下载历史记录进行识别的问题" - } - }, - "ChineseSubFinder": { - "name": "ChineseSubFinder", - "description": "整理入库时通知ChineseSubFinder下载字幕。", - "labels": "字幕", - "version": "1.1", - "icon": "chinesesubfinder.png", - "author": "jxxghp", - "level": 1 - }, - "DoubanRank": { - "name": "豆瓣榜单订阅", - "description": "监控豆瓣热门榜单,自动添加订阅。", - "labels": "订阅", - "version": "1.9", - "icon": "movie.jpg", - "author": "jxxghp", - "level": 2, - "history": { - "v1.9": "增强API安全性", - "v1.8": "订阅历史记录支持手动删除,需要主程序升级至v1.8.4+版本" - } - }, - "LibraryScraper": { - "name": "媒体库刮削", - "description": "定时对媒体库进行刮削,补齐缺失元数据和图片。", - "labels": "刮削", - "version": "1.4", - "icon": "scraper.png", - "author": "jxxghp", - "level": 1 - }, - "TorrentRemover": { - "name": "自动删种", - "description": "自动删除下载器中的下载任务。", - "labels": "做种", - "version": "1.2.2", - "icon": "delete.jpg", - "author": "jxxghp", - "level": 2 - }, - "MediaSyncDel": { - "name": "媒体文件同步删除", - "description": "同步删除历史记录、源文件和下载任务。", - "labels": "文件整理", - "version": "1.4", - "icon": "mediasyncdel.png", - "author": "thsrite", - "level": 1 - }, - "CustomHosts": { - "name": "自定义Hosts", - "description": "修改系统hosts文件,加速网络访问。", - "labels": "网络", - "version": "1.0", - "icon": "hosts.png", - "author": "thsrite", - "level": 1 - }, - "SpeedLimiter": { - "name": "播放限速", - "description": "外网播放媒体库视频时,自动对下载器进行限速。", - "labels": "网络", - "version": "1.1", - "icon": "Librespeed_A.png", - "author": "Shurelol", - "level": 1 - }, - "CloudflareSpeedTest": { - "name": "Cloudflare IP优选", - "description": "🌩 测试 Cloudflare CDN 延迟和速度,自动优选IP。", - "labels": "网络,站点", - "version": "1.2", - "icon": "cloudflare.jpg", - "author": "thsrite", - "level": 1, - "history": { - "v1.2": "增强API安全性" - } - }, - "BestFilmVersion": { - "name": "收藏洗版", - "description": "Jellyfin/Emby/Plex点击收藏电影后,自动订阅洗版。", - "labels": "订阅", - "version": "2.1", - "icon": "like.jpg", - "author": "wlj", - "level": 2 - }, - "MediaServerMsg": { - "name": "媒体库服务器通知", - "description": "发送Emby/Jellyfin/Plex服务器的播放、入库等通知消息。", - "labels": "消息通知,媒体库", - "version": "1.1", - "icon": "mediaplay.png", - "author": "jxxghp", - "level": 1 - }, - "MediaServerRefresh": { - "name": "媒体库服务器刷新", - "description": "入库后自动刷新Emby/Jellyfin/Plex服务器海报墙。", - "labels": "媒体库", - "version": "1.2", - "icon": "refresh2.png", - "author": "jxxghp", - "level": 1 - }, - "WebHook": { - "name": "Webhook", - "description": "事件发生时向第三方地址发送请求。", - "version": "1.0", - "icon": "webhook.png", - "author": "jxxghp", - "level": 1 - }, - "ChatGPT": { - "name": "ChatGPT", - "description": "消息交互支持与ChatGPT对话。", - "labels": "消息通知,识别", - "version": "1.3", - "icon": "Chatgpt_A.png", - "author": "jxxghp", - "level": 1 - }, - "NAStoolSync": { - "name": "历史记录同步", - "description": "同步NAStool历史记录、下载记录、插件记录到MoviePilot。", - "version": "1.0", - "icon": "Nastools_A.png", - "author": "thsrite", - "level": 1 - }, - "MessageForward": { - "name": "消息转发", - "description": "根据正则转发通知到其他WeChat应用。", - "labels": "消息通知", - "version": "1.1", - "icon": "forward.png", - "author": "thsrite", - "level": 1 - }, - "AutoBackup": { - "name": "自动备份", - "description": "自动备份数据和配置文件。", - "labels": "系统设置", - "version": "1.2", - "icon": "Time_machine_B.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.2": "增强API安全性" - } - }, - "MTeamHelper": { - "name": "馒头辅助工具", - "description": "用于解决MP不支持馒头新架构更新导致的一些异常。", - "labels": "馒头,MTeam", - "version": "1.0", - "icon": "m-team.png", - "author": "goo4it", - "level": 1, - "history": { - "v1.0": "支持馒头新架构辅种" - } - }, - "IYUUAutoSeed": { - "name": "IYUU自动辅种", - "description": "基于IYUU官方Api实现自动辅种。", - "labels": "做种,IYUU", - "version": "1.6", - "icon": "IYUU.png", - "author": "jxxghp", - "level": 2, - "history": { - "v1.6": "增加不辅种小体积种子功能", - "v1.5": "支持馒头新架构辅种" - } - }, - "CrossSeed": { - "name": "青蛙辅种助手", - "description": "参考ReseedPuppy和IYUU辅种插件实现自动辅种,支持站点:青蛙、AGSVPT、麒麟、UBits、聆音、憨憨等。", - "labels": "做种", - "version": "2.3", - "icon": "qingwa.png", - "author": "233@qingwa", - "level": 2, - "history": { - "v2.2": "站点停用后会同步暂停对该站点的辅种", - "v2.3": "站点辅种支持代理" - } - }, - "VCBAnimeMonitor": { - "name": "整理VCB动漫压制组作品", - "description": "提高部分VCB-Studio作品的识别准确率,将VCB-Studio的作品统一转移到指定目录同时进行刮削整理", - "labels": "文件整理,识别", - "version": "1.7", - "icon": "vcbmonitor.png", - "author": "pixel@qingwa", - "level": 2 - }, - "TorrentTransfer": { - "name": "自动转移做种", - "description": "定期转移下载器中的做种任务到另一个下载器。", - "labels": "做种", - "version": "1.3", - "icon": "seed.png", - "author": "jxxghp", - "level": 2 - }, - "RssSubscribe": { - "name": "自定义订阅", - "description": "定时刷新RSS报文,识别内容后添加订阅或直接下载。", - "labels": "订阅", - "version": "1.3", - "icon": "rss.png", - "author": "jxxghp", - "level": 2, - "history": { - "v1.3": "支持手动删除订阅历史记录" - } - }, - "SyncDownloadFiles": { - "name": "下载器文件同步", - "description": "同步下载器的文件信息到数据库,删除文件时联动删除下载任务。", - "labels": "下载管理", - "version": "1.1", - "icon": "Youtube-dl_A.png", - "author": "thsrite", - "level": 1 - }, - "BrushFlow": { - "name": "站点刷流", - "description": "自动托管刷流,将会提高对应站点的访问频率。", - "labels": "刷流", - "version": "2.9", - "icon": "brush.jpg", - "author": "jxxghp,InfinityPacer", - "level": 2, - "history": { - "v2.9": "优化动态删除消息推送,优化配置页UI显示及部分配置项,支持配置种子分类以及开启自动分类管理,取消单独适配站点时区逻辑,可通过配置项「pubtime」自行适配", - "v2.8": "优化UI显示以及提升性能", - "v2.7": "动态删除种子规则调整(请注意查阅插件文档),站点独立配置样式优化、日志优化,修复部分配置项无法配置小数的问题,修复部分场景可能导致重复下载的问题", - "v2.6": "修复排除订阅功能", - "v2.5": "增加H&R做种时间、下载器监控配置项,刷流前置条件逻辑调整,代理下载种子默认为关闭" - } - }, - "DownloadingMsg": { - "name": "下载进度推送", - "description": "定时推送正在下载进度。", - "labels": "消息通知,下载管理", - "version": "1.1", - "icon": "downloadmsg.png", - "author": "thsrite", - "level": 2 - }, - "AutoClean": { - "name": "定时清理媒体库", - "description": "定时清理用户下载的种子、源文件、媒体库文件。", - "labels": "媒体库", - "version": "1.1", - "icon": "clean.png", - "author": "thsrite", - "level": 2 - }, - "InvitesSignin": { - "name": "药丸签到", - "description": "药丸论坛签到。", - "labels": "站点", - "version": "1.4", - "icon": "invites.png", - "author": "thsrite", - "level": 2, - "history": { - "v1.4": "自定义保留消息天数" - } - }, - "PersonMeta": { - "name": "演职人员刮削", - "description": "刮削演职人员图片以及中文名称。", - "labels": "媒体库,刮削", - "version": "1.2", - "icon": "actor.png", - "author": "jxxghp", - "level": 1 - }, - "MoviePilotUpdateNotify": { - "name": "MoviePilot更新推送", - "description": "MoviePilot推送release更新通知、自动重启。", - "labels": "消息通知,自动更新", - "version": "1.4", - "icon": "Moviepilot_A.png", - "author": "thsrite", - "level": 1, - "history": { - "v1.4": "兼容更新内容带版本号的情况", - "v1.3": "增加前端版本更新检查,需要主程序升级至v1.8.4+版本" - } - }, - "CloudDiskDel": { - "name": "云盘文件删除", - "description": "媒体库删除strm文件后同步删除云盘资源。", - "labels": "媒体库", - "version": "1.3", - "icon": "clouddisk.png", - "author": "thsrite", - "level": 1 - }, - "BarkMsg": { - "name": "Bark消息推送", - "description": "支持使用Bark发送消息通知。", - "labels": "消息通知", - "version": "1.1", - "icon": "Bark_A.png", - "author": "jxxghp", - "level": 1 - }, - "IyuuMsg": { - "name": "IYUU消息推送", - "description": "支持使用IYUU发送消息通知。", - "labels": "消息通知,IYUU", - "version": "1.2", - "icon": "Iyuu_A.png", - "author": "jxxghp", - "level": 1 - }, - "PushDeerMsg": { - "name": "PushDeer消息推送", - "description": "支持使用PushDeer发送消息通知。", - "labels": "消息通知", - "version": "1.1", - "icon": "pushdeer.png", - "author": "jxxghp", - "level": 1 - }, - "ConfigCenter": { - "name": "配置中心", - "description": "快速调整部分系统设定。", - "labels": "系统设置", - "version": "2.4", - "icon": "setting.png", - "author": "jxxghp", - "level": 1 - }, - "WorkWechatMsg": { - "name": "企微机器人消息推送", - "description": "支持使用企业微信群聊机器人发送消息通知。", - "labels": "消息通知", - "version": "1.0", - "icon": "Wecom_A.png", - "author": "叮叮当", - "level": 1 - }, - "EpisodeGroupMeta": { - "name": "TMDB剧集组刮削", - "description": "从TMDB剧集组刮削季集的实际顺序。", - "labels": "刮削", - "version": "1.1", - "icon": "Element_A.png", - "author": "叮叮当", - "level": 1 - }, - "CustomIndexer": { - "name": "自定义索引站点", - "description": "修改或扩展内建索引器支持的站点。", - "labels": "站点", - "version": "1.0", - "icon": "spider.png", - "author": "jxxghp", - "level": 1 - }, - "FFmpegThumb": { - "name": "FFmpeg缩略图", - "description": "TheMovieDb没有背景图片时使用FFmpeg截取视频文件缩略图", - "labels": "刮削", - "version": "1.2", - "icon": "ffmpeg.png", - "author": "jxxghp", - "level": 1 - }, - "PushPlusMsg": { - "name": "PushPlus消息推送", - "description": "支持使用PushPlus发送消息通知。", - "labels": "消息通知", - "version": "1.0", - "icon": "Pushplus_A.png", - "author": "cheng", - "level": 1 - }, - "DownloadSiteTag": { - "name": "下载任务分类与标签", - "description": "自动给下载任务分类与打站点标签、剧集名称标签", - "labels": "下载管理", - "version": "2.1", - "icon": "Youtube-dl_B.png", - "author": "叮叮当", - "level": 1, - "history": { - "v2.1": "修复错误的TmdbHelper模块引用" - } - }, - "RemoveLink": { - "name": "清理硬链接", - "description": "监控目录内文件被删除时,同步删除监控目录内所有和它硬链接的文件", - "labels": "文件整理", - "version": "1.9", - "icon": "Ombi_A.png", - "author": "DzAvril", - "level": 1, - "history": { - "v2.0": "联动删除种子,需安装插件[下载器助手]并打开监听源文件事件", - "v1.9": "增加清理刮削文件功能(beta)", - "v1.8": "增加清理空目录功能(beta)", - "v1.7": "修复因未监测重命名事件导致的清理硬链接失败的问题", - "v1.6": "提升插件性能" - } - }, - "LinkMonitor": { - "name": "实时硬链接", - "description": "监控目录文件变化,实时硬链接。", - "labels": "文件整理", - "version": "1.6", - "icon": "Linkace_C.png", - "author": "jxxghp", - "level": 1, - "history": { - "v1.6": "增强API安全性" - } - }, - "CategoryEditor": { - "name": "二级分类策略", - "description": "编辑下载目录和媒体库目录的二级分类规则。", - "labels": "文件整理", - "version": "1.1", - "icon": "Bookstack_A.png", - "author": "jxxghp", - "level": 1 - }, - "RemoteIdentifiers": { - "name": "共享识别词", - "description": "从Github、Etherpad等远程文件中获取共享识别词并应用。", - "labels": "识别", - "version": "2.2", - "icon": "words.png", - "author": "honue", - "level": 1 - }, - "NeoDBSync": { - "name": "NeoDB 想看", - "description": "同步 NeoDB 想看条目,自动添加订阅。", - "labels": "订阅", - "version": "1.1", - "icon": "NeoDB.jpeg", - "author": "hcplantern", - "level": 1, - "history": { - "v1.1": "直接添加订阅,不提前进行搜索下载" - } - }, - "PlayletCategory": { - "name": "短剧自动分类", - "description": "网络短剧自动整理到独立的分类目录。", - "labels": "文件整理", - "version": "1.4", - "icon": "Amule_A.png", - "author": "jxxghp", - "level": 1 - }, - "DiagParamAdjust": { - "name": "诊断参数调整", - "description": "Emby专用插件|暂时性解决emby字幕偏移问题,需要emby安装Diagnostics插件。", - "labels": "Emby", - "version": "1.3", - "icon": "Gatus_A.png", - "author": "jeblove", - "level": 1 - }, - "QbCommand": { - "name": "QB远程操作", - "description": "通过定时任务或交互命令远程操作QB暂停/开始/限速等。", - "labels": "下载管理,Qbittorrent", - "version": "1.4", - "icon": "Qbittorrent_A.png", - "author": "DzAvril", - "level": 1, - "history": { - "v1.4": "可选某些站点不再做种(暂停做种后不会被恢复)" - } - }, - "TrCommand": { - "name": "TR远程操作", - "description": "通过定时任务或交互命令远程操作TR暂停/开始/限速等。", - "labels": "下载管理,Transmission", - "version": "1.1", - "icon": "Transmission_A.png", - "author": "Hoey", - "level": 1 - }, - "IpDetect": { - "name": "本地IP检测", - "description": "如果QB、TR等服务在本地部署,当本地IP改变时自动修改其Server IP。", - "labels": "系统设置", - "version": "1.1", - "icon": "ipAddress.png", - "author": "DzAvril", - "level": 1 - }, - "TrackerEditor": { - "name": "Tracker替换", - "description": "批量替换种子tracker,支持周期性巡检(如为TR,仅支持4.0以上版本)。", - "labels": "做种", - "version": "1.5", - "icon": "trackereditor_A.png", - "author": "honue", - "level": 1 - }, - "ContractCheck": { - "name": "契约检查", - "description": "定时检查保种契约达成情况。", - "labels": "做种", - "version": "1.1", - "icon": "contract.png", - "author": "DzAvril", - "level": 1 - }, - "DownloaderHelper": { - "name": "下载器助手", - "description": "自动做种、站点标签、自动删种。", - "labels": "下载管理", - "version": "1.6", - "icon": "DownloaderHelper.png", - "author": "hotlcc", - "level": 2, - "history": { - "v1.6": "修复事件触发tr打标问题;表单界面优化。" - } - }, - "FeiShuMsg": { - "name": "飞书机器人消息通知", - "description": "支持使用飞书群聊机器人发送消息通知。", - "labels": "消息通知", - "version": "1.0", - "icon": "FeiShu_A.png", - "author": "InfinityPacer", - "level": 2 - }, - "IyuuAuth": { - "name": "IYUU站点绑定", - "description": "为IYUU账号绑定认证站点,以便用于用户认证和辅种。", - "labels": "IYUU", - "version": "1.1", - "icon": "Iyuu_A.png", - "author": "jxxghp", - "level": 1, - "history": { - "v1.1": "修复IYUU站点绑定失败问题" - } - }, - "NtfyMsg": { - "name": "ntfy消息推送", - "description": "支持使用ntfy发送消息通知。", - "labels": "消息通知", - "version": "1.0", - "icon": "Ntfy_A.png", - "author": "lethargicScribe", - "level": 1 - }, - "PluginAutoUpgrade": { - "name": "插件自动升级", - "description": "定时检测、升级插件。", - "labels": "自动更新", - "version": "1.4", - "icon": "PluginAutoUpgrade.png", - "author": "hotlcc", - "level": 1 - }, - "MergeSiteSwitch": { - "name": "聚合站点开关", - "description": "统一管理所有与站点相关的开关。", - "labels": "系统设置", - "version": "1.0", - "icon": "world.png", - "author": "hotlcc", - "level": 2 + "MTeamHelper": { + "name": "馒头辅助工具", + "description": "用于解决MP不支持馒头新架构更新导致的一些异常。", + "labels": "馒头,MTeam", + "version": "1.0", + "icon": "m-team.png", + "author": "goo4it", + "level": 1, + "history": { + "v1.0": "支持馒头新架构辅种" } -} + } +} \ No newline at end of file From ad24181675a1c967a96d155aa3cc8b1ffaecbc30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E7=8E=B2=E8=BE=89?= Date: Mon, 29 Apr 2024 21:27:16 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- plugins/mteamhelper/__init__.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e561762..4375733 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "用于解决MP不支持馒头新架构更新导致的一些异常。", "labels": "馒头,MTeam", "version": "1.0", - "icon": "m-team.png", + "icon": "https://raw.githubusercontent.com/goo4it/MoviePilot-Plugins/main/icons/m-team.png", "author": "goo4it", "level": 1, "history": { diff --git a/plugins/mteamhelper/__init__.py b/plugins/mteamhelper/__init__.py index ce9758d..bc9be9d 100644 --- a/plugins/mteamhelper/__init__.py +++ b/plugins/mteamhelper/__init__.py @@ -13,13 +13,13 @@ class MTeamHelper(_PluginBase): # 插件描述 plugin_desc = "用于解决MP不支持馒头新架构更新导致的一些异常。" # 插件图标 - plugin_icon = "m-team.png" + plugin_icon = "https://raw.githubusercontent.com/goo4it/MoviePilot-Plugins/main/icons/m-team.png" # 插件版本 plugin_version = "1.0" # 插件作者 plugin_author = "goo4it" # 作者主页 - author_url = "https://github.com/goo4it" + author_url = "https://github.com/goo4it/MoviePilot-Plugins" # 插件配置项ID前缀 plugin_config_prefix = "mteamhelper_" # 加载顺序 @@ -38,7 +38,7 @@ class MTeamHelper(_PluginBase): return logger.info(f"正在应用馒头配置:{config}") self._enabled = config.get("enabled") - self._apikey = config.get("apikey") + self._apikey = config.get("apiKey") if not self._enabled: return @@ -105,7 +105,7 @@ class MTeamHelper(_PluginBase): } ], { "enabled": False, - "apikey": "" + "apiKey": "" } def get_page(self) -> List[dict]: From 4e327d84f81a0f74e666b681f54875e7ba83ce0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E7=8E=B2=E8=BE=89?= Date: Tue, 14 May 2024 00:22:15 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E9=80=82=E9=85=8D=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=ACIYUU=E5=BC=80=E5=8F=91=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 +- plugins/iyuuautoseed/__init__.py | 2 +- plugins/iyuuautoseed/iyuu_helper.py | 103 ++++++++++++---------------- 3 files changed, 47 insertions(+), 61 deletions(-) diff --git a/package.json b/package.json index fef90d9..10b4578 100644 --- a/package.json +++ b/package.json @@ -236,11 +236,12 @@ "name": "IYUU自动辅种", "description": "基于IYUU官方Api实现自动辅种。", "labels": "做种,IYUU", - "version": "1.7", + "version": "1.8", "icon": "IYUU.png", "author": "jxxghp", "level": 2, "history": { + "v1.8": "适配新版本IYUU开发版", "v1.7": "适配馒头最新变化,需要升级至v1.8.5+版本且维护好Authorization", "v1.6": "增加不辅种小体积种子功能", "v1.5": "支持馒头新架构辅种" diff --git a/plugins/iyuuautoseed/__init__.py b/plugins/iyuuautoseed/__init__.py index 172542d..681395c 100644 --- a/plugins/iyuuautoseed/__init__.py +++ b/plugins/iyuuautoseed/__init__.py @@ -34,7 +34,7 @@ class IYUUAutoSeed(_PluginBase): # 插件图标 plugin_icon = "IYUU.png" # 插件版本 - plugin_version = "1.7" + plugin_version = "1.8" # 插件作者 plugin_author = "jxxghp" # 作者主页 diff --git a/plugins/iyuuautoseed/iyuu_helper.py b/plugins/iyuuautoseed/iyuu_helper.py index 914595a..0867181 100644 --- a/plugins/iyuuautoseed/iyuu_helper.py +++ b/plugins/iyuuautoseed/iyuu_helper.py @@ -3,14 +3,16 @@ import json import time from typing import Tuple, Optional +from app.log import logger from app.utils.http import RequestUtils class IyuuHelper(object): - _version = "2.0.0" - _api_base = "http://api.bolahg.cn/%s" + _version = "8.2.0" + _api_base = "https://dev.iyuu.cn" _sites = {} _token = None + _sid_sha1 = None def __init__(self, token: str): self._token = token @@ -24,28 +26,23 @@ class IyuuHelper(object): """ 向IYUUApi发送请求 """ - if params: - if not params.get("sign"): - params.update({"sign": self._token}) - if not params.get("version"): - params.update({"version": self._version}) - else: - params = {"sign": self._token, "version": self._version} - # 开始请求 - if method == "get": + ret = None + if method == "post": ret = RequestUtils( - accept_type="application/json" - ).get_res(f"{url}", params=params) + accept_type="application/json", + headers={'token': self._token} + ).post_res(f'{self._api_base + url}', json=params) else: ret = RequestUtils( - accept_type="application/json" - ).post_res(f"{url}", data=params) + accept_type="application/json", + headers={'token': self._token} + ).get_res(f'{self._api_base + url}', params=params) if ret: result = ret.json() - if result.get('ret') == 200: + if result.get('code') == 0: return result.get('data'), "" else: - return None, f"请求IYUU失败,状态码:{result.get('ret')},返回信息:{result.get('msg')}" + return None, f'请求IYUU失败,状态码:{result.get("code")},返回信息:{result.get("msg")}' elif ret is not None: return None, f"请求IYUU失败,状态码:{ret.status_code},错误原因:{ret.reason}" else: @@ -65,27 +62,11 @@ class IyuuHelper(object): """ 返回支持辅种的全部站点 :return: 站点列表、错误信息 - { - "ret": 200, - "data": { - "sites": [ - { - "id": 1, - "site": "keepfrds", - "nickname": "朋友", - "base_url": "pt.keepfrds.com", - "download_page": "download.php?id={}&passkey={passkey}", - "reseed_check": "passkey", - "is_https": 2 - }, - ] - } - } """ - result, msg = self.__request_iyuu(url=self._api_base % 'App.Api.Sites') + result, msg = self.__request_iyuu(url='/reseed/sites/index') if result: ret_sites = {} - sites = result.get('sites') or [] + sites = result.get('sites') for site in sites: ret_sites[site.get('id')] = site return ret_sites @@ -93,37 +74,41 @@ class IyuuHelper(object): print(msg) return {} + def __report_existing(self) -> Optional[str]: + """ + 汇报辅种的站点 + :return: + """ + if not self._sites: + self._sites = self.__get_sites() + sid_list = list(self._sites.keys()) + result, msg = self.__request_iyuu(url='/reseed/sites/reportExisting', + method='post', + params={'sid_list': sid_list}) + if result: + return result.get('sid_sha1') + return None + def get_seed_info(self, info_hashs: list) -> Tuple[Optional[dict], str]: """ 返回info_hash对应的站点id、种子id - { - "ret": 200, - "data": [ - { - "sid": 3, - "torrent_id": 377467, - "info_hash": "a444850638e7a6f6220e2efdde94099c53358159" - }, - { - "sid": 7, - "torrent_id": 35538, - "info_hash": "cf7d88fd656d10fe5130d13567aec27068b96676" - } - ], - "msg": "", - "version": "1.0.0" - } + :param info_hashs: + :return: """ + if not self._sid_sha1: + self._sid_sha1 = self.__report_existing() info_hashs.sort() json_data = json.dumps(info_hashs, separators=(',', ':'), ensure_ascii=False) sha1 = self.get_sha1(json_data) - result, msg = self.__request_iyuu(url=self._api_base % 'App.Api.Infohash', - method="post", - params={ - "timestamp": time.time(), - "hash": json_data, - "sha1": sha1 - }) + logger.info(f'{json_data}') + logger.info(f'{sha1}') + result, msg = self.__request_iyuu(url='/reseed/index/index', method='post', params={ + 'hash': json_data, + 'sha1': sha1, + 'sid_sha1': self._sid_sha1, + 'timestamp': int(time.time()), + 'version': self._version + }) return result, msg @staticmethod From 2c46dd074213155bc351ddac52fb67ef0656157c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E7=8E=B2=E8=BE=89?= Date: Tue, 14 May 2024 00:34:08 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E9=80=82=E9=85=8D=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=ACIYUU=E5=BC=80=E5=8F=91=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/iyuuautoseed/iyuu_helper.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/iyuuautoseed/iyuu_helper.py b/plugins/iyuuautoseed/iyuu_helper.py index 0867181..456a117 100644 --- a/plugins/iyuuautoseed/iyuu_helper.py +++ b/plugins/iyuuautoseed/iyuu_helper.py @@ -100,8 +100,6 @@ class IyuuHelper(object): info_hashs.sort() json_data = json.dumps(info_hashs, separators=(',', ':'), ensure_ascii=False) sha1 = self.get_sha1(json_data) - logger.info(f'{json_data}') - logger.info(f'{sha1}') result, msg = self.__request_iyuu(url='/reseed/index/index', method='post', params={ 'hash': json_data, 'sha1': sha1, From c7823b2df72264d747237740cd8e7eac58a65e08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E7=8E=B2=E8=BE=89?= Date: Tue, 14 May 2024 00:38:59 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E9=80=82=E9=85=8D=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=ACIYUU=E5=BC=80=E5=8F=91=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/iyuuautoseed/iyuu_helper.py | 3 + plugins/mteamhelper/__init__.py | 118 ---------------------------- 2 files changed, 3 insertions(+), 118 deletions(-) delete mode 100644 plugins/mteamhelper/__init__.py diff --git a/plugins/iyuuautoseed/iyuu_helper.py b/plugins/iyuuautoseed/iyuu_helper.py index 456a117..d1c116a 100644 --- a/plugins/iyuuautoseed/iyuu_helper.py +++ b/plugins/iyuuautoseed/iyuu_helper.py @@ -8,6 +8,9 @@ from app.utils.http import RequestUtils class IyuuHelper(object): + """ + 适配新版本IYUU开发版 + """ _version = "8.2.0" _api_base = "https://dev.iyuu.cn" _sites = {} diff --git a/plugins/mteamhelper/__init__.py b/plugins/mteamhelper/__init__.py deleted file mode 100644 index bc9be9d..0000000 --- a/plugins/mteamhelper/__init__.py +++ /dev/null @@ -1,118 +0,0 @@ -import os -import re -from datetime import datetime, timedelta -from threading import Event -from typing import Any, List, Dict, Tuple, Optional - -from app.log import logger -from app.plugins import _PluginBase - -class MTeamHelper(_PluginBase): - # 插件名称 - plugin_name = "馒头辅助工具" - # 插件描述 - plugin_desc = "用于解决MP不支持馒头新架构更新导致的一些异常。" - # 插件图标 - plugin_icon = "https://raw.githubusercontent.com/goo4it/MoviePilot-Plugins/main/icons/m-team.png" - # 插件版本 - plugin_version = "1.0" - # 插件作者 - plugin_author = "goo4it" - # 作者主页 - author_url = "https://github.com/goo4it/MoviePilot-Plugins" - # 插件配置项ID前缀 - plugin_config_prefix = "mteamhelper_" - # 加载顺序 - plugin_order = 17 - # 可使用的用户级别 - auth_level = 1 - - # 私有属性 - _scheduler = None - # 开关 - _enabled = False - _apikey = "" - - def init_plugin(self, config: dict = None): - if not config: - return - logger.info(f"正在应用馒头配置:{config}") - self._enabled = config.get("enabled") - self._apikey = config.get("apiKey") - if not self._enabled: - return - - def get_state(self) -> bool: - return self._enabled - - @staticmethod - def get_command() -> List[Dict[str, Any]]: - pass - - def get_api(self) -> List[Dict[str, Any]]: - pass - - def get_form(self) -> Tuple[List[dict], Dict[str, Any]]: - """ - 拼装插件配置页面,需要返回两块数据:1、页面配置;2、数据结构 - """ - return [ - { - 'component': 'VForm', - 'content': [ - { - 'component': 'VRow', - 'content': [ - { - 'component': 'VCol', - 'props': { - 'cols': 12, - 'md': 6 - }, - 'content': [ - { - 'component': 'VSwitch', - 'props': { - 'model': 'enabled', - 'label': '启用插件', - } - } - ] - } - ] - }, - { - 'component': 'VRow', - 'content': [ - { - "component": "VCol", - "props": { - "cols": 12, - }, - "content": [ - { - "component": "VTextField", - "props": { - "model": "apiKey", - "label": "APIKEY" - } - } - ] - } - ] - }, - ] - } - ], { - "enabled": False, - "apiKey": "" - } - - def get_page(self) -> List[dict]: - pass - - def stop_service(self): - """ - 退出插件 - """ - pass From 61acdf63ec50cf7ce3f96e318a9702458f62fe35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E7=8E=B2=E8=BE=89?= Date: Tue, 14 May 2024 00:40:20 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E9=80=82=E9=85=8D=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=ACIYUU=E5=BC=80=E5=8F=91=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- icons/m-team.png | Bin 27778 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 icons/m-team.png diff --git a/icons/m-team.png b/icons/m-team.png deleted file mode 100644 index c69ed72657d41ea9c693c4a04ef77500f00a794b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27778 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