Veersion/dsh-mys-checkin:米游社每日签到 DSH 插件

前言

DSH(DeepSeek Harness)采用「一切皆插件」的架构,插件通过 profile 的 dsh.profile.bundles 注册,由宿主后台调度执行。很多插件只提供会话内的提示或配置,不负责后台任务。想要在后台完成签到、又希望操作在侧边栏统一管理,就需要把面板与执行逻辑都集成到一个插件里。veersion/dsh-mys-checkin 就是这样一个 DSH 插件,它在左侧栏增加「米游社签到」任务面板,通过扫码登录米哈游账号,并在设定的窗口内随机时刻自动为多个游戏签到,登录失效或签到失败时给出明确提示。

插件定位

  • 名称:veersion/dsh-mys-checkin
  • 维护者:Veersion
  • 分类:工作流
  • 星标:0
  • 简介:米游社每日自动签到 DSH 插件:扫码登录、窗口内随机签到、失败提示

插件只依赖 Node 内置模块,无运行时依赖,Cookie 不会经过浏览器,所有设置都在面板中完成。

核心能力

支持游戏

插件支持国服账号绑定的以下游戏:

  • 原神
  • 崩坏:星穹铁道
  • 绝区零
  • 崩坏3
  • 未定事件簿
  • 崩坏学园2

面板与执行

  • 左侧栏新增「米游社签到」任务面板(与「自动化任务」同级)。
  • 任务由宿主后台调度器执行,不依赖某个会话是否打开,也不消耗模型 token。
  • 登录失效、触发人机验证或签到失败时,面板顶部横幅和界面顶部小药丸(shell.overlay)都会给出提示。

登录流程

  1. 在面板顶部点击「扫码登录」。
  2. 用米游社 App 右上角「扫一扫」扫描二维码并在手机上确认。
  3. 二维码只在本机生成,不上传到任何第三方;浏览器支持 BarcodeDetector 时会做一次自检,识别失败会提示刷新。
  4. 登录优先走 App 扫码通道:服务端在二维码里请求 SToken,确认后插件用 SToken 换取 ltoken 与 cookie_token,登录过期时可自动续期;只有 App 通道创建二维码失败时才退回网页通道,但网页凭据不含 SToken,无法自动续期。
  5. 登录成功后状态变为「已登录」,显示昵称与 UID。
  6. 登录凭据保存在 ~/.dsh/mys-checkin/state.json(明文,仅本机可读)。

自动签到

  • 默认时间窗口:18:00–18:30,可增删(最多 4 个)。
  • 每天只执行一次,实际时刻在窗口内均匀随机。
  • 窗口编辑规则:开始时间晚于(或等于)结束时间时,结束时间自动变成「开始 + 1 分钟」;多个窗口允许相同时间;「添加窗口」会在上一个窗口基础上后移 1 小时。
  • 错过窗口后补跑:若 DSH 在窗口结束后才启动、且当天还没签过,会在 3–10 分钟内随机补跑一次。可关闭。
  • 游戏选择:只给勾选的游戏签到;没有角色的游戏会自动跳过并记录。
  • 任务操作:页头有「立即运行」「暂停 / 启用」,卡片里显示状态、频率、下次运行、上次运行摘要。
  • 运行结果:顶部汇总卡显示今日签到账号数、是否自动签到、签到时间、已完成/总数;每个游戏一张卡,列出 UID、签到状态、今日奖励、累计签到天数。
  • 运行日志:保留最近 200 条。

防检测设计

插件从设备指纹与凭据刷新链入手,实现以下措施:

  • 设备 ID 持久化:首次运行生成 UUID 并写入 state.json,之后永不改变;删除 state.json 等同于换机。
  • 签名与版本一致:DS 与 x-rpc-app_version、UA 尾部版本、salt 三者绑定,全部走同一份配置。
  • 每日一次:无论定时还是手动,当天成功跑过就不再自动执行。
  • 随机间隔:游戏之间随机 2–8 秒;定时时刻在窗口内均匀随机。
  • 绑定查询缓存:getUserGameRolesByCookie 每个游戏每天最多一次。
  • 续期克制:只有服务端返回 -100/-111/10001 时才用 stoken 换一次 cookie_token,并只重试一次。
  • 失败即停:触发验证码(1034/-999)立即停止当日剩余游戏并提示,不反复重试。
  • 真实请求头:使用完整的 x-rpc-* 设备头、Origin/Referer、移动端 UA,随版本号统一。

已知限制:

  • 无法自动通过验证码:1034 是全域人机验证,需在米游社 App「我的 → 我的角色」处理。
  • 网页凭据无法续期:只有 App 扫码通道下发 SToken;网页凭据到期后必须重新扫码。
  • Cookie 明文落盘:这是本地自动签名的必要代价;如需更强保护,可把 ~/.dsh/mys-checkin 放在加密卷上。
  • 只支持国服(*_cn 的 game_biz 与 luna 接口)。
  • 一次运行约 1 分钟:游戏之间有随机间隔。

安装与启用

安装需要克隆仓库并完成 profile 配置三件事:

  1. 克隆到任意目录:
git clone https://github.com/Veersion/dsh-mys-checkin.git
  1. 将克隆目录链接到 profile 的 node_modules:
~/.dsh/profiles/desktop/node_modules/@local/dsh-mys-checkin -> /path/to/cloned/repo
  1. 在 profile 的 package.json 里增加依赖:
{
  "dependencies": {
    "@local/dsh-mys-checkin": "link:/path/to/cloned/repo"
  }
}
  1. 同一文件的 dsh.profile.bundles 数组里增加插件名称:
{
  "dsh.profile.bundles": [
    "@local/dsh-mys-checkin"
  ]
}

只有列进 bundles 才会被启用。改完后 DSH 会通过 HMR 重新组合插件树;如果没有自动生效,重启 DSH 即可。

卸载时,删除上面两处条目与链接,重启 DSH,再删除 ~/.dsh/mys-checkin/(包含登录凭据)。

目录与测试

项目目录结构如下:

.
  index.js             宿主插件入口(注册服务)
  client.js            浏览器 bundle(侧边栏任务面板 + 顶部提示)
  cordis.patch.yml     把插件插入 profile 配置树的 bundle patch
  lib/config.js        配置默认值、游戏表、校验
  lib/store.js         状态文件(原子写、迁移、日志环)
  lib/ds.js            DS 签名、请求头、Cookie 解析
  lib/http.js          带超时与重试的请求封装
  lib/mys.js           米游社协议(扫码/角色/签到/续期)
  lib/qr.js            二维码编码器(字节模式、M 级、版本 1–15)
  lib/scheduler.js     每日随机窗口调度(纯函数 + 定时器)
  lib/service.js       宿主服务:路由、登录态、签到流程
  test/                单元测试与端到端测试(假接口)
  .github/workflows/   CI:Node 22 / 24 上跑全部测试

无需安装依赖,直接在仓库根目录执行测试:

node test/protocol.test.mjs
node test/schedule.test.mjs
node test/qr.test.mjs
node test/service.test.mjs

协议与配置

插件在以下环节与米游社接口交互:

  • 扫码创建/轮询:优先 POST passport-api.mihoyo.com/account/ma-cn-passport/app/createQRLogin 与 /app/queryQRLoginStatus(token_types=1,返回 SToken);失败时退回网页通道。
  • 凭据续期:GET passport-api.mihoyo.com/account/auth/api/getCookieAccountInfoBySToken、getLTokenBySToken。
  • 角色列表:GET api-takumi.mihoyo.com/binding/api/getUserGameRolesByCookie?game_biz=…。
  • 今日状态:GET …/event/luna/{game}/info?act_id&region&uid → is_sign、total_sign_day、first_bind。
  • 账号昵称:GET bbs-api.miyoushe.com/user/api/getUserFullInfo?uid=<ltuid>(DS2 签名;失败时回退为游戏内昵称)。
  • 签到:POST https://api-takumi.mihoyo.com/event/luna/{game}/sign(绝区零用 act-nap-api.mihoyo.com)。
  • 签名:DS1 用 md5("salt=<salt>&t=<t>&r=<6位随机>") → "<t>,<r>,<md5>";BBS 接口用 DS2(盐 t0qEgfub…,含 body/query)。

默认参数:

  • x-rpc-app_version = 2.109.0
  • salt = d9200c846b10886e8c874fc33c8f308b

米哈游更新客户端后这两项可能都要换,可在「高级设置」里修改,无需改代码。

适用场景与注意

适合在本地通过 DSH 自动化每日签到的用户,尤其是希望集中管理多个米哈游游戏签到的场景。插件以当前 DSH 进程权限运行,安装前建议检查源码与许可证。由于依赖 Cookie 明文落盘,请勿在共享电脑上直接使用,或把 ~/.dsh/mys-checkin 放在加密卷上。插件仅支持国服,不支持国际服。

结语

veersion/dsh-mys-checkin 把米游社签到集成到 DSH 侧边栏,通过扫码登录、随机窗口调度和防检测设计,尽量减少人为操作与风控风险。如果你已经在使用 DSH,并且需要为多个米哈游游戏自动签到,这个插件可以在不占用会话 token 的前提下完成后台任务,并通过统一的面板查看状态与日志。

  • 目录页:https://www.skillhub.cn/plugins/Veersion/dsh-mys-checkin
  • GitHub:https://github.com/Veersion/dsh-mys-checkin
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜