# tg-search-bot [English](README.md)|[中文](README.zh.md) 一个基于 Python3 的 Telegram 资源搜索机器人:搜索各类视频磁力链接,支持收藏、导出记录、自动保存到网盘,可配置 NSFW 开关与代理上网;同时集成 AI 自然语言理解能力,可直接根据用户自然语言意图自动识别搜索目标、类型与数据源。 - 数据来源:TorrentKitty(中文)+ apibay(英文)+ 影视磁力索引 API(Jvav) - 网盘:Pikpak 官方 OpenAPI - AI:任意 OpenAI 兼容接口,支持意图识别与自动搜索 ## 功能 - 按编号 / 演职人员 / 关键词搜索影片,返回封面、评分、日期、标签、演职人员及磁力链接(支持 HD / 字幕等过滤) - 获取预览视频、完整视频与影片截图 - 收藏与导出记录(`record.json`) - 排行榜、随机高分 / 最新影片 - 自动把最优磁力链接保存到 Pikpak(登录 token 直传离线任务) - AI 自然语言理解搜索:识别编号 / 演职人员 / 片名 / 剧情 / 类型并自动选择数据源 - BT 种子搜索(中文 / 英文双引擎),结果分页 - 多轮追问:`换一批` / `下一页` / `上一页` / `保存第N个` - 可配置 NSFW 开关与代理上网 ## 核心流程(AI 自然语言搜索) 搜索流程: 1. 用户输入想要的资源 / 资源相关信息(电影、电视剧名称、影片编号、剧情 / 对话、演职人员、影片类型) 2. AI 根据输入理解用户目标(根据剧情推测片名、根据类型推荐等),输出 `intent / target / source / explain` 3. 机器人回复:`🔍 搜索:{目标}` 4. AI 选择最合适的爬虫 / API 进行搜索(编号 → 编号索引站,演职人员 → 演职人员搜索,其余 → 关键词或 BT) 5. 机器人回复:`⏳ 搜索中 ...` 6. 爬虫 / API 搜索得到磁力链接(没有磁力时返回 BT 种子等其他格式内容) 7. 机器人回复:`📄 搜索结果` 8. 程序将最优磁力链接保存到已配置的网盘(PikPak) 9. 机器人回复:`✅ 保存结果:已提交离线任务到 PikPak` > 未配置 AI 接口时自动回退到原来的编号识别 + BT 关键词搜索逻辑。 ```mermaid flowchart TD A["① 用户输入
电影 / 电视剧 / 编号 / 剧情 / 演职人员 / 类型"] --> B["② AI 理解意图
intent · target · source · explain"] B --> C["③ 回复 🔍 搜索:目标"] C --> D["④ 选择最合适的爬虫 / API"] D --> D1{意图 intent} D1 -->|编号| E["按编号搜索
编号索引站"] D1 -->|演职人员| F["演职人员搜索"] D1 -->|关键词 / 类型 / 剧情| G["关键词 → BT 种子"] E --> H["⑤ 回复 ⏳ 搜索中"] F --> H G --> H H --> I["⑥ 搜索得到磁力链接
(无磁力则返回 BT 等其他格式)"] I --> J["⑦ 回复 📄 搜索结果"] J --> K["⑧ 保存最优磁力链接到 PikPak"] K --> L["⑨ 回复 ✅ 保存结果"] ``` ## 目录结构 ``` bot.py 主程序:配置、日志、消息 / 回调处理、AI 搜索流程 ai.py AI 意图理解客户端(OpenAI 兼容 /chat/completions) pikpak.py Pikpak 官方 OpenAPI 客户端(登录 / 刷新 token、离线下载) database.py 数据层:BotFileDb(JSON 收藏)+ BotCacheDb(SQLite 缓存) requirements.txt 依赖 docker-compose.yml 一键部署 ``` 配置与数据文件存放于 `~/.tg_search_bot/`:`config.yaml`(主配置)、`record.json`(收藏)、`cache.db`(缓存)、`pikpak_token.json`(Pikpak 登录态)、`log.txt`(日志)。 ## 使用 ### 1. 配置 编辑 `~/.tg_search_bot/config.yaml`: ```yaml # 必填,你的 Telegram chat id tg_chat_id: # 必填,你的 Telegram bot token tg_bot_token: # 必填,是否启用全局代理,1 是 / 0 否 use_proxy: # 可选,代理地址(use_proxy 为 1 时必填),如 http://127.0.0.1:7890 proxy_addr: # 必填,是否开启 NSFW 内容,1 是 / 0 否 enable_nsfw: 0 # 可选,Pikpak 账号(用于自动保存磁力到网盘,官方 API) pikpak_username: pikpak_password: # 可选,AI 自然语言搜索(任意 OpenAI 兼容接口) ai_base_url: ai_api_key: ai_model: ``` ### 2. 运行 ```sh # 方式一:Docker 一键部署 docker-compose up -d # 方式二:直接运行(Python >= 3.9) pip install -r requirements.txt python3 bot.py ``` ### 3. 命令 | 命令 | 说明 | | --- | --- | | `/help` | 查看帮助 | | `/stars` | 查看已收藏演职人员 | | `/ids` | 查看已收藏编号 | | `/record` | 导出收藏记录文件 | 直接发送电影名 / 关键词 / 编号 / 剧情 / 演员名 / 类型即可,AI 会自动识别并搜索。 ### 4. 多轮追问 BT 搜索结果每页 5 条,可继续回复: - `换一批` / `下一页` / `还有吗` — 下一页 - `上一页` — 上一页 - `保存第N个`(或 `save N`)— 把第 N 条磁力保存到 Pikpak ## 开发 推荐使用 Python 3.9,并建议使用虚拟环境: ```sh git clone https://github.com/akynazh/tg-search-bot.git cd tg-search-bot python3 -m venv .venv source ./.venv/bin/activate pip3 install -r requirements.txt ``` ## 致谢 JetBrains Logo (Main) logo. 感谢 JetBrains 对这个项目的支持!