Skip to content

@mai-kit/prober

@mai-kit/prober 提供舞萌 DX 玩家数据的只读查询。

ProberPlayerPlayerProfileScoreBests 不依赖具体查分服务。 LXNS 与 Diving-Fish 适配把各自的 API 响应转换为这些类型,得到的 profilebests 都可以传给 Draw.poster()

查询玩家数据

ts
// player 由适配创建,类型为 ProberPlayer
const [profile, bests] = await Promise.all([
  player.getProfile(),
  player.getBests(),
]);
// → Draw.poster(profile, bests)

内置适配

ts
import { createLxnsClient, createDivingFishClient } from "@mai-kit/prober";

// LXNS
const me = createLxnsClient({ personalAccessToken: "..." }).me();

// Diving-Fish 公开 B50
const df = createDivingFishClient();
const player = await df.getPlayer({ username: "someone" });

错误处理

  • ProberError:鉴权 / HTTP / 业务失败
  • ProberNotImplementedError:适配无法实现某能力(包级,供实现复用)
  • 适配子类:LxnsProberError / DivingFishProberError
ts
import {
  isDivingFishProberError,
  isLxnsProberError,
  isProberError,
  isProberNotImplementedError,
} from "@mai-kit/prober";

try {
  await player.getBests();
} catch (error) {
  if (isProberNotImplementedError(error)) console.error("unsupported", error.method);
  else if (isLxnsProberError(error)) console.error("LXNS", error.status);
  else if (isDivingFishProberError(error)) console.error("Diving-Fish", error.status);
  else if (isProberError(error)) console.error("prober", error.message);
  else throw error;
}

包与职责 · 快速开始

接口与模型

名称描述
BestsBest50 结构。
BestScoreCapability提供单谱面最佳成绩查询的玩家能力。
HeatmapCapability提供出勤热力图查询的玩家能力。
PlayerCollection玩家当前装备的收藏品信息。
PlayerCollectionListCapability提供玩家已获得收藏品列表的能力。
PlayerCollectionProgressCapability提供单个收藏品完成进度的能力。
PlayerProfile玩家档案(与具体查分服务无关的通用模型)。 字段语义对齐常见查分器约定;可直接交给 @mai-kit/drawDraw.poster
ProberPlayer已绑定身份的玩家只读查询接口(与具体查分服务无关)。
RatingTrend某一日或版本节点的 Rating 走势记录。
RatingTrendCapability提供 Rating 走势查询的玩家能力。
RecentScoresCapability提供最近成绩查询的玩家能力。
Score单条成绩。
ScoreHistoryCapability提供单谱面成绩历史查询的玩家能力。
ScoreKey唯一定位一张谱面的组合键。
ScoreListCapability提供全量成绩查询的玩家能力。
ScoreRankingCapability提供单谱面公开排行查询的玩家能力。
ScoreRankingEntry单谱面公开排行中的一名玩家成绩。
SimpleScore不含达成率与 DX 分的精简成绩,用于仅需谱面与通关标记的列表。
FullProberPlayer具备档案、Best50、全量成绩、最近成绩、走势、热力图与单谱面历史的玩家查询对象。 由支持上述全部能力的适配在绑定身份后返回(与具体数据源无关)。
Heatmap出勤热力图:键为数据源的日期标识,值为当日游玩次数。
ScoreHistory单谱面的历史成绩;数据源明确表示无记录时为 null
ScoreQuery成绩列表的可选筛选条件。
ScoresProberPlayer至少提供档案、Best50 与全量成绩的玩家对象。
SongScoreQuery必须指定曲目 id 或曲名的成绩查询(用于单曲 Best 接口)。

LXNS 适配

名称描述
LxnsProberErrorLXNS 查分适配专用错误(继承 ProberError)。
LxnsClientOptionsLXNS 适配的客户端选项(至少提供一种 token)。
LxnsDevClientLXNS 开发者令牌路径:先绑定玩家,再调用玩家能力。
LxnsDevPlayerLXNS 开发者令牌绑定的玩家。
LxnsPersonalPlayerLXNS 个人令牌绑定的玩家。
LxnsYearInReviewLXNS 年度总结;上游会按年份增加额外统计字段。
LxnsClientLXNS 适配客户端类型:按构造时传入的 token 条件暴露方法
createLxnsClient创建 LXNS 查分适配客户端(将 LXNS API 映射为 ProberPlayer 等通用类型)。
isLxnsProberError类型守卫:是否为 LxnsProberError

Diving-Fish 适配

名称描述
DivingFishProberErrorDiving-Fish(水鱼)查分适配专用错误(继承 ProberError)。
DivingFishClientOptionsDiving-Fish 适配客户端选项。
DivingFishDeveloperPlayer水鱼 Developer-Token 绑定的玩家。
DivingFishRatingRankEntry水鱼公开 Rating 排行中的一名玩家。
DivingFishVersionScore水鱼 /query/plate 返回的按版本成绩(字段少于完整 Score)。
DivingFishClientDiving-Fish 适配客户端类型。
DivingFishPlayerQuery查询目标:用户名或 QQ 二选一。
createDivingFishClient创建 Diving-Fish(水鱼)查分适配客户端。
isDivingFishProberError类型守卫:是否为 DivingFishProberError

错误

名称描述
ProberError查分器通用错误(鉴权失败、HTTP / 业务错误等)。
ProberNotImplementedError当前查分源无法实现某查询能力时抛出的包级错误。
ProberErrorInitProberError 构造参数
ProberNotImplementedErrorInitProberNotImplementedError 构造参数
isProberError类型守卫:是否为 ProberError(含各适配子类)。
isProberNotImplementedError类型守卫:是否为 ProberNotImplementedError