본문으로 건너뛰기
E

dsh-gacha-calendar

eastmg/dsh-gacha-calendar

Anime game banner and event schedule lookup: sidebar button with current banners, events, and countdowns for 11 gacha games, auto-refresh, and per-game selectable sources.

설치

dsh plugin --profile web add github:eastmg/dsh-gacha-calendar

README

dsh-gacha-calendar

DeepSeek Harness 桌面端侧边栏插件:一键查看主流二游的当期卡池与活动起止,支持联网自动刷新,支持手动添加或删除条目。 全程使用 DeepSeek Harness 进行 Vibe Coding 开发。

截图

排期面板 面板详情 设置页

功能

  • 侧边栏底部「📅 二游排期」按钮 → 悬浮面板,按行展示每款游戏的当期卡池、卡池起止、当期活动、活动起止
  • 倒计时显示剩余时间;悬停看卡池/活动的完整名称与源站原文
  • 刷新提示(顶行):按「成功 / 卡池失败 / 活动失败 / 新卡池未公布 / 新活动未公布」归类,悬停看逐条原因;"来源报错"计入失败、"源站还没收录当期"不算失败;某列沿用上次缓存时,悬停里另起一行说明。游戏名悬停可看上次完全成功的时间
  • 自动刷新:启动时判一次——插件更新(缓存不是当前版本产出的)与首次安装会强制刷一次,不看自动刷新开关(悬停格式、来源地址、解析器、样式等改动一刷新即生效);其余按设置间隔(1–42 天)到点才刷,间隔从上次成功刷新起算
  • 来源可换:各游戏来源独立(官方公告 / 官方 Wiki / 第三方站),失败自动回退备选源;设置页可切换来源或填自定义地址
  • 设置页:自动刷新开关与频率、展示顺序、条目显隐/删除、新增自定义条目(名称+图标+来源链接,内容由链接解析产出)
  • 解析器自检(设置页按钮):逐个来源跑一遍,报告「哪个源解析不出当期内容 / 哪个源抓取报错」——源站改版后一键定位问题;只读,不改动设置与缓存

内置覆盖 11 款游戏:

游戏服务器
原神国服
崩坏:星穹铁道国服
绝区零国服
鸣潮国服
明日方舟国服
明日方舟:终末地国服
蔚蓝档案国服
蔚蓝档案国际服
蔚蓝档案日服
重返未来:1999国服
异环国服

数据来源

排期数据实时抓取自各游戏官方公告 / 官方 Wiki / 第三方站——bwiki、PRTS、wiki.gg、Game8、GameKee、Canmoe、GachaTracker、ldshop、小米游戏中心等。 无联网数据时对应列显示为空;单列抓取失败则沿用上次成功数据,并在悬停里标注。

安装

dsh plugin --profile desktop add dsh-gacha-calendar

或将仓库复制到 profile 的 node_modules 后重启 DSH Desktop。

适用于 DSH Desktop(peer 依赖 @deepseek-ai/*@^0.1.1-rc.2);插件本身零运行时依赖。

开发

npm run build   # src/ → lib/(确定性拼接,无第三方依赖)
npm run check   # 只校验:src/ 拼出来的结果是否与产物一致(不写盘)

一个仓库,两个 npm 包

本仓库同时发布两个包,源码只有一份(抓取/解析核心):

npm 包内容谁用
dsh-gacha-calendarDSH 桌面端插件(已内联同一份 core,运行时不依赖 npm 解析)DSH Desktop
gacha-calendar-core平台中立的抓取核心:createEngine({ transport, storage, now }),零依赖、零宿主依赖其它平台(开发中)
npm run publish:plugin   # 发布 DSH 插件包(dsh-gacha-calendar)
npm run publish:core     # 发布中立核心包(gacha-calendar-core,版本号跟随根包)

源站改版时只需改一处:改 src/client/30-parsers.js 等核心文件 → npm run build → 两个包一起发版,各平台重新构建即可。

  • src/ 是唯一真源,lib/packages/core/ 都是构建产物,不要手改
  • build.mjs 做三件事:按 ORDER 原样拼接 src/client/*.jslib/client.js(DSH 的 __ModuleLoader__ 工厂形态);复制 src/index.jslib/index.js;把 core 主体包成 packages/core/core.mjs(ESM 导出 createEngine)。拼接逐字节确定,所以 check 能给出"一致/不一致"的确定结论;同时会把根 package.json 的版本号注入两个产物。
  • 源文件约定:LF 换行、UTF-8 无 BOM、Tab 缩进(带 BOM 会让 DSH 启动直接失败)。build.mjs 会强制校验;.githooks/pre-commit 还会在提交 src/**lib/**packages/**build.mjs 时自动跑一次 check,防止绕过源码直接改产物。
  • 钩子怎么生效npm install 会自动执行 prepare 脚本把 core.hooksPath 指到 .githooks。若跳过了 install,手工执行一次即可:git config core.hooksPath .githooks
  • 历史说明:本仓库此前只提交了打包产物(没有 src/),package.json 里声明的 tsc && tsdown 从未真正可用;当前构建脚本是从产物回填源码时落地的替代方案。

插件结构

dsh-gacha-calendar/
├── build.mjs        # 构建脚本(确定性拼接 + --check 校验 + 版本注入)
├── src/             # 唯一真源
│   ├── index.js     # host 端:配置 schema + 同源代理(白名单域名,绕 CORS/Referer 反爬)
│   └── client/      # web 端(下列顺序即 build.mjs 的 ORDER)
│       ├── 05-version.js     # 插件版本号(占位符,构建时由 package.json 注入)
│       ├── 00-head.js        # DSH 模块加载壳 + react require
│       ├── 10-config.js      # 默认配置 / 刷新频率选项
│       ├── 15-env.js         # core 环境缝:transport / 时钟 / 计时器
│       ├── 20-sources.js     # SOURCES 来源注册表(11 款游戏:默认源 + 备选源)
│       ├── 30-parsers.js     # 全部解析器(纯函数)
│       ├── 40-fetchers.js    # 抓取器 + GACHA_FETCHERS / EVENT_FETCHERS 注册表
│       ├── 50-refresh.js     # 刷新编排、失败沿用旧值、提示归类
│       ├── 60-helpers.js     # 格式化 / 悬停 / 排序 / 启动刷新判定
│       ├── engine-head.js    # core 外壳:createEngine(storage / listGames / getCached)
│       ├── engine-api.js     # 引擎 API:refresh / selfCheck / __test
│       ├── 70-styles.js      # 样式
│       ├── 80-components.js  # React 组件(面板 + 设置页)
│       ├── 90-plugin.js      # apply(ctx):slots / settingsScope / 悬停 marquee
│       ├── 92-dsh-env.js     # DSH 环境适配(直连 + 宿主代理)
│       └── 99-tail.js        # exports.apply / exports.inject
├── lib/             # 构建产物(npm 包只发布这里)
│   ├── index.js / client.js
│   └── types/       # 类型声明(package.json 的 types 指向它)
├── packages/core/   # 第二个产物:平台中立核心包 gacha-calendar-core
├── assets/          # README 截图
├── .githooks/       # pre-commit:编码校验 + src/产物一致性
├── package.json     # dsh.bundle.patch + dsh.client.inject(DSH 加载规范)
├── cordis.patch.yml # bundle patch
└── LICENSE / README.md

致谢

  • MAA1999/M9A——重返未来:1999 的逐期「征集时间」依赖官方游戏内公告接口,该接口线索来自它的 tools/activity_data

免责声明

  • 本项目为非营利性质的个人项目,与各游戏厂商、发行商及官方/社区 Wiki 均不存在隶属或合作关系。
  • 卡池、活动等排期数据均取自各游戏公开的官方公告与社区 Wiki、第三方站,图标与截图的版权同样归原权利方所有;本项目仅作信息聚合展示,不提供亦不存储任何游戏资源。
  • 如权利人认为本项目展示的内容侵犯其合法权益,请通过 Issue 告知,核实后将尽快删除相关内容。

License

MIT

관련 플러그인