Qoder 每日签到助手(自动领 100 Credits + 积分查询)
读取本机已登录 Qoder 的登录态,调用 Campaign API 领取「每日 100 Credits」奖励,无需手动点击客户端浮窗。支持积分余额查询、连续签到天数、活动状态展示。
> 安全边界(自证清白):只读登录态文件,绝不打印/外传 accessToken 或 machineToken。写操作仅限 Campaign 领取接口。不修改/删除任何文件。
一、何时使用(触发条件)
当用户出现以下任意意图时,调用本技能:
- 签到类:签到 Qoder、打卡、帮我签到、自动签到、每日签到、Qoder 打卡、自动打卡 Qoder、领积分、领 Credits
- 查询类:查积分、我的积分、积分余额、Qoder 积分、Credits 余额、今天签到了吗、连续登录几天
任一意图命中即触发;无需用户精确措辞。
二、前置条件
- 用户已登录 Qoder 桌面客户端(本机存在登录态文件
auth.v1.dat)。找不到文件时停止并提示「请先在 Qoder 桌面客户端登录」,不伪造数据。 - 运行环境:Python 3.8+ 标准库 +
cryptography库(用于 AES-256-GCM 解密登录态)。安装:pip install cryptography。 - 网络:需要访问
openapi.qoder.com.cn(国内版)或openapi.qoder.sh(国际版)。 - 平台限制:当前仅支持 Windows(DPAPI 解密密钥);macOS/Linux 支持待实现。
三、执行流程
当用户请求签到或查询积分时,按以下步骤执行:
- 定位脚本:技能安装目录
<skill-dir>(~/.qoder-cn/skills/qoder-checkin/),脚本在<skill-dir>/scripts/checkin.py。 - 按意图选命令(见下表),用 Bash 工具执行。
- 获取输出:脚本向 stdout 打印文字播报或 JSON,不打印任何 token。
- 向用户呈现:将脚本输出直接展示给用户。
四、命令与参数
| 意图 | 命令 |
|---|---|
| 自动签到 + 积分播报(默认) | python "<skill-dir>/scripts/checkin.py" |
| 仅签到(不查询) | python "<skill-dir>/scripts/checkin.py" --checkin-only |
| 仅查询积分(不签到) | python "<skill-dir>/scripts/checkin.py" --query-only |
| 机器可读 JSON | python "<skill-dir>/scripts/checkin.py" --json |
| 签到 + JSON | python "<skill-dir>/scripts/checkin.py" --json |
| 生成桌面 HTML 报告 | python "<skill-dir>/scripts/checkin.py" --html |
| 关闭系统通知 | 追加 --no-toast |
| 指定区域(国内/国际) | 追加 --region cn 或 --region intl(默认自动检测) |
参数说明
- --checkin-only:仅执行签到,不查询积分数据。
- --query-only:仅查询积分数据,不执行签到。
- --json:输出机器可读 JSON(含 total_credits、streak_days、checkin_result、activities)。
- --html:生成桌面 HTML 报告(默认不生成)。
- --no-toast:关闭系统通知。
- --region cn|intl:强制指定区域;缺省自动检测(优先国内版)。
五、输出处理规范
- 默认(非
--json):把文字播报回显到对话,并尝试弹一次跨平台系统通知(Windows 调 PowerShell、macOS 调osascript、Linux 调notify-send,失败静默降级)。 - 桌面 HTML:仅当显式带
--html才生成,且失败静默降级(stderr 提示,不影响主结果)。 - 绝不向对话输出 token;控制台仅出现播报文本。
--json模式:原样回传 JSON,保持机器输出干净。
六、核心能力清单
| 能力 | 对应数据/接口 |
|---|---|
| 自动签到 | POST /sash/api/v1/me/campaigns/{campaignId}/claim,幂等安全 |
| 活动列表 | GET /sash/api/v1/me/campaigns |
| 签到活动识别 | 筛选 actionType == "CLAIM_BENEFIT" 的活动(每日签到) |
| 签到状态 | claimStatus 字段(CLAIMABLE / CLAIMED) |
| 积分奖励 | 每次签到领取 100 Credits |
| 签到催办 | 今日未签到时主动提醒 |
七、接口与实现参考
完整接口明细、登录态定位路径、字段映射、签到幂等与错误处理,见脚本内注释。摘要:
- 登录态:
%APPDATA%\com.qodercn.app.stable\auth.v1.dat(Windows)或~/Library/Application Support/com.qodercn.app.stable/auth.v1.dat(macOS)或~/.config/com.qodercn.app.stable/auth.v1.dat(Linux)。AES-256-GCM 加密,密钥从Local State文件获取,使用 DPAPI 解密(Windows)。 - 登录态文件格式:
[0:3] header = b"v10" [3:15] nonce (12 bytes) [15:] blob = ciphertext + tag (tag 为最后 16 字节) - 认证头:
Authorization: Bearer <token> Cosy-ClientType: 10 Cosy-MachineToken: <machine-token-from-go-binary> Cosy-Version: <cosy-version> Cosy-MachineOS: <machine-os> Cosy-MachineHostname: <machine-hostname> Cosy-MachineId: <machine-id> Cosy-MachineCode: <machine-code> Cosy-MachineType: <machine-type> Content-Type: application/json
注意:机器信息必须通过 Qoder IDE 的 Go 二进制文件(Qoder.exe machine-info --workDir <CosyDataPath>)获取,不能使用auth.machine-id文件中的 UUID。API 会验证完整的机器信息头,缺少或错误的机器信息会导致活动列表返回空。 - 活动列表(只读):
GET /sash/api/v1/me/campaigns,返回结构:
json { "uid": "...", "showCampaign": true, "claimable": false, "campaigns": [ { "campaignId": "...", "campaignKey": "act-YYYYMMDD-XXX", "actionType": "CLAIM_BENEFIT", // 每日签到活动 "claimStatus": "CLAIMABLE" | "CLAIMED", "startAt": 1788243600, "endAt": 1793462340, "placements": [...] } ] }
注意:每日签到活动的actionType为"CLAIM_BENEFIT";其他如"VIEW_DETAILS"为展示类活动(非签到)。 - 领取接口(写,已验证):
POST /sash/api/v1/me/campaigns/{campaignId}/claim;已领取返回status: "CLAIMED"或"REPLAYED"——幂等,不重复发放。
八、限制与安全约束
安全约束(硬规则)
- 只读登录态文件,绝不修改/删除/外传 accessToken / machineToken;任何输出不含真实 token。
- 写操作仅允许一个已验证接口:Campaign 领取;绝不调用其他写接口。
- 不修改/删除任何文件(除签到 API 调用外)。
停止条件
- 登录态缺失或 token 过期:停止,告知「请先登录 Qoder 桌面客户端」,不伪造。
- 接口返回非 200:停止并报告。
- 活动列表为空:如实告知「当前无可用活动」,绝不编造。
九、排错速查
| 现象 | 处理 |
|---|---|
| 未找到登录态 | 先登录 Qoder 桌面客户端 |
| HTTP 401/403 | token 过期,重新登录 Qoder |
| 活动列表为空 | 当前无可用活动,或区域选择错误(尝试 --region intl) |
| 领取返回 CLAIMED/replayed | 正常幂等返回,今日已领 |
| 接口 500/超时 | 服务端偶发,脚本重试 3 次,稍后重试 |
| 通知不弹 | 跨平台均失败静默降级;以桌面 HTML 为准;加 --no-toast 可彻底关 |
十、版本说明
- 当前版本号:1.0.2。
- 1.0.2(2026-10-27 修复机器信息):修复 API 返回空活动列表的问题。根因是脚本使用了错误的 machineToken(从 auth.machine-id 读取的 UUID),而客户端实际使用 Qoder IDE Go 二进制文件生成的机器信息。新增
get_machine_info()函数调用 Go 二进制获取正确的机器信息,并添加所有必需的 Cosy-* 请求头。 - 1.0.1(2026-10-23 修复 token 刷新):修复 token 失效导致活动列表返回空的问题。每次 API 调用前自动刷新 token,确保稳定获取活动数据。
- 1.0.0(2026-10-20 初始发布):自动签到(幂等)、积分余额查询、活动状态展示。兼容 Qoder 桌面端 auth.v1.dat AES-256-GCM 加密登录态。支持 Windows/macOS/Linux 跨平台。