把 WorkBuddy 每日签到搬上云端

40 阅读5分钟

把 WorkBuddy 每日签到搬上云端:10 分钟部署实操

WorkBuddy 有个「Buddy 加油站」,每天签到领积分、还能派猫猫出去旅行领积分。攒得不多,但天天要手动点一下很烦。

这个仓库把整套流程搬到了云端(CNB 的云原生构建)定时跑:每天 00:05(北京时间)自动签到 + 领积分 + 派猫猫旅行,电脑关机、客户端不开也能签。

  • 云端只存明文 JWT,不需要账号密码;脚本纯标准库,零第三方依赖
  • 每条流水线日志都会输出完整结果,方便你自己接通知
  • 实测有效,部署一次之后基本不用管

下面是一份照着抄就能跑通的部署流程,含每一步的具体操作。


仓库地址

源码(建议直接 Fork):cnb.cool/holzwege.co…

Fork 之后就得到了你自己的「签到仓库」,下面所有操作都在你自己的仓库里进行。


你需要准备

项目说明
WorkBuddy 客户端Windows 版,部署当天需要开着并登录一次(用于导出登录态)
Python 3.8+本机执行「生成密钥」命令时需要;云端已自带 python:3.12-slim,不用你操心
CNB 账号cnb.cool,免费,用于托管代码和跑流水线
Git(可选)Fork 和本地跑命令会用到;不想装也可以全程在 CNB 网页端操作

部署:4 步

第 1 步:建两个仓库

  1. 打开上面的源码仓库,点右上角 Fork,把代码复制到你的账号下 —— 这就是你的签到仓库(建议设为 Private)。
  2. 再新建一个密钥仓库,用来单独存放登录凭据(与代码库隔离,务必 Private),名字随意,例如 workbuddy-checkin-secrets。

为什么是两个库?密钥是敏感凭据,单独放在一个私有库里,避免跟代码混在一起被误提交或误公开。

第 2 步:把密钥仓库接进来

在你自己的签到仓库根目录找到 .cnb.yml,把里面的 imports 地址改成你的密钥仓库(把下面的 <你的用户名> 换成你的 CNB 用户名):

      imports:
        - https://cnb.cool/<你的用户名>/workbuddy-checkin-secrets/-/blob/main/.cnb/workbuddy-secrets.yml

凭据只能经 imports 从这里注入,所以密钥仓库这一步不能省。

第 3 步:本机生成密钥文件

在签到仓库目录下,且 WorkBuddy 客户端正在运行且已登录的状态下,打开 PowerShell 执行:

python tools/make_min_auth.py --out secrets.yml --slug auto

这一步会自动完成:读取本机登录态 → 解密(5.6.2+ 加密态也能自动处理)→ 导出明文 JWT → 生成一份可直接整份复制的密钥文件 secrets.yml。--slug auto 会用 git remote 自动填好仓库名,无需手改。

如果 --slug auto 没生效(比如没有 git remote),就手动把产物里的 <你的用户名>/<签到仓库名> 替换成你的签到仓库。

生成的文件长这样(直接复制它即可):

allow_slugs:
  - "<你的用户名>/<签到仓库名>"
allow_events:
  - "crontab: 5 0 * * *"
WORKBUDDY_AUTH_JSON: "{"auth":{"accessToken":"eyJhbG...","domain":"www.codebuddy.cn"}}"

第 4 步:粘贴 + 首次运行

  1. 在密钥仓库里新建文件,路径填 .cnb/workbuddy-secrets.yml,把上一步 secrets.yml 的内容全选复制进去,提交
  2. 回到签到仓库的「代码构建」页,点「执行」,展开日志核对:
日志位置期望看到
注入登录态登录态字符数:N + 登录态剩余有效期:xx 天
签到 + 派猫猫旅行领取成功 / 今日已签到 + 账户剩余积分 …

看到 领取成功 / 今日已签到 即代表跑通。之后每天 00:05(北京时间)自动执行,无需任何操作。


日常维护

换 Token(约 55 天一次)

登录态是 JWT,实测有效期约 55 天。流水线每天打印剩余天数,不足 7 天会给 warning。到期前做三件事:

# 1. 打开并登录 WorkBuddy 客户端(保持运行)
# 2. 在签到仓库目录重新生成
python tools/make_min_auth.py --out secrets.yml --slug auto
# 3. 全选复制 → 覆盖密钥仓库的 .cnb/workbuddy-secrets.yml → 提交

第 1 步不能省:密钥只存在于运行中的客户端进程内存,关掉客户端就只能拿到密文。

改签到时间

  1. 改签到仓库 .cnb.yml 里的 "crontab: 5 0 * * *"
  2. 推到 main
  3. 重新生成一次密钥文件覆盖过去(allow_events 从 .cnb.yml 自动推导,不重新生成会校验失败)

常见问题速查

现象原因 / 处理
本地报「解密 accessToken 失败」/ 定位不到 atRestSecretKey密钥只在运行中的客户端进程内存里。确认:客户端正在运行且已登录、与脚本同一 Windows 用户、是 Windows 平台
报 No module named 'six.moves'与本机 cryptography 装坏有关,不影响签到——脚本会自动降级。想根治:pip install -U six 或 pip install -U cryptography
日志报 Secret 内容疑似被截断:只收到 81 字符密钥值粘贴时被截断。删掉旧变量 → 重新生成整份 → 覆盖
allow_events 报 does not conform to allow_events密钥里的事件键与 .cnb.yml 不一致,改完签到时间要重新生成密钥文件
到点没跑 / 手动能跑定时不动按序查:① allow_events 是否对齐 ② 配置是否在 main 分支 ③ cron 时区固定 Asia/Shanghai,直接写北京时间
.cnb.yml 删掉 docker.image: python:3.12-slim 后报错不能删,CNB 默认构建环境不含 python3

关于通知

本项目不内置推送配置——脚本每次运行会输出完整的结果 JSON 并写入 checkin.log,你可以据此自行接入任意通知渠道。不希望产生任何通知副作用时加 --no-notify。


小结

整个部署的核心就一句:Fork 仓库 → 建个密钥仓库 → 一条命令导出密钥 → 粘进私有密钥仓库 → 点一次执行。  剩下的换 Token、改时间也都是「跑命令 → 覆盖提交」两步。

仓库纯标准库、零依赖;登录态在本机解密后才导出,云端拿不到任何密钥。如果你也想把每天那一下手动签到省掉,照着上面的步骤走一遍即可。

仓库地址再贴一次:cnb.cool/holzwege.co…。