144 lines
5.3 KiB
Markdown
144 lines
5.3 KiB
Markdown
# 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["① 用户输入<br/>电影 / 电视剧 / 编号 / 剧情 / 演职人员 / 类型"] --> B["② AI 理解意图<br/>intent · target · source · explain"]
|
||
B --> C["③ 回复 🔍 搜索:目标"]
|
||
C --> D["④ 选择最合适的爬虫 / API"]
|
||
D --> D1{意图 intent}
|
||
D1 -->|编号| E["按编号搜索<br/>编号索引站"]
|
||
D1 -->|演职人员| F["演职人员搜索"]
|
||
D1 -->|关键词 / 类型 / 剧情| G["关键词 → BT 种子"]
|
||
E --> H["⑤ 回复 ⏳ 搜索中"]
|
||
F --> H
|
||
G --> H
|
||
H --> I["⑥ 搜索得到磁力链接<br/>(无磁力则返回 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
|
||
```
|
||
|
||
## 致谢
|
||
|
||
<a href="https://www.jetbrains.com/">
|
||
<img src="https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.png" alt="JetBrains Logo (Main) logo." style="width: 200px;"></a>
|
||
|
||
感谢 JetBrains 对这个项目的支持!
|