---
## ✨ 这是什么
一个脚本搞定 **WorkBuddy 成长中心 + 小程序/PC 链式任务** 的全部自动化:**Token 自动续期 → 积分/用量/成长查询 → 22 项云端任务 → 6 项小程序链式任务 + 1 项 PC 灵感任务 → 8 项互动玩法 → 按进度自动补领 → 中文报告推送**,全流程无人值守,重复运行只补缺口、不重复领取。
>
> 🗂️ **活动下线就归档**:已结束/已下架的任务(开学季活动、校园日、公益专家)不再占着主脚本,代码移到 [`archive/`](archive/) 留档,主脚本保持精简。
> 🎯 一句话:**配一个刷新令牌,剩下交给它。**
>
> 📦 **单文件自包含**:无需任何配套模块(专家市场数据、推送通知全部内置),青龙上传一个 `workbuddy_daily.py` 即可运行。
>
> ☁️ **云端部署**:除了青龙,也支持直接跑在 **GitHub Actions** 上,零服务器、定时自动执行。
>
> ⬇️ **不想用 git?** 直接到 **[Releases](https://github.com/L0NE-6/WorkBuddy-Daily/releases)** 下载:完整包 zip(主脚本 + 登录工具 + README + Actions 工作流)、单文件 `workbuddy_daily.py`、登录工具 `workbuddy_login.py`——每个包都附 SHA256 校验值。
---
## 🌍 国际版每日活跃(workbuddy.ai)
国际版的每日奖励不是普通签到,而是一条**活跃任务**链,单独一个脚本:
1. 探测活动是否开放、今天是否已领(`/billing/meter/checkin-activity-status`);
2. 开放且未领时领取每日奖励(`/v2/billing/meter/daily-checkin`);
3. 活跃三件事(互补):
- **活跃上报** `POST /v2/report` → 点亮成长中心的「连登」(并回读连登天数);
- **保活对话** `POST /v2/chat/completions` → 维持「账号有调用」(免费模型,不消耗积分);
- **网页会话** `POST /console/as/conversations/` → 上游「当日活跃」计数只认这一发。
```bash
python workbuddy_intl_daily.py # 探测 + 领取 + 活跃(上报 / 保活 / 网页会话)
python workbuddy_intl_daily.py --no-keepalive # 只探测、领取与上报,不发保活对话与网页会话
python workbuddy_intl_daily.py --only 1 # 只跑第一个账号
```
| 环境变量 | 说明 |
| :--- | :--- |
| `WORKBUDDY_INTL_TOKENS` | 多账号,换行或 `&` 分隔;每条 `token` / `备注\|token` / `备注\|token\|uid` / `备注\|token\|uid\|refresh_token` |
| `WORKBUDDY_TOKEN` | 单账号兜底(国际版登录态) |
| `WORKBUDDY_INTL_MODELS` | 可选,保活模型链,逗号分隔;默认官方免费的四个 |
| `WORKBUDDY_INTL_TOKENS`(获取) | 纯 OAuth 账号(Google / GitHub / X)用 `python workbuddy_intl_login.py` 走设备授权登录,免手机号 |
> ⚠️ 国际版登录态与国内版不通用:`workbuddy.ai` 的令牌在 `copilot.tencent.com` 刷不了,反之亦然。
>
> 🚫 每个国际版账号在刷新 RT 和写操作前会先做一次只读状态预检;命中 `11140 / request illegal` 时明确标记为账号受限并结束该账号本轮,不继续刷新或重试。
> ℹ️ 保活对话出现 `HTTP 403` 通常是当前免费模型无权限,**不是账号风控**;真正的账号受限以 `11140 / request illegal` 为准,预检会直接报「账号受限」。
> 带上 `refresh_token` 时脚本会自动续期并写回 `wb_intl_tokens.json`;只给 AT 时按短期令牌使用。
> 活动未开放属于正常状态,不会当成失败;签到成功与活跃结果分开报告,任一发失败都不会把签到判成失败。
> 活动未开启但活跃上报 / 网页会话成功时,会按「今日活跃已完成」报告(积分由上游异步发放)。
## 🚀 部署方式一:青龙面板(三步)
| 步骤 | 操作 |
| :---: | :--- |
| **1️⃣ 上传脚本** | 把 `workbuddy_daily.py` 放到脚本目录 |
| **2️⃣ 设置变量** | `WORKBUDDY_REFRESH_TOKEN` = 每行一个 `手机号:AT:RT`(多账号换行分隔) |
| **3️⃣ 定时任务** | 日常 `0 7,12 * * *` · 夜猫子窗口 `30 23 * * *`(**青龙用本地时间**) |
> 🐧 **命令必须用青龙运行器(高频坑)**:定时任务命令填 **`task workbuddy_daily.py`**(面板「定时任务 → 新建任务」时从脚本列表里选),**不要填裸 `python workbuddy_daily.py`** —— 裸 `python` 调用不会注入面板环境变量,脚本会直接报「请设置环境变量 WORKBUDDY_REFRESH_TOKEN」(issue #16 实证:变量明明存在、测试脚本也能读到,就是它)。
>
> ⬇️ 脚本可以从 **[Releases](https://github.com/L0NE-6/WorkBuddy-Daily/releases)** 下载(青龙只需上传里面的 `workbuddy_daily.py`)。
> 🌙 **为什么需要单独的夜猫定时?** 夜猫子任务只在 **23:00–08:00** 期间计入进度,且要求**真实对话**(不能指纹伪造)。
> 日常的 7 点、12 点都不在窗口内,所以必须有 `30 23 * * *` 这个专门的窗口定时,否则夜猫子永远跑不了。
>
> 📌 官方规则是「**每天 1 次 × 累计 3 天**」,脚本有响应即停,不会一晚空跑多次。
>
> 📢 **通知**:面板里配了啥通知就用啥,连 webhook 都不用填 —— 青龙 2.18+ 配 `QL_CLIENT_ID` + `QL_CLIENT_SECRET`(面板「应用授权」,需 system 权限),旧版自动读 `auth.json`;也支持 PushPlus / Bark / WxPusher / Server酱 / 企业微信 / 钉钉六种 webhook 渠道。
```bash
# 依赖(仅一个)
pip3 install requests
```
---
## ☁️ 部署方式二:GitHub Actions(零服务器 · 推荐)
> 本仓库已内置工作流 [`.github/workflows/workbuddy.yml`](.github/workflows/workbuddy.yml),**Fork / Import 到你自己的账号**即可开启云端定时签到。
>
> ⚠️ **维护者的这个仓库已关闭 Actions**(不跑定时、也不会再发失败通知);想用云端定时,请先 **Fork / Import 到你自己的账号**,再按下面的步骤开启。
### 第 1 步:添加 Secrets(仓库 → Settings → Secrets and variables → Actions)
| Secret 名称 | 必填 | 值 |
| :--- | :---: | :--- |
| `WORKBUDDY_REFRESH_TOKEN` | ⬜ | 国内版账号,每行一个 `手机号:AT:RT`(多账号换行分隔);只跑国际版可留空 |
| `WORKBUDDY_INTL_TOKENS` | ⬜ | 国际版多账号,换行或 `&` 分隔;每条 `token` / `备注\|token` / `备注\|token\|uid` / `备注\|token\|uid\|refresh_token` |
| `WORKBUDDY_TOKEN` | ⬜ | 国际版单账号兜底(登录态) |
| `WORKBUDDY_INTL_MODELS` | ⬜ | 可选,国际版保活模型链,逗号分隔 |
| `PUSHPLUS_TOKEN` | ⬜ | 可选,PushPlus 推送令牌 |
| `BARK_URL` | ⬜ | 可选,Bark 推送(iOS),如 `https://api.day.app/xxxxxxxx` |
| `WXPUSHER_APP_TOKEN` | ⬜ | 可选,WxPusher 应用令牌(`AT_` 开头),在 wxpusher.zjiecode.com 创建应用后获得 |
| `WXPUSHER_UID` | ⬜ | 可选,WxPusher 用户 UID(`UID_` 开头),多个用逗号/分号分隔 |
| `SERVERCHAN_SENDKEY` | ⬜ | 可选,Server酱 微信推送([官网](https://sct.ftqq.com) 免费获取,免费额度每天 5 条)。`sctp` 开头的是方糖专属通道,脚本会自动切到对应域名 |
| `WORKBUDDY_NOTIFY` | ⬜ | 可选,推送策略:`always`(默认,每次运行都推)/ `fail`(仅本轮有异常时推:签到未确认、账号异常中断)/ `0`(关闭推送) |
| `WECOM_WEBHOOK` | ⬜ | 可选,企业微信群机器人 webhook(或仅 key) |
| `DINGTALK_WEBHOOK` | ⬜ | 可选,钉钉群机器人 webhook(安全设置:自定义关键词或加签) |
| `DINGTALK_SECRET` | ⬜ | 可选,钉钉加签密钥(机器人选「加签」时必填) |
| `QL_CLIENT_ID` + `QL_CLIENT_SECRET` | ⬜ | 可选(**青龙 2.18+ 用面板默认通知时必填**):面板 →「应用授权」→ 新建应用,勾选 **system** 权限,把 client_id / client_secret 填进来。脚本用 `GET /open/auth/token` 换令牌(30 天有效,每次运行现换)后调 `PUT /open/system/notify` |
| `QL_URL` / `QL_DIR` / `QL_TOKEN` | ⬜ | 可选:面板地址(默认 `http://127.0.0.1:5700`)/ 数据目录(默认 `/ql`)/ 旧版面板 token;旧版还会自动读 `$QL_DIR/config/auth.json` 与 `$QL_DIR/data/config/auth.json` |
| `WORKBUDDY_TASKS` | ⬜ | 可选,白名单子任务(如 `checkin,travel`) |
| `WORKBUDDY_SKIP_TASKS` | ⬜ | 可选,黑名单子任务(如 `lottery,redeem`) |
| `WORKBUDDY_MP_GAP` | ⬜ | 可选,mp 对话事件间隔秒数(默认 `45`,调小可提速但可能被上游反作弊回滚) |
| `WORKBUDDY_ACTIVITY_STATE` | ⬜ | 可选,每日活跃上报的本地去重文件路径 |
| `WORKBUDDY_ACTIVITY_CHAT_FALLBACK` | ⬜ | 可选,合成活跃事件未点亮热力图时是否补一次真实对话(默认 `1`) |
| `WORKBUDDY_BENEFIT_STATE` | ⬜ | 可选,补偿/礼包本地期次防重文件路径 |
| `WORKBUDDY_STATE_DIR` | ⬜ | 可选,状态文件目录(`wb_refresh_tokens.json` / `WORKBUDDY_ACCESS_TOKEN.txt` / 补偿防重等)。不设=脚本同级目录(原行为);容器部署、脚本目录只读,或升级会覆盖脚本目录时,指向持久目录可避免轮换后的令牌库被一并替换 |
| `WORKBUDDY_MAKEUP_MAX_PER_RUN` | ⬜ | 可选,每轮最多补签几张(默认 `1`,最高 `10`) |
> 点 **New repository secret**,Name 填上面的名称,Secret 粘贴对应的值,保存。
>
> 同一个 workflow 会自动检测配置:只配国内就只跑 `workbuddy_daily.py`,只配国际就只跑 `workbuddy_intl_daily.py`,两边都配则依次执行。
### 第 2 步:开启 Actions
进入仓库 **Actions** 标签页,若提示需要启用,点 **I understand my workflows, go ahead and enable them**。
### 第 3 步:手动跑一次验证
Actions → 左侧选 **🌱 WorkBuddy Daily** → **Run workflow** → 选 `main` 分支 → 运行。看到 ✅ 即部署成功。
### 内置定时(北京时间)
| 时间 | UTC cron | 说明 |
| :---: | :---: | :--- |
| 07:00 | `0 23 * * *` | 日常全流程 |
| 12:00 | `0 4 * * *` | 日常全流程 |
| 23:30 | `30 15 * * *` | 夜猫子活动窗口 |
> 需要改时间,编辑 `workbuddy.yml` 里的 `cron`(**注意是 UTC,北京时间 − 8 小时**)。
>
> 🕐 工作流已设置 `TZ: Asia/Shanghai`——否则 runner 默认 UTC,会导致**日志时间显示错误**和**补签日期算错一天**。脚本内部也用 `beijing_now()` / `beijing_today()` 强制北京时间,双保险。
### ⚠️ 令牌状态与安全(重要)
- 脚本每次续期都会**轮换刷新令牌**并写入 `wb_refresh_tokens.json`。
- 工作流内置安全判断:**仅在「私有仓库」中**把 `wb_refresh_tokens.json` 提交回仓库;**公开仓库会自动跳过**,避免 RT 泄露。
- ⚠️ **GitHub 不允许修改 Fork 仓库的可见性**(提示原文:*For security reasons, you cannot change the visibility of a fork*)。所以想要「私有仓库 + 令牌持久化」,**请不要用 Fork**,改用以下任一方式:
**方式 A:Import(推荐,最省事)**
1. 打开