From d54ae733093a4c13eab648b89384d0337fbda1df Mon Sep 17 00:00:00 2001 From: "www.xueximeng.com" Date: Tue, 9 Sep 2025 18:53:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BF=85=E9=A1=BBENABLED=5FPLUGINS=E6=98=BE?= =?UTF-8?q?=E5=BC=8F=E5=90=AF=E7=94=A8=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 4 +++- README.md | 4 ++-- config/config.go | 15 ++++++++++++--- docker-compose.yml | 2 ++ docs/MCP-SERVICE.md | 5 ++++- main.go | 18 ++++++++++-------- mcp-config.json | 6 ++++-- plugin/plugin.go | 17 +++++++++++------ 8 files changed, 48 insertions(+), 23 deletions(-) diff --git a/Dockerfile b/Dockerfile index c8e0748..db9ef02 100644 --- a/Dockerfile +++ b/Dockerfile @@ -51,6 +51,7 @@ WORKDIR /app EXPOSE 8888 # 设置环境变量 +# ENABLED_PLUGINS: 必须指定启用的插件,多个插件用逗号分隔 ENV CACHE_PATH=/app/cache \ CACHE_ENABLED=true \ TZ=Asia/Shanghai \ @@ -58,7 +59,8 @@ ENV CACHE_PATH=/app/cache \ ASYNC_RESPONSE_TIMEOUT=4 \ ASYNC_MAX_BACKGROUND_WORKERS=20 \ ASYNC_MAX_BACKGROUND_TASKS=100 \ - ASYNC_CACHE_TTL_HOURS=1 + ASYNC_CACHE_TTL_HOURS=1 \ + ENABLED_PLUGINS=labi,zhizhen,shandian,duoduo,muou,wanou # 构建参数 ARG VERSION=dev diff --git a/README.md b/README.md index bff6bf3..d5d73e5 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,7 @@ cd pansou | **PORT** | 服务端口 | `8888` | 修改服务监听端口 | | **PROXY** | SOCKS5代理 | 无 | 如:`socks5://127.0.0.1:1080` | | **CHANNELS** | 默认搜索的TG频道 | `tgsearchers3` | 多个频道用逗号分隔 | +| **ENABLED_PLUGINS** | 指定启用插件,多个插件用逗号分隔 | 无 | 必须显式指定 | #### 🔧 高级配置(默认值即可) @@ -119,7 +120,6 @@ cd pansou | ASYNC_MAX_BACKGROUND_TASKS | 最大后台任务数量 | 工作者数×5 | | ASYNC_CACHE_TTL_HOURS | 异步缓存有效期(小时) | `1` | | ASYNC_PLUGIN_ENABLED | 异步插件是否启用 | `true` | -| ENABLED_PLUGINS | 指定启用插件,多个插件用逗号分隔 | 所有 | | HTTP_READ_TIMEOUT | HTTP读取超时(秒) | 自动计算 | | HTTP_WRITE_TIMEOUT | HTTP写入超时(秒) | 自动计算 | | HTTP_IDLE_TIMEOUT | HTTP空闲超时(秒) | `120` | @@ -146,7 +146,7 @@ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w -extldflags '-sta ``` [program:pansou] -environment=PORT=8888,CHANNELS="tgsearchers3,yunpanxunlei,tianyifc,BaiduCloudDisk,txtyzy,peccxinpd,gotopan,xingqiump4,yunpanqk,PanjClub,kkxlzy,baicaoZY,MCPH01,share_aliyun,bdwpzhpd,ysxb48,jdjdn1111,yggpan,MCPH086,zaihuayun,Q66Share,NewAliPan,ypquark,Oscar_4Kmovies,ucwpzy,alyp_TV,alyp_4K_Movies,shareAliyun,alyp_1,dianyingshare,Quark_Movies,XiangxiuNBB,NewQuark,ydypzyfx,kuakeyun,ucquark,xx123pan,yingshifenxiang123,zyfb123,tyypzhpd,tianyirigeng,cloudtianyi,hdhhd21,Lsp115,oneonefivewpfx,Maidanglaocom,qixingzhenren,taoxgzy,tgsearchers115,Channel_Shares_115,tyysypzypd,vip115hot,wp123zy,yunpan139,yunpan189,yunpanuc,yydf_hzl,alyp_Animation,alyp_JLP,leoziyuan" +environment=PORT=8888,CHANNELS="tgsearchers3,yunpanxunlei,tianyifc,BaiduCloudDisk,txtyzy,peccxinpd,gotopan,xingqiump4,yunpanqk,PanjClub,kkxlzy,baicaoZY,MCPH01,share_aliyun,bdwpzhpd,ysxb48,jdjdn1111,yggpan,MCPH086,zaihuayun,Q66Share,NewAliPan,ypquark,Oscar_4Kmovies,ucwpzy,alyp_TV,alyp_4K_Movies,shareAliyun,alyp_1,dianyingshare,Quark_Movies,XiangxiuNBB,NewQuark,ydypzyfx,kuakeyun,ucquark,xx123pan,yingshifenxiang123,zyfb123,tyypzhpd,tianyirigeng,cloudtianyi,hdhhd21,Lsp115,oneonefivewpfx,Maidanglaocom,qixingzhenren,taoxgzy,tgsearchers115,Channel_Shares_115,tyysypzypd,vip115hot,wp123zy,yunpan139,yunpan189,yunpanuc,yydf_hzl,alyp_Animation,alyp_JLP,leoziyuan",ENABLED_PLUGINS="labi,zhizhen,shandian,duoduo,muou" command=/home/work/pansou/pansou directory=/home/work/pansou autostart=true diff --git a/config/config.go b/config/config.go index bd5a28b..e67ff02 100644 --- a/config/config.go +++ b/config/config.go @@ -300,11 +300,20 @@ func getAsyncPluginEnabled() bool { return enabled != "false" && enabled != "0" } -// 从环境变量获取启用的插件列表,如果未设置则返回空切片(表示启用所有) +// 从环境变量获取启用的插件列表 +// 返回nil表示未设置环境变量(不启用任何插件) +// 返回[]string{}表示设置为空(不启用任何插件) +// 返回具体列表表示启用指定插件 func getEnabledPlugins() []string { - plugins := os.Getenv("ENABLED_PLUGINS") + plugins, exists := os.LookupEnv("ENABLED_PLUGINS") + if !exists { + // 未设置环境变量时返回nil,表示不启用任何插件 + return nil + } + if plugins == "" { - return []string{} // 空切片表示启用所有插件 + // 设置为空字符串,也表示不启用任何插件 + return []string{} } // 按逗号分割插件名 diff --git a/docker-compose.yml b/docker-compose.yml index 9e3ffb9..2c333c4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,6 +10,8 @@ services: environment: - PORT=8888 - CHANNELS=tgsearchers3,SharePanBaidu,yunpanxunlei,tianyifc,BaiduCloudDisk + # 必须指定启用的插件,多个插件用逗号分隔 + - ENABLED_PLUGINS=labi,zhizhen,shandian,duoduo,muou,wanou - CACHE_ENABLED=true - CACHE_PATH=/app/cache - CACHE_MAX_SIZE=100 diff --git a/docs/MCP-SERVICE.md b/docs/MCP-SERVICE.md index 673c624..9e68bf3 100644 --- a/docs/MCP-SERVICE.md +++ b/docs/MCP-SERVICE.md @@ -181,7 +181,8 @@ node .\typescript\dist\index.js "BACKEND_STARTUP_TIMEOUT": "30000", "IDLE_TIMEOUT": "300000", "ENABLE_IDLE_SHUTDOWN": "true", - "PROJECT_ROOT_PATH": "C:\\full\\path\\to\\your\\project" + "PROJECT_ROOT_PATH": "C:\\full\\path\\to\\your\\project", + "ENABLED_PLUGINS": "labi,zhizhen,shandian,duoduo,muou,wanou" } } } @@ -191,6 +192,7 @@ node .\typescript\dist\index.js **注意**: - 请将 `C:\\full\\path\\to\\your\\project` 替换为您项目实际的完整路径 - 如需强制指定部署模式,可修改 `DOCKER_MODE` 和 `AUTO_START_BACKEND` 参数 +- **重要**:从当前版本开始,必须通过 `ENABLED_PLUGINS` 显式指定要启用的插件,否则不会启用任何插件 ### 4. 启动 MCP 服务并开始使用 @@ -309,6 +311,7 @@ MCP 服务通过工具调用接收参数。以下是主要工具及其支持的 | `MAX_RESULTS` | (内部使用,限制处理结果数量) | `100` | | `DEFAULT_CHANNELS` | 默认搜索的 Telegram 频道列表(逗号分隔)。 | `""` (使用后端默认) | | `DEFAULT_PLUGINS` | 默认使用的搜索插件列表(逗号分隔)。 | `""` (使用后端默认或所有) | +| `ENABLED_PLUGINS` | 指定后端启用的插件列表(逗号分隔),必须显式指定。 | `""` (需要显式设置) | | `DEFAULT_CLOUD_TYPES` | 默认的网盘类型过滤器(逗号分隔)。 | `""` (无过滤) | | `AUTO_START_BACKEND` | 是否在 MCP 服务启动时自动尝试启动后端服务。 | `true` | | `DOCKER_MODE` | 部署模式控制。设置为 `true` 强制使用 Docker 模式;设置为 `false` 或未设置时启用智能检测。智能检测将自动识别 Docker 容器、源码部署或运行中的服务。 | `false` (智能检测) | diff --git a/main.go b/main.go index fd69853..cbbe2bf 100644 --- a/main.go +++ b/main.go @@ -25,6 +25,8 @@ import ( // 以下是插件的空导入,用于触发各插件的init函数,实现自动注册 // 添加新插件时,只需在此处添加对应的导入语句即可 + // _ "pansou/plugin/hdr4k" + // _ "pansou/plugin/pan666" _ "pansou/plugin/hunhepan" _ "pansou/plugin/jikepan" _ "pansou/plugin/panwiki" @@ -60,6 +62,7 @@ import ( _ "pansou/plugin/hdmoli" _ "pansou/plugin/yuhuage" _ "pansou/plugin/u3c3" + _ "pansou/plugin/javdb" _ "pansou/plugin/clxiong" _ "pansou/plugin/jutoushe" _ "pansou/plugin/sdso" @@ -321,12 +324,8 @@ func printServiceInfo(port string, pluginManager *plugin.PluginManager) { if config.AppConfig.AsyncPluginEnabled { plugins := pluginManager.GetPlugins() if len(plugins) > 0 { - // 显示是否有特定的插件过滤 - if len(config.AppConfig.EnabledPlugins) > 0 { - fmt.Printf("已启用指定插件 (%d个):\n", len(plugins)) - } else { - fmt.Printf("已加载所有插件 (%d个):\n", len(plugins)) - } + // 根据新逻辑,只有指定了具体插件才会加载插件 + fmt.Printf("已启用指定插件 (%d个):\n", len(plugins)) // 按优先级排序(优先级数字越小越靠前) sort.Slice(plugins, func(i, j int) bool { @@ -341,10 +340,13 @@ func printServiceInfo(port string, pluginManager *plugin.PluginManager) { fmt.Printf(" - %s (优先级: %d)\n", p.Name(), p.Priority()) } } else { - if len(config.AppConfig.EnabledPlugins) > 0 { + // 区分不同的情况 + if config.AppConfig.EnabledPlugins == nil { + fmt.Println("未设置插件列表 (ENABLED_PLUGINS),未加载任何插件") + } else if len(config.AppConfig.EnabledPlugins) > 0 { fmt.Printf("未找到指定的插件: %s\n", strings.Join(config.AppConfig.EnabledPlugins, ", ")) } else { - fmt.Println("未加载到任何插件") + fmt.Println("插件列表为空 (ENABLED_PLUGINS=\"\"),未加载任何插件") } } } diff --git a/mcp-config.json b/mcp-config.json index 47bdcec..dfd574f 100644 --- a/mcp-config.json +++ b/mcp-config.json @@ -16,7 +16,8 @@ "BACKEND_STARTUP_TIMEOUT": "30000", "IDLE_TIMEOUT": "300000", "ENABLE_IDLE_SHUTDOWN": "true", - "PROJECT_ROOT_PATH": "C:\\full\\path\\to\\your\\project" + "PROJECT_ROOT_PATH": "C:\\full\\path\\to\\your\\project", + "ENABLED_PLUGINS": "labi,zhizhen,shandian,duoduo,muou,wanou" } } }, @@ -43,7 +44,8 @@ "BACKEND_STARTUP_TIMEOUT": "后端服务启动超时(毫秒),默认30000", "IDLE_TIMEOUT": "空闲超时时间(毫秒),默认300000(5分钟)", "ENABLE_IDLE_SHUTDOWN": "是否启用空闲自动关闭,默认true", - "PROJECT_ROOT_PATH": "项目根目录路径,用于查找Go可执行文件" + "PROJECT_ROOT_PATH": "项目根目录路径,用于查找Go可执行文件", + "ENABLED_PLUGINS": "指定启用的插件列表,多个插件用逗号分隔,必须显式指定" }, "使用示例": { "自动模式": "默认配置,自动检测部署方式", diff --git a/plugin/plugin.go b/plugin/plugin.go index 806a10c..413ae5f 100644 --- a/plugin/plugin.go +++ b/plugin/plugin.go @@ -97,19 +97,24 @@ func (pm *PluginManager) RegisterPlugin(plugin AsyncSearchPlugin) { // RegisterAllGlobalPlugins 注册所有全局异步插件 func (pm *PluginManager) RegisterAllGlobalPlugins() { - pm.RegisterGlobalPluginsWithFilter([]string{}) + allPlugins := GetRegisteredPlugins() + for _, plugin := range allPlugins { + pm.RegisterPlugin(plugin) + } } // RegisterGlobalPluginsWithFilter 根据过滤器注册全局异步插件 -// enabledPlugins: 启用的插件名称列表,如果为空则启用所有插件 +// enabledPlugins: nil表示未设置(不启用任何插件),空切片表示设置为空(不启用任何插件),具体列表表示启用指定插件 func (pm *PluginManager) RegisterGlobalPluginsWithFilter(enabledPlugins []string) { allPlugins := GetRegisteredPlugins() - // 如果没有指定启用的插件,则启用所有插件 + // nil 表示未设置环境变量,不启用任何插件 + if enabledPlugins == nil { + return + } + + // 空切片表示设置为空字符串,也不启用任何插件 if len(enabledPlugins) == 0 { - for _, plugin := range allPlugins { - pm.RegisterPlugin(plugin) - } return }