wb-buddy-checkin

内容来源:clawhub · 原始地址 · 查看安装指南

原始内容


name: wb-buddy-checkin description: 自动完成 WorkBuddy 桌面客户端「Buddy 加油站」每日签到、领取积分。当用户需要在 Windows 上自动点击头像→Buddy加油站→立即领取,并通过截图灰度校验是否成功(灰底「今日已领」)时使用。基于纯 ctypes 实现窗口置前、坐标点击与窗口截图,零第三方 Python 依赖,仅依赖 Windows 系统 API(可选复用 desktop-control-win skill 的截图)。 agent_created: true

wb-buddy-checkin —— WorkBuddy 每日签到

在 Windows 上自动给 WorkBuddy 桌面客户端的「Buddy 加油站」签到领积分(每日 100 积分)。 脚本用相对坐标点击 + 截图灰度校验,无需 OCR,主题无关(亮/暗色都能正确判定)。

何时使用

  • 用户说「自动签到」「每天领 WorkBuddy 积分」「Buddy 加油站签到」。
  • 配置定时任务,让它在每天固定时间(如 9:00)自动跑。
  • 注意:这是通用、可分享的实现,不包含任何个人身份、路径或通知目标;若要把结果推送给某人(微信/钉钉等),由调用方在 skill 之外自行配置。

前置条件

  • Windows 系统(脚本依赖 ctypes.windll / user32 / gdi32)。
  • Python 3(标准库即可,无需 pip install 任何包)。
  • WorkBuddy 桌面客户端正在运行。
  • 首次使用必须校准坐标(见 references/calibration.md),因为不同屏幕/布局下点击点不同。这步跳过是移植后"只会点头像"的头号原因。

⚠️ 移植给别人 / 第一次用:先做这件事

先跑一次校准,再 -run。脚本内置的坐标是作者屏幕的校准值,别人的屏幕八成对不上——头像在左下角还能蒙对,但加油站/领取位置一偏,后续点击全打空,看起来就像"只点了头像"。

校准有两种,推荐用弹窗校准(通用、傻瓜、零依赖)

# 弹窗校准(推荐):自动弹出一个悬浮窗,按提示把鼠标移到三个目标点,
# 每步倒计时结束自动记录,三步写 calibrate.json。无需终端/微信/任何外部通道。
python scripts/wb_mouse_checkin.py -calibrate-gui

无 GUI 环境(如某些精简 Python 没带 tkinter)时,退而用终端文字校准:

# 终端校准:把鼠标依次移到 头像 / Buddy加油站 / 立即领取 三个点,各按一次回车
python scripts/wb_mouse_checkin.py -calibrate

校准后直接:

python scripts/wb_mouse_checkin.py -run

没校准就 -run,脚本会红字警告"用的是示例默认坐标,大概率打空",并打印算出的三个屏幕坐标供你对照。

使用方法

脚本位于 scripts/wb_mouse_checkin.py,三种模式:

# 1) 干跑:打印窗口信息 + 计算好的点击坐标 + 校准状态告警,不点击
python scripts/wb_mouse_checkin.py

# 2) 真实签到(自动读取 calibrate.json;无则告警并退回示例坐标)
python scripts/wb_mouse_checkin.py -run

# 3) 弹窗校准(推荐):悬浮窗倒计时自动采样鼠标,三步写 calibrate.json
python scripts/wb_mouse_checkin.py -calibrate-gui

# 3b) 终端校准(无 GUI 时):鼠标移到三个目标点各按回车
python scripts/wb_mouse_checkin.py -calibrate

退出码:0=成功(已处于「今日已领」) / 2=失败(未领取或面板异常,报错会指明该校准哪个点) / 3=未找到 WorkBuddy 窗口。

结果截图保存在脚本同目录 checkin_result.png,可用于人工确认或后续通知。

关键实现要点(避免重踩坑)

  1. 所有 Win32 调用必须显式声明 argtypesHWNDc_void_p(64 位指针)传。不声明会被 ctypes 默认按 32 位 c_int 截断,导致 SetForegroundWindow 静默失败——表现为「窗口没置顶、点击打空」。本脚本已统一声明。
  2. 可靠置前三步:最小化先 ShowWindow(SW_RESTORE)AttachThreadInput 线程绑定绕过系统前台锁 → SetWindowPos(HWND_TOP) 置顶 z 序。
  3. 坐标用「相对客户区左下角」(x=距左, y=距底),窗口任意缩放都命中,校准一次永久复用。
  4. 校验用「近黑像素数」而非白字数:灰底「今日已领」按钮也含白字,不能靠白字判定;黑底「立即领取」有大量近黑像素(r,g,b<70),灰按钮近黑像素≈0。用此区分,主题无关。
  5. 截图优先 desktop-control-win 的 screen-info.ps1(若存在),否则回退 PrintWindow 客户区截图;PNG 编解码全用标准库手写(支持所有 filter),无外部依赖。

配置定时任务(示例)

在 WorkBuddy 自动化里建一个每日任务,prompt 大致为:

运行 python scripts/wb_mouse_checkin.py -run(脚本内置窗口置前与灰度校验)。 读 checkin_result.png 确认结果:灰色「今日已领」=完成;黑底「立即领取」仍在=失败。 按你的通知偏好(微信/钉钉等)把结果发给本人。通知目标和通道由你自己的配置决定,本 skill 不内置任何推送。

cwd 设为该 skill 的 scripts/ 所在目录(或脚本实际位置)。

参考

  • 坐标校准与常见问题:references/calibration.md