首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >WorkBuddy 积分焦虑终结者:让 AI 每天自动签到领积分,一次配置永久躺赚 #WorkBuddy#

WorkBuddy 积分焦虑终结者:让 AI 每天自动签到领积分,一次配置永久躺赚 #WorkBuddy#

原创
作者头像
用户12727734
修改2026-08-31 17:42:51
修改2026-08-31 17:42:51
1560
举报

作者:一闲人(和 AI 一起折腾出来的)

适用版本:WorkBuddy 桌面端 v5.3.14(Windows)

阅读时长:约 8 分钟


一、我为什么折腾这个

我一闲人,平时用 WorkBuddy 做两件事:一是盯 A 股 ETF 的每日复盘,二是处理一些办公文档。

用着用着就发现一个糟心事:积分跑得比我想象的快

去查了一圈才知道,WorkBuddy 的「Buddy 加油站」每天能免费领 100 积分,连续签到第 7 天还有 1000 积分的大奖。听起来很香,但有个致命问题——

必须手动点,不点就断签,断签连续天数直接归零。

我当时已经连签十几天了。有一次忘了,前面攒的全白费。那种感觉,就像养了十几天的电子宠物一夜回到解放前。

于是我跟 AI 说了这么一句话:

「我要你每天帮我领积分,这是日常性的工作,由你来做。」

然后我们真把它做出来了。这篇文章就是完整过程,从踩坑到跑通,每一步都有代码


二、先说结论:三条路,只有一条走得通

我和 AI 前后试了三种方案,前两种都失败了。把失败过程写出来,是不想你再走一遍弯路。

❌ 方案一:让 AI 定时提醒我去点

这是最直觉的想法,也是网上不少教程推荐的做法。

问题:这叫提醒,不叫自动化。 我还是要记得打开电脑、记得点那一下。某天出门办事,照样断签。

❌ 方案二:用 Windows UI 自动化去点按钮

AI 给我写了个 Python 脚本,用 uiautomation 库去找 WorkBuddy 窗口、定位左下角头像、点击展开菜单、再找「领取」按钮。

脚本确实能跑,我一度以为成了。结果实测发现一个坑:

侧栏里「Buddy 加油站」那个按钮,右边还粘着「去邀约」的跳转区域。 整个区域是一个大的 ButtonControl,名字里同时含着「Buddy 加油站」「签到领积分」「去邀约」「最高得 650 积分/人」。脚本点中心位置,弹出的不是签到页,是邀请好友的浏览器页面。

我改成点左边 25% 的位置,还是跳邀请页。

结论:客户端 UI 自动化这条路不稳定,版本一改就废,还容易误点。放弃。

✅ 方案三:绕过界面,直接调官方 API

这是最终跑通的方案。核心认知是:

签到这件事,本质上就是一次带登录态的 HTTP 请求。

只要能从本机拿到登录凭证,就能用脚本完成签到,不碰界面、不依赖窗口、不怕版本更新。


三、实操开始:四步跑通

第 1 步:找到本机的登录态文件

WorkBuddy 登录之后,会把登录信息以明文 JSON 存在本机:

代码语言:txt
复制
%LOCALAPPDATA%\CodeBuddyExtension\Data\Public\auth\workbuddy-desktop.info

也就是类似:

代码语言:txt
复制
C:\Users\你的用户名\AppData\Local\CodeBuddyExtension\Data\Public\auth\workbuddy-desktop.info

用记事本打开,能看到 accessTokenuidnickname 这些字段。

⚠️ 安全提醒(本文最重要的一段:accessToken 等同于你的登录密码,千万不要发给别人、不要提交到公开仓库、不要贴到群里、不要写进要发布的文章里。

这里有个很多人会踩的坑:以为"只露前 15 位、后 8 位"就叫脱敏,其实尾部 8 位同样是真实字符,照样算泄露。我第一版脚本就是这么写的,后来才发现。

正确做法是:一个真实字符都不输出,只打印"已加载(内容已隐藏)"。下面脚本就是这么做的。

第 2 步:确认两个官方接口

用途

方法

地址

查今天签了没

POST

https://www.codebuddy.cn/v2/billing/meter/checkin-activity-status

执行签到

POST

https://www.codebuddy.cn/v2/billing/meter/daily-checkin

请求头需要两个:

代码语言:txt
复制
Authorization: Bearer <accessToken>
X-User-Id: <uid>

这里有个坑我踩了半小时:网上有些教程写的域名是 copilot.tencent.com,我实测那个域名下的签到接口返回 404。当前可用的是 www.codebuddy.cn。如果你照着老教程做,八成会卡在这里。

第 3 步:写脚本(零第三方依赖)

下面这段脚本只用了 Python 标准库,不用 pip 装任何东西,复制保存成 每日签到.py 就能跑。

代码语言:python
复制
# -*- coding: utf-8 -*-
"""
WorkBuddy 每日自动签到(API 直签版)
不点界面,直接读本地登录态调官方接口
"""
import json
import os
import sys
import time
import urllib.error
import urllib.request

AUTH_FILE = os.path.join(
    os.environ.get("LOCALAPPDATA", os.path.expanduser("~") + "\\AppData\\Local"),
    "CodeBuddyExtension", "Data", "Public", "auth", "workbuddy-desktop.info"
)
STATUS_URL = "https://www.codebuddy.cn/v2/billing/meter/checkin-activity-status"
CHECKIN_URL = "https://www.codebuddy.cn/v2/billing/meter/daily-checkin"


def mask_token(t):
    """安全脱敏:一个真实字符都不输出。

    注意:不要写成 t[:15] + "..." + t[-8:],
    尾部 8 位同样是真实 token 字符,属于泄露。
    """
    if not t or len(t) < 20:
        return "(无)"
    return "已加载(内容已隐藏)"


def load_auth():
    if not os.path.exists(AUTH_FILE):
        return None, "找不到登录态文件:%s" % AUTH_FILE
    try:
        data = json.load(open(AUTH_FILE, encoding="utf-8"))
    except Exception as e:
        return None, "登录态文件解析失败:%s" % e
    tok = data.get("auth", {}).get("accessToken")
    uid = data.get("account", {}).get("uid")
    if not tok:
        return None, "登录态文件里没有 accessToken"
    if not uid:
        return None, "登录态文件里没有 uid"
    # 留出 5 分钟余量判断是否过期
    expires = data.get("auth", {}).get("expiresAt", 0)
    if expires and expires < (time.time() * 1000 + 5 * 60 * 1000):
        return None, "accessToken 快过期或已过期,请先打开一次 WorkBuddy 刷新登录态"
    return {"token": tok, "uid": uid,
            "nickname": data.get("account", {}).get("nickname", "")}, None


def api_post(url, token, uid):
    req = urllib.request.Request(
        url,
        method="POST",
        data=b"{}",
        headers={
            "Authorization": "Bearer " + token,
            "X-User-Id": uid,
            "Content-Type": "application/json",
            "Accept": "application/json",
        },
    )
    try:
        r = urllib.request.urlopen(req, timeout=20)
        return r.status, json.loads(r.read().decode("utf-8"))
    except urllib.error.HTTPError as e:
        body = e.read().decode("utf-8", errors="ignore")
        try:
            return e.code, json.loads(body)
        except Exception:
            return e.code, {"msg": body[:200]}
    except Exception as e:
        return -1, {"msg": str(e)}


def main():
    print("WorkBuddy 每日签到  %s" % time.strftime("%Y-%m-%d %H:%M:%S"))
    auth, err = load_auth()
    if err:
        print("❌ %s" % err)
        return 3

    print("用户:%s  token:%s" % (
        auth["nickname"] or auth["uid"][:8], mask_token(auth["token"])))

    # 1. 查状态
    status, resp = api_post(STATUS_URL, auth["token"], auth["uid"])
    if status != 200 or resp.get("code") != 0:
        print("❌ 查询签到状态失败:HTTP %d / %s" % (status, resp.get("msg", resp)))
        return 4

    d = resp.get("data", {})
    active = d.get("active", False)
    today_done = d.get("today_checked_in", False)
    streak = d.get("streak_days", 0)
    daily = d.get("daily_credit", 0)
    today_got = d.get("today_credit", 0)
    theme = d.get("theme_name", "") or d.get("activity_name", "")

    if not active:
        print("ℹ️  当前没有进行中的签到活动,无需领取。")
        return 0

    print("活动:%s  每日 %d 积分  连签 %d 天" % (theme or "Buddy加油站", daily, streak))

    if today_done:
        print("✅ 今天已经签到过了,获得 %d 积分,明天再来。" % today_got)
        return 0

    # 2. 执行签到
    print("🔔 今天还没签,正在领取...")
    status2, resp2 = api_post(CHECKIN_URL, auth["token"], auth["uid"])
    code2 = resp2.get("code")
    msg2 = resp2.get("msg", "")

    if status2 == 200 and code2 == 0:
        status, resp = api_post(STATUS_URL, auth["token"], auth["uid"])
        if status == 200 and resp.get("code") == 0:
            today_got = resp.get("data", {}).get("today_credit", today_got)
            streak = resp.get("data", {}).get("streak_days", streak)
        print("✅ 签到成功,获得 %d 积分,当前连签 %d 天。" % (today_got, streak))
        return 0
    elif code2 == 10001:
        print("✅ 今天已经签到过了(%s),明天再来。" % msg2)
        return 0
    else:
        print("❌ 签到失败:HTTP %d / code=%s / %s" % (status2, code2, msg2))
        return 5


if __name__ == "__main__":
    sys.exit(main())

先手动跑一次验证:

代码语言:txt
复制
WorkBuddy 每日签到  2026-08-31 10:38:19
用户:你的昵称  token:已加载(内容已隐藏)
活动:Buddy加油站  每日 100 积分  连签 N 天
✅ 今天已经签到过了,获得 100 积分,明天再来。

看到这一行,说明接口通了。

第 4 步:挂到 WorkBuddy 的自动化上

这一步最简单,用一句话就行。在 WorkBuddy 对话框里说:

每天早上 9:10 帮我运行 每日签到.py 完成 WorkBuddy 自动签到,把结果用一两行中文告诉我。状态成功就报积分和连签天数,失败就把错误原样告诉我。

WorkBuddy 会自动创建定时任务,到点自己跑,跑完给你报告。


四、两个必须知道的细节

1. 接口是幂等的,重复跑不会出现任何问题

如果今天已经签过,再调 daily-checkin 会返回:

代码语言:json
复制
{"code":10001,"msg":"今天已签到,请明天再来"}

注意它返回的是 HTTP 400,不是 200。 所以脚本里不能只看 HTTP 状态码,要判断 code 字段——code=0 是成功,code=10001 是已签到,这两种都算正常。

我还加了个晚间二次确认的定时任务(每天 20:00):如果早上漏了,晚上补上。因为幂等,重复跑零风险。

2. 唯一的硬性条件是电脑得开着

定时任务依赖本机,电脑关机或 WorkBuddy 没启动,任务就跑不了。

我的应对是设两个时间点:早上 9:10 主打卡,晚上 20:00 补漏。只要电脑在任意一个时间点开着,就不会断签。


五、顺手做的两件事:省积分

赚积分是一方面,省积分其实更关键。同一个需求,用不同模型,消耗差十倍。

我从本机 WorkBuddy 的配置缓存里读出了真实的积分倍率表:

模型

倍率

说明

Hy4 preview

x0.00

完全免费

Hy3

x0.00

完全免费

GLM-5.3-Flash

x0.06

最便宜的付费档

GLM-4.6V

x0.11

Deepseek-V4-Flash

x0.17

快速 / 均衡 / 极致

x0.21 / x0.65 / x1.20

GLM 系列

x0.79

Kimi-K3

x1.62

最贵,慎用

日常问答用 x0.00 的免费模型,一分不花。 只有复杂任务才切高倍率模型。

另外还有个错峰技巧:每晚 23:00 到次日 8:00,GLM 系列打 5 折。不急的活儿留到晚上跑,直接省一半。


六、收益算一笔账

以我现在这套配置:

项目

月收益

每日签到

3000 - 4000 积分

每月免费额度

500 积分

省下的(用免费模型 + 错峰)

按使用量,通常能省 30% 以上

对轻度到中度使用来说,基本不用再花钱买套餐

更重要的是——我不用再记着这件事了。连签天数从我接手那天起,再没断过。


七、踩坑清单(照着检查少走弯路)

现象

解法

域名写错

接口返回 404

www.codebuddy.cn,别用 copilot.tencent.com

请求方法写错

GET 返回 404

两个接口都是 POST

只判断 HTTP 状态码

已签到被误报为失败

要判断 code 字段,10001 算成功

UI 自动化点歪

弹出邀请页

放弃 UI 方案,改用 API

token 过期

报「找不到登录态」

手动打开一次 WorkBuddy 即自动刷新

电脑关机

定时任务不执行

设早晚两个时间点兜底


八、写在最后

本人电脑水平一般,这次能跑通,靠的不是技术底子,是把需求说清楚,然后让 AI 去试错

我从头到尾只说了三句话:

  1. 「我每天手动领取,你能帮我领吗?」
  2. 「我是说让你每天帮我做,这是日常性的工作,由你来做。」
  3. 「还有没有办法每天帮我赚积分?」

剩下所有的事——查配置、找接口、试 UI 自动化、失败、换方案、写脚本、挂定时任务——全是 AI 干的。

所以如果你也想省下这笔积分钱,别去学 Python,先学会把需求说清楚。


#WorkBuddy#

本文所有接口、截图、脚本均经本人实测,环境为 Windows + WorkBuddy v5.3.14。如后续版本接口有变,以官方为准。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、我为什么折腾这个
  • 二、先说结论:三条路,只有一条走得通
    • ❌ 方案一:让 AI 定时提醒我去点
    • ❌ 方案二:用 Windows UI 自动化去点按钮
    • ✅ 方案三:绕过界面,直接调官方 API
  • 三、实操开始:四步跑通
    • 第 1 步:找到本机的登录态文件
    • 第 2 步:确认两个官方接口
    • 第 3 步:写脚本(零第三方依赖)
    • 第 4 步:挂到 WorkBuddy 的自动化上
  • 四、两个必须知道的细节
    • 1. 接口是幂等的,重复跑不会出现任何问题
    • 2. 唯一的硬性条件是电脑得开着
  • 五、顺手做的两件事:省积分
  • 六、收益算一笔账
  • 七、踩坑清单(照着检查少走弯路)
  • 八、写在最后
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档