Skip to content

About

自动领取 WorkBuddy 每日积分。一键校准、Windows 原生 OCR、零联网依赖。

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

WorkBuddy Daily Checkin

每天 100 积分,白嫖使我快乐。但打开客户端 → 点头像 → 找加油站 → 点领取,四步操作对懒人来说太累了。

于是写了这个脚本,让电脑替我卷。

一句话:每天自动帮你领 WorkBuddy 积分,你只需要保证电脑开着就行。

为什么需要这个

场景 没有脚本 有脚本
早上到公司 打开客户端 → 找入口 → 点领取 → 万一忘了 电脑自动领了,你甚至还在路上
周末在家 "算了不领了" 照领,白嫖不分休息日
换电脑 手动操作 双击 exe,30 秒搞定

特性

  • 轻量 — 去掉 OpenCV,仅用 Pillow + 本地离线 OCR(Win10/11 优先系统 winrt,否则 RapidOCR 兜底,均不上传数据)
  • 本地优先 — 主流程(截图 → OCR → 点击)全在本机完成,不上传任何数据;只有接口兜底被触发时才向官方域名发一次 HTTPS 请求(见「接口兜底签到」,可关闭)
  • 校准一次 — 跑一次校准后全走坐标点击,不依赖 OCR,最快最稳
  • 自包含 — 打包成单文件 exe,其他电脑免装 Python、免联网
  • 自动拉起 — WorkBuddy 没开?它帮你开
  • 三层兜底 — ① 校准坐标 → ② OCR 文字锚定(界面漂移时)→ ③ 接口直签(GUI 完全放弃时),任意一层成功即完成签到

快速开始

最省事:方式零(让 AI 一键部署) —— 装好 skill 后对 AI 说一句话,下载、安装、建自动化全自动。 想自己动手:走 方式一(下载安装包),解压即用;开发者或要改代码才需要方式二。

方式零:让 AI 一键部署(推荐)

  1. 把本仓库里的 skill/workbuddy-daily-checkin/ 整个目录,复制到 C:\Users\<你>\.workbuddy\skills\ 下 (最终形如 C:\Users\<你>\.workbuddy\skills\workbuddy-daily-checkin\SKILL.md)
  2. 重启 WorkBuddy
  3. 对 AI 说:「帮我装签到」

AI 会依次完成:查最新 Release → 下载并解压安装包到你选的目录 → 引导你做一次校准 → 问你想几点自动跑 → 建好每日自动化任务。之后每天说「签到」或「今天签到了吗」就行。

skill 脚本是纯 Python 标准库实现,零依赖;下载走 GitHub API 资产端点,支持断点续传与失败重试。 网络实在不通时 AI 会给你手动下载链接,解压到同一目录即可。

方式一:下载安装包(推荐,免装 Python)

  1. 打开仓库 Releases 页面,下载最新版本的 WorkBuddy.zip
  2. 解压到任意普通文件夹(不要放 Program Files 等需要管理员权限的目录 —— exe 要向同目录的 data/ 写日志)
  3. 打开 WorkBuddy 客户端,双击 WorkBuddy校准.exe,按提示把鼠标依次移到 头像 → 回车、Buddy 加油站 → 回车、领取按钮 → 回车(左下角若弹"新版本就绪",移到它的 × 处回车,没有就输入 skip)
  4. 校准完成,之后每天双击 WorkBuddy签到.exe 即可自动领取

跨电脑:复制解压后的整个文件夹即可;若分辨率/缩放/DPI 不同,重跑一次 WorkBuddy校准.exe 重新校准。

方式二:从源码自行构建 exe(开发者)

需要 Git 和 Python 3.11(winrt 仅支持 ≤3.11;用 3.13 会自动切换 RapidOCR 兜底后端,打包体积更大):

git clone https://github.com/SkyblueeeLabs/WorkBuddy-Daily-Checkin.git
cd WorkBuddy-Daily-Checkin
setup.bat                  # 创建 .venv 虚拟环境 + 安装依赖(只需一次)
scripts\build_exe.bat      # 打包,产物在 dist/

dist/ 下得到 WorkBuddy签到.exe 与 WorkBuddy校准.exe,使用方式与方式一完全一致(在解压/构建出的目录里双击运行即可)。

设置每日自动签到(可选)

方案 A:WorkBuddy 自动化(推荐)

WorkBuddy 自己养自己 —— 用 WorkBuddy 的自动化功能定时执行签到 exe:

  1. 已有 dist\WorkBuddy签到.exe(方式一下载 / 方式二构建均可)
  2. 在 WorkBuddy 中创建自动化任务:
    • 名称:自动签到
    • 提示词:执行 C:\你的路径\WorkBuddy-Daily-Checkin\dist\WorkBuddy签到.exe
    • 模型:选择任意可用模型即可(截图示例为 Hy4 preview,免费模型也够用)
    • 触发:每天 09:00(或自定义时间)
  3. 保存并启用。WorkBuddy 常驻即可,每天自动领积分

配置示例:

WorkBuddy 自动化任务配置示例

优势:不需要管理员权限、不需要 Windows 任务计划程序、配置在 WorkBuddy 内完成

方案 B:Windows 任务计划程序

# 右键以管理员身份运行
install_task.bat

注册每天 09:00 自动签到(需保持电脑解锁状态)。

接口兜底签到(GUI 放弃时的最后防线)

GUI 自动化终究依赖界面:菜单项增减、DPI 变化、弹窗遮挡、OCR 偶发抽风,都可能让它中途放弃。所以内置了接口兜底——不碰界面,直接走官方签到接口。

流程

  1. 取得登录态凭据 accessToken + uid(src/wb_credential.py,见下节) (%LOCALAPPDATA%\CodeBuddyExtension\Data\Public\auth\workbuddy-desktop.info)
  2. 查状态:POST /v2/billing/meter/checkin-activity-status
  3. 仅当今日未签时调用:POST /v2/billing/meter/daily-checkin(接口幂等,不会重复领)
  4. 主域 copilot.tencent.com 不通时自动切换备域 www.codebuddy.cn → www.workbuddy.cn

触发时机:只在 GUI 流程确认放弃时触发(找不到加油站入口 / 找不到领取按钮 / 状态判定失败 / 顶层异常),默认开启。GUI 正常走完时全程不会发任何网络请求。

GUI 主流程 接口兜底
依赖 窗口、坐标、OCR、屏幕未被占用 仅需本机登录态 + WorkBuddy 客户端在运行 + 网络
优点 完全模拟真人,不触碰账号接口 免疫界面改版,快且稳
风险 界面漂移 / 弹窗遮挡会失败 调用的是非公开内部接口,可能变更或下线

开关(src/main.py 的 CONFIG)

字段 说明 默认
api_fallback 是否启用接口兜底;设 False 则完全走 GUI True
api_base 主域名;留空则用 copilot.tencent.com ""

自检:排查凭据链路时跑 WorkBuddy签到.exe doctor(或源码 python src/main.py doctor), 输出只含运行时路径、凭据格式、到期时间、是否需要人工介入,不含任何 token 内容。

凭据怎么读:兼容 5.6.2 的字段加密

WorkBuddy 5.6.2 起,登录态里的 auth.accessToken / auth.refreshToken / account.nickname / account.phoneNumber 四项从明文换成了 AES-256-GCM 加密信封:

{ "$wbEncrypted": 1, "envelope": "<base64>" }

所以「读文件拿 token」的老办法在 5.6.2 之后必然失效。本项目的做法是不去拿密钥,而是借持有密钥的进程干活:

  • 把 WorkBuddy 自带的 Electron 运行时当作普通 Node 解释器(ELECTRON_RUN_AS_NODE=1)拉起子进程;
  • 子进程内调用客户端自己注册的原生模块读出密钥派生值,按客户端同款规则就地解密;
  • 明文仅通过 stdout 管道交回父进程,不落盘、不打印、不进日志;密钥用完即清零,进程一退即消失。
登录态信封  ──┐
              ├─→ 子进程(Electron 运行时,原生模块 → 派生密钥 → AES-256-GCM + AAD 解密)─→ stdout ─→ 父进程 ─→ HTTPS 请求
密钥(仅内存)─┘                                          ↑ 校验 keyId 不匹配即拒绝解密

派生与校验(keyId 与 ~/.workbuddy/keyblob 中的 protectorKeyId 一致,实测交叉验证):

protectorKey   = SHA256(atRestSecretKey)
protectorKeyId = SHA256(protectorKey).hex[:16]     # 必须等于 envelope.keyId,否则拒绝解密

安全边界

  • token 只在本机读取,只经 HTTPS 发往上述官方域名,不写入日志、不落盘、不外传
  • 解密脚本经 stdin 传入子进程,磁盘上不留任何脚本或密钥文件
  • 日志仅记录结果(签到成功 +N 分 / 今日已签 / 跳过原因),不记录 token 与 uid
  • 关掉 api_fallback 后,程序回到零网络请求状态
  • 走的是客户端自己的读态路径,不是绕过加密:客户端还能正常登录,这条路就成立

派猫猫旅行(接口模式,额外纯接口能力)

成长计划里的「派猫猫旅行 / 派 Buddy 去旅行」:把 Buddy 派出去,14 小时后回来领 510 积分。每天最多派遣 1 次(接口 daily_limit_reached 为权威)。它和签到共用同一份本机登录态与 Bearer 鉴权,但域名/路径不同、且是状态机 + 轮询,比签到更适合作后台定时巡检——不依赖屏幕唤醒,规避清晨锁屏 screen grab failed 的坑。

接口族(域名 www.workbuddy.cn,无 /v2 前缀;本机 Bearer token 直连已验证 HTTP 200):

用途 方法 路径
查状态(只读) GET /activity/growth/buddy/travel/status
派出旅行 POST /activity/growth/buddy/travel/depart body {"location_id": N}
领取积分 POST /activity/growth/buddy/travel/claim body {}

状态机(服务端 state 为权威,脚本幂等、可高频轮询):

idle + !daily_limit_reached ──depart──→ traveling ──(1~4h)──→ arrived ──claim──→ 领 5~10 分 ──→ idle
idle + daily_limit_reached  ───────────────────────────────────────────────────→ 今日收工

用法(模块 src/api_travel.py,CLI 在 skill 的 scripts/travel.py):

# 只读查状态
python travel.py status
# 巡检一次(auto:按 state 自动 depart / claim / 跳过)
python travel.py
# 强制派 / 强制领(调试)
python travel.py depart [N]
python travel.py claim

接入自动化:建一个每天多个时间点(如 08:00 / 10:00 / 12:00 / 14:00 / 16:00 / 18:00 / 20:00 / 22:00)运行的 recurring 任务,每次执行 python travel.py(auto)。早晨 idle 自动派出,后续巡检点 arrived 自动领奖,traveling 自动跳过——全自动、不用记时间。

旅行接口同样是非公开内部接口(归腾讯所有,可能变更/下线),token 不落地,仅供个人学习自用,与签到共用同一份免责声明。

执行失败怎么办

如果某天 WorkBuddy签到.exe 因弹窗遮挡、OCR 偶发异常等原因失败,程序内部已有三层兜底,逐级退让:

  1. OCR 文字锚定 — 校准坐标因菜单项增减而漂移时,改用 OCR 搜索「Buddy加油站 / 立即领取」文字重新定位
  2. 接口兜底 — GUI 确认放弃后,直调官方签到接口补领(见上一节,默认开启)
  3. AI 手动兜底 — 若你是用 方案 A(WorkBuddy 自动化) 调用的,AI 助手会读取退出码和日志,直接手动把剩余步骤点完,直到出现「签到已完成 ✅」

失败恢复示例:AI 兜底完成签到

这正是推荐把 exe 挂在 WorkBuddy 自动化里的原因:脚本自身有兜底,AI 还能再兜底一次。

注:若长期失败,建议运行 WorkBuddy校准.exe 重新生成 data/calib.json,或从源码重新构建 exe 确保 OCR 依赖已正确打包。

项目结构

WorkBuddy-Daily-Checkin/
├── src/                        # 源码
│   ├── main.py                 #   核心逻辑(GUI 自动化主流程)
│   ├── wb_credential.py        #   登录态凭据读取(明文 + 5.6.2+ AES-GCM 信封)
│   ├── api_checkin.py          #   接口兜底签到(GUI 放弃时直调官方接口)
│   ├── api_travel.py           #   派猫猫旅行(纯接口状态机)
│   └── teach_launcher.py       #   校准入口
├── scripts/
│   ├── build_exe.bat           # 打包 exe
│   ├── WorkBuddy签到.spec      # 签到 exe 打包配置(含新模块 hiddenimports)
│   └── WorkBuddy校准.spec      # 校准 exe 打包配置
├── doc/
│   ├── usage-guide.md          # 详细使用指南
│   └── imgs/                   # README 配图
├── setup.bat                   # 环境搭建(首次运行)
├── install_task.bat            # 注册定时任务
├── teach.bat                   # 校准启动器
├── run_checkin.bat             # 手动签到
├── requirements.txt            # 依赖清单
├── .gitignore                  # Git 忽略规则
├── .venv/                      # 虚拟环境(自动生成,不入库)
├── data/                       # 运行时数据(自动生成,不入库)
└── dist/                       # 打包产物(不入库)

工作流程

唤醒 WorkBuddy
  → 最大化 + 置顶
  → 关闭「新版本就绪」弹窗(模板匹配)
  → 点击头像
  → 点击「Buddy 加油站」(OCR 锚定优先,失败回退校准坐标)
  → 判断「领取 / 今日已领」并操作
  → 弹窗通知结果(成功 / 已领 / 失败)

  ↳ 任一步确认失败 → 接口兜底(读本机登录态直调官方接口)
      → 成功 / 已领则正常通知;仍失败才报「签到失败」

依赖

包 说明
pyautogui 鼠标/键盘模拟
pygetwindow 窗口管理
Pillow 截图与图像处理
numpy 数组计算
winrt Windows 原生 OCR(首选)
rapidocr-onnxruntime OCR 兜底(可选)

接口兜底(src/api_checkin.py、src/wb_credential.py)零第三方依赖, 只用 Python 标准库(urllib / json / subprocess / winreg)。解密所需的 Electron 运行时直接借用 WorkBuddy 客户端自带的,无需额外安装。

第三方来源与免责声明

src/api_checkin.py 的接口调用思路——登录态文件位置、两个签到接口路径、请求头构造方式——参考自社区开源项目 codeLong1024/workbuddy-checkin(MIT License,作者 codeLong1024)。本项目在其思路上按自身需要重写实现(幂等判定、多域名回退、重试策略、与 GUI 流程的衔接),未直接复制其源码,在此致谢。

src/wb_credential.py 的兼容思路(借 Electron 运行时在子进程内就地解密 5.6.2+ 的字段加密信封)参考自社区文章《WorkBuddy 升级了之后,自动签到断了?》(AI经纬线,2026-09-28)及其提到的开源项目 88lin/workbuddy-auto-signin(MIT License)。本项目未直接复制其源码:doctor 自检、多域名回退、stdin 传脚本(零落盘)、keyId 强校验、短缓存、与 GUI 主流程的衔接均为自行实现;AES-GCM 的 AAD 构造规则与密钥派生规则由本项目从客户端 app.asar 实测还原并交叉验证(派生 keyId 与 ~/.workbuddy/keyblob 中的 protectorKeyId 一致)。

  • 非官方工具:所调用的是 WorkBuddy 客户端内部接口,归腾讯公司所有,可能随时变更或下线;本项目与腾讯公司无任何隶属、授权或合作关系。
  • 仅供个人学习自用:禁止商业用途;使用前请自行评估并遵守相关服务条款与法律法规,风险由使用者承担。
  • 按现状提供(AS-IS),不提供任何明示或默示的担保。

若你不希望调用非公开接口:把 CONFIG 里的 api_fallback 设为 False 即可完全关闭,程序退回纯 GUI 流程(代价是 GUI 失败那天需要人工补领)。

若客户端未来变更加密方案(doctor 会报 DECRYPT_FAILED / KEY_UNAVAILABLE / SUITE_UNSUPPORTED),兜底会如实报错而不是谎报成功,此时需等待上游适配;GUI 主流程不受影响。

更多

  • 详细使用指南:doc/usage-guide.md
  • 包含:校准详解、配置参考、跨电脑部署、任务计划程序配置、常见问题

About

自动领取 WorkBuddy 每日积分。一键校准、Windows 原生 OCR、零联网依赖。

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages