|
|
WorkBuddy 自动签到教程:L0NE-6/WorkBuddy-Daily 青龙 / GitHub Actions 部署全流程
项目地址:<https://github.com/L0NE-6/WorkBuddy-Daily> (MIT · Python 3.8+ · 依赖仅 requests · 单文件自包含)
教程依据:仓库 README(v3.7)整理,所有命令、变量名、定时规则均照抄原文,未做发挥。
适合谁:有 WorkBuddy 账号、想每天自动领成长中心积分,但不想守着手动点的人。
最终效果:配好一行令牌后,青龙或 GitHub Actions 每天定时自动完成 33 项任务(17 项云端 + 7 项小程序链式 + 8 项玩法 + 每日签到),自动领奖,并把全中文报告推到你的微信 / iOS / 企微 / 钉钉 / 青龙面板。重复运行只补缺口、不重复领取。
一、这是什么:一个脚本搞定成长中心全部自动化
脚本干的事,一条链路:
- Token 自动续期 → 积分/用量/成长查询 → 17 项云端任务 → 7 项小程序链式任务 → 8 项互动玩法 → 自动领奖 → 中文报告推送
复制代码
几个关键设计:
特性说明
| 🔐 Token 永续只用一个刷新令牌(RT),脚本到期间自动续期并轮换写回,不用每月手动更新
| 📦 单文件自包含青龙只上传一个 workbuddy_daily.py 就能跑,专家市场数据、推送通知全部内置
| ♻️ 幂等补缺所有任务先查进度再执行,已完成/已领取直接跳过,重复运行零副作用
| 🛡️ 单账号隔离任一账号凭据失效只跳过该账号,不中断整轮运行
| 📊 全中文报告任务代码自动翻译成中文(如 skill_1 → 尝鲜热门技能),每账号独立分块 + 总计
| | 🧩 不碰客户端文件令牌走短信登录从服务端直接获取,不受客户端本地加密影响(下文细说) |
任务覆盖(另有 1 项需人工:微信公众号关注,需真人扫码关注满 24 小时,脚本只检测并提示):
- 成长中心任务 17 项(云端·全自动):设计创意模式、探索优秀灵感、桌面端对话、尝鲜热门技能、体验资料库、和平精英主题、GLM-5.2 模型对话、和 AI 聊天 5 次、夜猫子活动、召唤 3 次专家团、使用 5 个模板、设置自动化任务、领取 Buddy……
- 小程序成长任务 7 项(链式·每日解锁一环):Sequential_Tasks_1~7,完成一环次日零点解锁下一环,奖励 +100~+500 积分。
- 互动玩法 8 项:抽奖、盲盒、Buddy 信息、派猫猫旅行、连签兑换、补签卡、礼包补偿、徽章。
- 每日签到 1 项:独立接口 /v2/billing/meter/daily-checkin,自动完成。
📌 成长中心任务会随活动更新。脚本内置未覆盖任务检测:遇到没适配的新任务会在日志中明确提示。已结束的活动(开学季、校园日等)代码移到 archive/ 留档,不占主脚本。
二、工作原理:一次配置,Token 永续轮换
为什么不直接读客户端里的 token? WorkBuddy 5.6.2+ 客户端默认强制开启 AtRestEncryption,认证文件(workbuddy-desktop.info / workbuddy-desktop-ai.info)里的 accessToken / refreshToken 不再是明文,而是 {"$wbEncrypted":1,"envelope":"…"} 形式的 AES-256-GCM 加密信封,解密密钥不落盘(只在客户端进程内存里)。
本项目的思路是绕开客户端文件:用官方短信验证码登录,让服务端直接下发明文 AT / RT。所以它不挑客户端版本,任何版本都能用。
自检口诀:值以 eyJ 开头 = 明文,可用;以 {"$wbEncrypted" 开头 = 信封,不可用。
永续循环怎么转起来的:
- RT(刷新令牌)是唯一的续期凭据;
- 距上次刷新 >10 天 或 AT 7 天内过期 时才刷新(避免无谓轮换,离线会话 30 天失效);
- 每次刷新都会换发新 RT 并立即保存到 wb_refresh_tokens.json;
- Actions 部署时,只有私有仓库才会把这个文件提交回仓库;
- 只要不清库,令牌永不过期——这就是「配一个刷新令牌,剩下交给它」。
[/list=1]
三、准备工作(2 分钟)
1. 拿到脚本(二选一):
- # 方式一:git clone(推荐,方便以后更新)
- git clone https://github.com/L0NE-6/WorkBuddy-Daily.git
- [size=6][b]方式二:不想用 git,直接到 Releases 下载[/b][/size]
- [size=6][b]https://github.com/L0NE-6/WorkBuddy-Daily/releases[/b][/size]
- [size=6][b]三个资产:完整包 zip / 主脚本 workbuddy_daily.py / 登录工具 workbuddy_login.py[/b][/size]
- [size=6][b]每个包都附 SHA256 校验值,青龙用户只需里面的 workbuddy_daily.py
复制代码
2. 装依赖(仅一个):
3. 认识一下目录(知道哪个文件干什么就行):
- WorkBuddy-Daily/
- ├── .github/workflows/workbuddy.yml # GitHub Actions 定时工作流
- ├── workbuddy_daily.py # 主脚本(签到/任务/玩法,单文件自包含)
- ├── workbuddy_login.py # 登录工具(短信验证码换 Token)
- ├── workbuddy_intl_daily.py # 国际版每日活跃脚本(workbuddy.ai)
- ├── requirements.txt # 依赖(仅 requests)
- └── archive/ # 已归档的限时活动实现
复制代码
四、第一步:用短信验证码拿到一行令牌
运行仓库自带的登录工具:
- python workbuddy_login.py # 交互式登录(推荐)
- python workbuddy_login.py 13800000000 # 指定手机号
- python workbuddy_login.py 13800000000 123456 # 手机号+验证码(跳过等待)
- python workbuddy_login.py --verify # 登录后额外验证 RT 是否可用
复制代码
流程:输入手机号 → 自动发送短信验证码 → 输入收到的验证码 → 服务端直接下发 Token → 输出一行 手机号:AT:RT:
- 13800000000:eyJhbGciOiJSUzI1NiIs...很长...:eyJhbGciOiJIUzUxMiIs...也很长...
复制代码
格式要点:
- 一行 = 手机号:AT:RT,三段用英文冒号 : 分隔(不要用中文冒号);
- AT 可以留空(写成 手机号::RT);
- 多账号每行一个,以后加账号就在变量末尾追加一行;
- 结果同时保存到 wb_login_result.json(已被 .gitignore 屏蔽,不会提交)。
方式 B(备选):从桌面端认证文件里取。 安装并登录 WorkBuddy 桌面端 → 用记事本打开 C:/Users/你的用户名/AppData/Local/CodeBuddyExtension/Data/Public/auth/workbuddy-desktop.info(新版文件名是 workbuddy-desktop-ai.info,两个都看一下)→ 搜索 accessToken 和 refreshToken,各自后面跟一串 eyJ 开头的长字符串,那就是 AT 和 RT。⛔ 5.6.2+ 客户端里这两个值已是加密信封,不可直接用,请回到方式 A。
⚠️ RT 是你唯一的续期凭据,泄露了别人就能操作你的账号,切勿提交到公开仓库。
五、部署方式 A:青龙面板(三步)
步骤操作
| 1️⃣ 上传脚本把 workbuddy_daily.py 放到青龙脚本目录
| 2️⃣ 设置变量WORKBUDDY_REFRESH_TOKEN = 每行一个 手机号:AT:RT(多账号换行分隔)
| | 3️⃣ 定时任务日常 0 7,12 · 夜猫子窗口 30 23 \(青龙用本地时间) |
⚠️ 高频坑(issue #16 实证):命令必须用青龙运行器。
定时任务的命令填:
(在面板「定时任务 → 新建任务」时从脚本列表里选),不要填裸 python workbuddy_daily.py——裸 python 调用不会注入面板环境变量,脚本会直接报「请设置环境变量 WORKBUDDY_REFRESH_TOKEN」。变量明明存在、测试脚本也能读到,就是它。
依赖管理里装一个:pip3 install requests
🌙 为什么要单独的 23:30 定时? 夜猫子任务只在 23:00–08:00 期间计入进度,且要求真实对话(不能指纹伪造)。日常的 7 点、12 点都不在窗口内,必须有 30 23 * 这条,否则夜猫子永远跑不了。官方规则是「每天 1 次 × 累计 3 天」,脚本有响应即停,不会一晚空跑多次。
📢 通知:面板里配了啥通知就用啥,连 webhook 都不用填——青龙 2.18+ 配 QL_CLIENT_ID + QL_CLIENT_SECRET(面板「应用授权」,需 system 权限),旧版自动读 auth.json。
六、部署方式 B:GitHub Actions(零服务器·推荐)
本仓库已内置工作流 .github/workflows/workbuddy.yml,Import 到你自己的账号即可开启云端定时签到。维护者的仓库已关闭 Actions(不跑定时、也不会再发失败通知),想用云端定时必须自建。
第 1 步:Import 成私有仓库(⚠️ 不要用 Fork)
- 打开 <https://github.com/new/import>
- 在 Your old repository's clone URL 填入 <https://github.com/L0NE-6/WorkBuddy-Daily>
- 新仓库名称自取,可见性选 Private
- 点 Begin import,等导入完成
[/list=1]
为什么不能 Fork:GitHub 不允许修改 Fork 仓库的可见性(提示原文:For security reasons, you cannot change the visibility of a fork)。想要「私有仓库 + 令牌持久化」,请用 Import(或手动新建私有仓库、上传 4 个文件、照抄 workbuddy.yml),得到的是独立仓库,令牌才能安全持久化、续期不中断。
第 2 步:添加 Secrets
仓库 → Settings → Secrets and variables → Actions → New repository secret:
Secret 名称必填值
| WORKBUDDY_REFRESH_TOKEN✅每行一个 手机号:AT:RT(多账号换行分隔)
| PUSHPLUS_TOKEN⬜PushPlus 推送(微信)
| BARK_URL⬜Bark 推送(iOS),如 <https://api.day.app/xxxxxxxx>
| WECOM_WEBHOOK⬜企业微信群机器人 webhook(或仅填 key)
| DINGTALK_WEBHOOK⬜钉钉群机器人 webhook
| DINGTALK_SECRET⬜钉钉加签密钥(机器人选「加签」时必填)
| QL_CLIENT_ID + QL_CLIENT_SECRET⬜青龙 2.18+ 用面板默认通知时必填(应用授权,勾选 system 权限)
| QL_URL / QL_DIR / QL_TOKEN⬜面板地址(默认 \\<http://127.0.0.1:5700\\)/> 数据目录(默认 /ql)/ 旧版面板 token
| WORKBUDDY_TASKS⬜白名单子任务(如 checkin,travel)
| WORKBUDDY_SKIP_TASKS⬜黑名单子任务(如 lottery,redeem)
| | WORKBUDDY_MP_GAP⬜mp 对话事件间隔秒数(默认 45,调小可提速但可能被上游反作弊回滚) |
第 3 步:开启 Actions 并手动验证
- 进入仓库 Actions 标签页;
- 若提示需要启用,点 I understand my workflows, go ahead and enable them;
- 左侧选 🌱 WorkBuddy Daily → Run workflow → 选 main 分支 → 运行;
- 看到 ✅ 即部署成功。
[/list=1]
内置定时(注意 UTC)
北京时间UTC cron说明
| 07:000 23 \*日常全流程
| 12:000 4 \*日常全流程
| | 23:3030 15 \*夜猫子活动窗口 |
改时间就编辑 workbuddy.yml 里的 cron(注意是 UTC,北京时间 − 8 小时)。工作流已设置 TZ: Asia/Shanghai——否则 runner 默认 UTC,会导致日志时间显示错误和补签日期算错一天;脚本内部也用 beijing_now() / beijing_today() 强制北京时间,双保险。
令牌安全判断(工作流内置)
- 仅在「私有仓库」中把 wb_refresh_tokens.json 提交回仓库;公开仓库会自动跳过,避免 RT 泄露。
- 若用公开仓库(含公开 Fork),令牌不会持久化,每次运行都依赖 WORKBUDDY_REFRESH_TOKEN 这个 Secret 提供最新 RT——RT 一般 30 天滚动,需自行保证其不过期(建议每月更新一次)。
七、运行效果与常用命令
- python workbuddy_daily.py # 全流程:续期 → 查询 → 任务 → 领奖
- python workbuddy_daily.py --refresh # 仅刷新所有账号 Token
- python workbuddy_daily.py --query # 仅查询积分/用量/成长
- python workbuddy_daily.py --no-desktop # 跳过桌面任务(非 Windows 默认走指纹上报)
- python workbuddy_daily.py --only 3 # 只跑第 3 个账号
- python workbuddy_daily.py --gap 2.0 # 写动作间隔秒数(默认 1.5,最低 1.0)
- python workbuddy_daily.py --tasks checkin,travel # 只跑白名单子任务
- python workbuddy_daily.py --skip-tasks lottery,redeem # 跳过指定子任务
- python workbuddy_daily.py --mp-gap 15 # mp 对话事件间隔(默认 45s)
复制代码
两种「连签」分开看,别误会:日志/推送统一写成「签到连签 N 天 | 活跃连签 N 天」——前者是积分签到活动(checkin-activity-status.streak_days),后者是成长中心热力墙(growth/streak,由使用事件驱动;成长任务全部领完后常为 0,属正常不属故障)。
推送报告长这样(README 原文样式):
- 📊 各账号运行报告
- 👤 账号1
- 💰 主套餐剩余980积分(共1000,已用20)
- 📊 共12类资源,本月已使用3456次
- 🌱 等级3 | 签到连签7天 | 活跃连签7天 | 能量120
- ⏳ 未完成: 桌面端对话、尝鲜热门技能
- 👤 账号2
- 🌱 等级5 | 签到连签30天 | 活跃连签0天
- ℹ️ 活跃连签=0 属正常:它由成长中心「使用事件(热力墙)」驱动
- ✅ 全部完成!
- 📊 ══ 总计 ══
- 👥 共2个账号,任务完成 33/34 项
复制代码
八、子任务开关:把积分分摊到以后领
任务完成后领到的积分有一个月有效期,一次全领完容易放过期。用白名单/黑名单裁剪要执行的子任务:
- # 只保留每日型任务(签到 + 旅行),其余成长任务留到以后想做时再放开
- WORKBUDDY_TASKS=checkin,travel
- [size=6][b]反过来:全都做,只跳过大转盘与连登兑换[/b][/size]
- WORKBUDDY_SKIP_TASKS=lottery,redeem
复制代码
代号:成长任务直接用 task_code(如 chat_5、expert_5、black_cat、Sequential_Tasks_5);玩法/流程用别名 checkin travel lottery redeem gift makeup badges blindbox buddy_info desktop。被跳过的任务不会执行、也不会被领奖(在列表里保持未完成)。
⚠️ 别把「使用类」任务全关掉:成长中心页面上那块「今日活跃 / 热力墙」是由使用行为(对话、文档、桌面等任务产生的事件)点亮的,签到只给积分、不点热力墙。若白名单里没有这类任务,页面会显示「开始使用以点亮今日热力墙」——那是活跃度、不是签到失败。想两者兼得,保留一个使用类任务即可,例如 WORKBUDDY_TASKS=checkin,travel,chat_5。
九、排错速查表
现象原因与处理
| 日志报 token format error 或 12153服务端认为 RT 不是合法格式。脚本会先做本地凭据体检(不联网)并打印结论,按下表处理;最稳的做法:python workbuddy_login.py 重新登录拿最新一行
| 青龙报「请设置环境变量 WORKBUDDY_REFRESH_TOKEN」命令填了裸 python workbuddy_daily.py。改成 task workbuddy_daily.py(从脚本列表里选),面板变量才会注入(issue #16)
| 夜猫子任务一直不完成只在 23:00–08:00 计入进度且要求真实对话。加一条 30 23 * 的定时;规则是每日 1 次 × 累计 3 天,有响应即停
| 页面显示「开始使用以点亮今日热力墙」那是活跃度不是签到失败。若白名单把使用类任务全关了就会这样。保留一个即可,如 WORKBUDDY_TASKS=checkin,travel,chat_5。签到状态看日志「签到连签 N 天」
| Actions 里 RT 每次都要手动更新用了公开仓库/Fork,工作流不会提交回 wb_refresh_tokens.json。改用 Import 建私有仓库,令牌才能持久化、续期不中断
| 公众号关注任务完不成wb_wechat_oa_subscribe_task 需真人扫码关注满 24 小时,脚本只检测并提示,不自动完成
| Actions 日志时间差 8 小时 / 补签日期错一天工作流已内置 TZ: Asia/Shanghai,脚本内部也用 beijing_now() 兜底;若自行改过 workbuddy.yml,检查 cron 是否按 UTC 换算
| | 国际版刷不出奖励国际版登录态与国内版不通用:workbuddy.ai 的令牌在 copilot.tencent.com 刷不了,反之亦然 |
凭据体检输出对照(token format error\** 专用)\\:
体检输出含义与处理
| RT 的 typ=Bearer(应为 Offline)AT / RT 写反了——顺序必须是 手机号:AT:RT
| RT 不是 eyJ 开头的三段式 JWT被截断,或带了引号 / 空格 / 换行 / 中文冒号
| 签发域是 …,不是 CN 站粘成了国际版或其他应用的 token(CN 站合法签发域是 \\www.codebuddy.cn/auth/realms/copilot\\)
| | 值是 {"$wbEncrypted":1,…} 或含 "envelope"新版客户端(5.6.2+ AtRestEncryption)加密信封,密钥不落盘——改用 python workbuddy_login.py 短信登录取明文 |
体检看不出的两种情况:① 该 RT 已被其他工具(面板/网关/另一台机器)轮换过;② 粘的是 CodeBuddyExtension\Data\Public\auth 里别的应用的 token。
十、国际版每日活跃(workbuddy.ai)
国际版的每日奖励不是普通签到,而是一条活跃任务链,单独一个脚本:
- python workbuddy_intl_daily.py # 探测 + 领取 + 保活
- python workbuddy_intl_daily.py --no-keepalive # 只探测与领取
- python workbuddy_intl_daily.py --only 1 # 只跑第一个账号
复制代码
流程:探测活动是否开放、今天是否已领(/billing/meter/checkin-activity-status)→ 开放且未领时领取每日奖励(/v2/billing/meter/daily-checkin)→ 发一次最小流式对话完成活跃保活(免费模型,不消耗积分)。
环境变量:WORKBUDDY_INTL_TOKENS(多账号,换行或 & 分隔;每条支持 token / 备注|token / 备注|token|uid / 备注|token|uid|refresh_token)、WORKBUDDY_TOKEN(单账号兜底)、WORKBUDDY_INTL_MODELS(可选,保活模型链)。
纯 OAuth 账号(Google / GitHub / X)用 python workbuddy_intl_login.py 走设备授权登录,免手机号。带上 refresh_token 时脚本会自动续期并写回 wb_intl_tokens.json;活动未开放属于正常状态,不会当成失败。
十一、安全与合规须知
- RT 就是账号:泄露 RT 等于把账号交出去。wb_refresh_tokens.json、WORKBUDDY_ACCESS_TOKEN.txt、wb_login_result.json 均已被 .gitignore 屏蔽,切勿手动提交到任何仓库。
- 私有仓库优先:Actions 部署请用 Import 建的私有仓库;公开仓库 RT 不持久化且每次运行都依赖 Secret。
- 下载校验:Releases 每个资产都附 SHA256 校验值,下载后核对再上传到服务器。
- 合规:本项目仅供学习与个人自动化使用,请遵守 WorkBuddy 服务条款,使用风险自负。
- 真人节奏:mp 对话事件按 45s±10s 逐条上报(对齐上游反作弊实测),调小 --mp-gap 有被整体回滚的风险,不建议激进。
十二、FAQ
Q1:多账号怎么加?
变量末尾追加一行 手机号:AT:RT,下次运行自动并入,无需其他配置。
Q2:脚本更新了怎么办?
每次更新单独发一个 Release(编号 v1 → v2 → v3 依次递增,历史版本保留可下载,不覆盖、不合并)。Release 标题括号里是脚本自身版本号(如 v3(脚本 v3.3))。想固定版本就下对应 Release 的资产覆盖旧脚本,想跟最新就用仓库 main。令牌库 wb_refresh_tokens.json 不会丢,覆盖脚本即可。
Q3:只想本地跑,不部署青龙/Actions 行吗?
行。Python 3.8+ 装好 requests,python workbuddy_daily.py 直接跑;桌面任务自动备份并切换桌面端认证文件,跑完还原,全程无需人工。
Q4:签到连签和活跃连签有什么区别?
签到连签 = 积分签到活动;活跃连签 = 成长中心热力墙(由使用事件驱动)。成长任务全部领完后活跃连签常显示 0,属正常。
Q5:任务领到的积分会过期吗?
会,一个月有效期。这就是为什么脚本提供 WORKBUDDY_TASKS 白名单——把积分分摊到后面几个月领。
Q6:公众号关注任务为什么脚本不做?
wb_wechat_oa_subscribe_task 需真人扫码关注满 24 小时,脚本检测并提示,不自动完成。
Q7:报 Issue 要注意什么?
附上运行日志和复现步骤,定位会快很多。
参考来源
免责声明:本教程仅为技术学习交流,所有命令与规则整理自上述开源仓库 README(v3.7),实际接口与活动规则以 WorkBuddy 官方服务端下发为准。使用任何自动化脚本请遵守平台服务条款,风险自负。
|
|