Files
ql-scripts/README.md
zhuhjay 3a711d0a47 fix(notify): 平台回 204 被误判为失败 + 诊断工具改名 scrip_
三个改动:

1) sendNotify.js 的 webhook 判据从 statusCode !== 200 改成 2xx 一律成功。
   平台 /api/hooks/ql 按设计回 204(表示已接收且不写 event_logs),
   原判据把 204 当失败 → 每轮日志都打「自定义发送通知消息失败!!」,
   而投递其实成功了。这是纯假警报,也是这次误判的根因。
   同时把状态码打进日志,真失败时能直接看出是 401/403/400/429。

2) _diag_notify.js → scrip_diag_notify.js。
   订阅白名单是 scrip_,不带前缀的文件拉不下来,工具等于不存在。
   加 // cron: 0 0 1 1 * 与 // name:,避免青龙自动建任务时落随机 cron。
   正文补到六段:sendNotify 加载 / env / webhook 三前置条件与 body+headers
   解析复刻 / 直打平台按状态码定位 / pushplus txt-vs-html 模板对比 /
   完整 sendNotify 对照。

3) 文档补齐平台侧的两道硬校验:来源 IP 必须 127.0.0.1 或 172.16/12
   (走公网域名会变成反代地址 → 403),回环带 XFF 一律 403。
   给出指向平台的完整 env 写法(WEBHOOK_BODY 必须多行,单行 JSON
   会被 parseString 整段吞掉 —— 已实测解析结果为 0 个 key)。

验证:node --check(sendNotify + 诊断)/ 5 个 mock 状态码用例
(204/401/403/400/429)全部被正确识别 / _probe_meta 四文件 PASS
2026-11-05 09:34:06 +08:00

94 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 青龙面板脚本库
这是一个专为青龙面板设计的脚本库,包含各种自动化脚本和工具。
## 简介
青龙面板是一个支持 Python3、JavaScript、Shell、Typescript 的定时任务管理平台。本仓库提供了一系列实用的脚本,帮助用户更好地使用青龙面板进行自动化任务管理。
## 功能特性
- 📦 丰富的脚本库
- 🔧 易于配置和使用
- 📝 详细的文档说明
- 🚀 持续更新维护
## 脚本列表
| 脚本名称 | 文件路径 | 功能描述 | 环境变量 | 定时规则 |
|---------|---------|----------|----------|----------|
| 京东Cookie辅助脚本 | `jd/scrip_moving_env_enhance.js` | 将JD CK进行重排序,保证所有账号都有助力与被助力的机会 | 需要修改脚本内域名(对应ql的域名) | `59 23 */3 * *` |
| 携趣白名单切换 | `xiequ/scrip_switch.js` | 多个携趣账号,多个IP,自动选择合适的携趣进行白名单切换 | `XQ_ACCOUNTS`<br />`XQ_WHITELIST` | `38 2,8,14,20 * * *` |
| QQ音乐自动签到 | `qqmusic/scrip_qqmusic_checkin.js` | QQ音乐会员成长值任务 + 会员福利站自动签到(签到/挂件/装扮/听书/节目/礼券/月里程碑/抽奖) | `SH_QQMUSIC_KEY`<br />(多账号同名多条,格式 `<uin>#<qm_keyst>`) | `1 0,6 * * *` |
| 通知链路诊断 | `scrip_diag_notify.js` | 排查「通知只收到标题」「自定义发送通知消息失败」:查 sendNotify 加载、env、webhook 前置条件、body 解析、直打平台、pushplus 模板对比 | 无(读现有通知 env) | `0 0 1 1 *`(等于不自动跑,手动执行) |
> **文件名约定**:订阅白名单是 `scrip_`,所有脚本文件必须带该前缀才会被拉取。
> 详见各目录下的 README。
## 安装使用
### 环境要求
- Node.js >= 14.0.0
- 青龙面板 >= 2.10.0
### 快速开始
1. 订阅
```bash
ql repo https://gitea.zhuhjay.cn/zhuhjay/ql-scripts.git "scrip_" "" "sendNotify|common" "js"
```
## 青龙自动建任务的元数据约定(必读)
订阅勾了「自动添加定时任务」时,青龙从**脚本正文**正则提取任务名与 cron。
两条正则都**不锚定行首、取全文第一个命中**(2026-11-04 真机踩坑实录):
| 项 | 青龙的提取规则 | 必须怎么写 |
|---|---|---|
| **任务名** | `/name:\s*(.+)/` | 文件最前面写一行 `// name: 中文任务名`。**全文任何位置都不能再出现「name + 冒号」的连写** —— `https.request({ hostname: u.hostname })` 会被抓成任务名 `u.hostname,`(已复现) |
| **cron** | `/\bcron:\s*([^\r\n]+)/`,**必须带冒号** | 写 `// cron: 1 0,6 * * *`,**独占一行、后面不跟任何注释**(同一行剩余文字会被一起吞进 schedule) |
两个都抓不到时的兜底:任务名 = 文件名;cron = 随机 `M H * * *`(这就是那次任务被建成 `18 21 * * *` 的原因)。
**自检**:
```bash
node _probe_meta.js # 扫描所有 scrip_*.js,复刻两个版本青龙的正则,验证提取结果
```
`_probe_meta.js` 是开发期工具,不带 `scrip_` 前缀,不会被订阅拉取。
新增脚本后跑一次,全 PASS 再提交。
### 各脚本的注解写法
```js
// cron: <表达式>
// name: <中文任务名>
/** 说明文字写这里,注意别写 "name:" 连写 */
```
用**行注释**而不是块注释:块注释里 cron 的 `*/` 会提前闭合注释,必须写成 `*\/`,
而青龙会把反斜杠一起提取出去导致 cron 非法。
## 脚本说明
### 使用方法
每个脚本都有详细的使用说明,请查看对应的文档或脚本内的注释。
## 注意事项
- 请确保脚本符合青龙面板的规范
- 使用前请仔细阅读脚本说明
- 定期更新脚本以获得最新功能
## 免责声明
本项目仅供学习交流使用,请勿用于非法用途。使用本项目所产生的一切后果由使用者自行承担。
---
⭐ 如果这个项目对你有帮助,请给个 Star 支持一下!