pt-tools
RSS → 下载器 · 跨站统计 · Web + ChatOps · Go 单二进制
把重复的那几步交出去,把判断留给自己。 在多个 PT 站点上维护账号,日常动作是固定的:翻订阅、看有没有免费种、推给下载器、过一段时间回来清理、月底汇总一下各站的数据。这些步骤本身没有难度,只是需要有人一直盯着。pt-tools 把这些循环接过去,并且每个循环都带着自己的边界条件 —— H&R 保护、磁盘剩余空间下限、免费期结束时的处理策略。
不配过滤规则时,RSS 只下免费种
这是订阅路径的默认值,也是最容易被误解的一条。没有启用任何过滤规则的时候,RSS 只会下载免费种子 —— 不是"整个订阅源都拉下来"。想要非免费的内容进入下载队列,必须自己写过滤规则。三种规则可用:
- 关键词匹配 —— 最直接的一种,命中标题里的字符串。
- 通配符 —— 用在剧集、季度、分辨率这类有固定命名结构的场景。
- 正则 —— 前两种表达不了的条件走这条,代价是自己负责它的正确性。
它解决什么问题
难点不在单个动作,而在这些动作要在多个站点上长期重复。手工做的时候,出错的地方是固定的几个:免费期结束了没注意到,种子还在跑;磁盘满了才发现清理规则从来没生效;H&R 还没做够时间的种子被顺手删了;月底想看看各站数据,要一个个登进去抄。pt-tools 把这几件事变成配置项,然后按配置执行,出问题时留下记录。
在多个站点维护账号的人
站点越多,手工翻订阅和抄统计数据的成本越是线性上涨。汇总视图和统一的订阅配置是为这个场景做的。
把下载器跑在服务器上的人
Web 管理界面加 ChatOps,意味着不必为了暂停一个种子去开 SSH。QQ 或 Telegram 的私聊窗口就是控制台。
磁盘吃紧的人
自动清理带磁盘剩余空间下限,清理规则和 H&R 保护一起生效 —— 不会为了腾空间删掉还没做满时长的种子。
登录态经常掉的人
守护登录会话:定期探活,剩余天数不多时提前告警,Web 界面或浏览器扩展一键刷新,而不是等到订阅静默失败了才发现。
五个自动化循环
每个循环都有触发条件、动作和一个约束。约束这一列不是补充说明 —— 它是这些循环敢让它自己跑的原因。
RSS 订阅 → 下载器
按周期解析订阅源,识别其中的免费种子并推送给配置好的下载器;也可以只把 .torrent 存到本地,自己决定什么时候添加。
未启用过滤规则时只取免费种。要取非免费内容,得自己写关键词、通配符或正则规则。
跨站点搜索 → 批量推送
一次查询打到多个站点,结果可以批量下载、批量推送到某个下载器实例,或者整批存成本地文件。
推送目标是显式选择的下载器实例,各自带保存目录与添加后的启动策略,不会混进同一个目录。
免费期结束 → 暂停
监控免费期的截止时间,到点自动暂停对应的种子,避免免费期过后继续产生下载量。
未完成的种子是否一并删除,是一个显式开关,默认不删。
做种达标 → 清理
按做种时长、分享率或无活动时间清理已完成的种子,把空间交还给下一批。
H&R 保护优先于清理规则,并且设有磁盘剩余空间下限 —— 空间够时不会为了"整理"而删。
登录态探活 → 提前告警
定期探测站点侧的活跃状态,剩余天数逐渐减少时提前告警,通过 Web 界面或浏览器扩展一键刷新。
刷新是手动确认的动作,不会拿着过期凭据反复重试把账号撞进风控。
统计与数据卡片
把各站点分散的数字收进一处,并且能直接导出成一张图。
汇总维度
上传量、下载量、分享率、魔力值,以及等级进度 —— 按站点分列,也能看到总和。
数据卡片
把统计渲染成一张卡片图片,用于分享或存档。图片在本机生成,不经过第三方渲染服务。
版本自检
检查是否有新版本;二进制部署方式下可以一键自升级,容器部署则按镜像标签更新。
ChatOps · 从 v0.31 起
把控制台搬进聊天窗口,这样在手机上也能暂停一个种子。两条通道做过端到端验证,另外两条只是"能发出去",下面分开标注 —— 这个区别在真要靠它值班的时候很重要。
QQ · OneBot
NapCat 反向 WebSocket · 私聊指令
通过 NapCat 以反向 WebSocket 接入,指令在私聊里下发。这条通道的收发链路做过完整验证。
Telegram · Bot API
BotFather 长轮询 · 私聊指令 · 支持代理
BotFather 建 Bot,长轮询收消息,私聊下发指令,支持走代理。这条通道的收发链路同样做过完整验证。
企业微信群机器人
群机器人 webhook
代码在,但没有做过端到端验证。当成实验特性用,不要把值班告警只挂在它上面。
自定义 Webhook
HMAC-SHA256 签名
推送到你自己的接收端,请求带 HMAC-SHA256 签名。同样没有做过端到端验证。
13 条内置指令
- /help
- 列出可用指令
- /status
- 运行状态
- /version
- 当前版本
- /tasks
- 任务列表
- /sites
- 站点列表
- /torrents
- 种子列表
- /pause
- 暂停
- /resume
- 恢复
- /delete
- 删除
- /bind
- 绑定账号
- /unbind
- 解绑
- /addrss
- 新增订阅
- /delrss
- 删除订阅
权限与凭据
- 只有名单内的账号能下发指令,其他消息一概不处理。
- 五档可选:5 分钟、1 小时、1 天、30 天、永久。默认取短的那一端。
- 凭据以 AES-GCM 加密落盘,不以明文存放。
- 出站 webhook 带 HMAC 签名,接收端可以校验来源。
- 指令与执行结果留有记录,事后可以回查是谁在什么时候做了什么。
部署
两种部署形态:容器,或者单个二进制。二进制没有运行时依赖 —— Go 编译产物,放到 PATH 上就能跑。
# 拉镜像
$ docker pull sunerpy/pt-tools# 挂载配置与数据目录
$ docker run -d -v ./config:/app/config -p 8080:8080 sunerpy/pt-tools# 从发布页取对应平台的压缩包,解压后放到 PATH 上
$ pt-tools --help# 查看当前版本与是否有更新
$ pt-tools version代理走标准环境变量:HTTP_PROXY、HTTPS_PROXY、ALL_PROXY,例外走 NO_PROXY。二进制部署支持一键自升级;容器部署按镜像标签更新。端口与数据目录以你自己的部署为准,上面的命令是形状示例,不是唯一写法。
技术栈
选型都服务于同一件事:一个进程、一份配置、装在自己机器上。
- Go 1.25+。发布产物是单个可执行文件,不带运行时依赖。
- Web 管理界面,加 QQ / Telegram 两条 ChatOps 通道。
- 多实例,每个实例独立配置保存目录与添加后的启动策略。
- 遵循 HTTP_PROXY / HTTPS_PROXY / ALL_PROXY / NO_PROXY。
- Docker 镜像 sunerpy/pt-tools,以及 Linux 与 Windows 的二进制。
- MIT。
它不做什么
边界写在前面,比事后解释有用。
不替你判断规则
各站点的规则、H&R 要求、免费策略都不一样,工具按你写的配置执行,不会替你判断某个操作在某个站点上是否恰当。配置写错的后果落在你的账号上。
不是下载器
它编排下载器,不实现下载。种子的实际下载与做种由你自己的下载器完成。
不是索引器
搜索走各站点自己的接口,能搜到什么取决于你在那些站点的权限。它不维护自己的种子库。
两条通知通道未经验证
企业微信群机器人和自定义 webhook 属于实验特性,没有做过端到端验证。需要可靠告警时用 QQ 或 Telegram。
成本是你自己的机器
没有托管版本,没有账号体系。它跑在你的机器上,站点凭据也存在那里 —— 这既是设计取向,也意味着备份和安全是你自己的事。
拉一个镜像,或者取一个二进制
Docker 镜像和各平台二进制都在下面。MIT 许可的个人项目,issue 和 PR 都在同一个仓库里。