maidraw 0.13.2 → 0.13.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import type { Score } from "../lib/types";
2
- import type { DataOrError } from "../../common/error";
2
+ import { type DataOrError } from "../../common/error";
3
3
  import type { Chart, Database } from "gcm-database/chunithm";
4
4
  import { z } from "zod/v4";
5
5
  import type { ChunithmScoreAdapter } from "../lib/adapter";
@@ -128,6 +128,8 @@ export declare class BestPainter extends ChunithmPainter<typeof BestPainter.THEM
128
128
  private static readonly DEFAULT_THEME;
129
129
  private modules;
130
130
  constructor(database: Database<Chart>);
131
+ private getNaiveRating;
132
+ private getRatingAvg;
131
133
  draw(variables: {
132
134
  username: string;
133
135
  rating: number;
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.BestPainter = void 0;
7
7
  const profile_1 = require("../painter/modules/profile");
8
+ const error_1 = require("../../common/error");
8
9
  const hitokoto_1 = require("../../common/painter/modules/hitokoto");
9
10
  const image_1 = require("../../common/painter/modules/image");
10
11
  const text_1 = require("../../common/painter/modules/text");
@@ -32,6 +33,14 @@ class BestPainter extends painter_1.ChunithmPainter {
32
33
  });
33
34
  this.modules = Object.fromEntries(LOADED_SCHEMAS.map((v) => [v.SCHEMA.shape.type.value, new v(database)]));
34
35
  }
36
+ getNaiveRating(bestScores, length) {
37
+ return this.getRatingAvg(bestScores.slice(0, length), length);
38
+ }
39
+ getRatingAvg(scores, length) {
40
+ if (scores.length <= 0)
41
+ return 0;
42
+ return scores.map((v) => v.rating).reduce((sum, v) => sum + v, 0) / length;
43
+ }
35
44
  async draw(variables, options) {
36
45
  return this.wrapPainter(async (ctx, currentTheme) => {
37
46
  for (const element of currentTheme.content.elements) {
@@ -47,23 +56,48 @@ class BestPainter extends painter_1.ChunithmPainter {
47
56
  variables: {
48
57
  username: (0, halfFullWidthConvert_1.toFullWidth)(variables.username),
49
58
  rating: (0, number_1.truncate)(variables.rating, 0),
59
+ naiveBest30: (0, number_1.truncate)(this.getNaiveRating(options.bestScores ?? [], 30), 2),
60
+ naiveBest50: (0, number_1.truncate)(this.getNaiveRating(options.bestScores ?? [], 50), 2),
61
+ newScoreRatingAvg: (0, number_1.truncate)(this.getRatingAvg(variables.newScores, options.type === "recents" ? 10 : 20), 2),
62
+ oldScoreRatingAvg: (0, number_1.truncate)(this.getRatingAvg(variables.oldScores.slice(0, 30), 30), 2),
50
63
  },
51
64
  });
52
65
  }
53
66
  }, options ?? {});
54
67
  }
55
68
  async drawWithScoreSource(source, variables, options) {
56
- const { data: profile, err: perr } = await source.getPlayerInfo(variables.username, options.type ?? "new");
69
+ if (!options.type)
70
+ options.type = "new";
71
+ const { data: profile, err: perr } = await source.getPlayerInfo(variables.username, options.type);
57
72
  if (perr)
58
73
  return { err: perr };
59
- const { data: score, err: serr } = await source.getPlayerBest50(variables.username);
60
- if (serr)
61
- return { err: serr };
74
+ let newScores, oldScores, bestScores;
75
+ if (options.type === "new") {
76
+ const { data: score, err: serr } = await source.getPlayerBest50(variables.username);
77
+ if (serr)
78
+ return { err: serr };
79
+ newScores = score.new;
80
+ oldScores = score.old;
81
+ bestScores = score.best;
82
+ }
83
+ else if (options.type === "recents") {
84
+ const { data: score, err: serr } = await source.getPlayerRecent40(variables.username);
85
+ if (serr)
86
+ return { err: serr };
87
+ newScores = score.recent;
88
+ oldScores = score.best;
89
+ bestScores = score.best;
90
+ }
91
+ else {
92
+ return {
93
+ err: new error_1.IllegalArgumentError("maidraw.chunithm.painter.best50", `Type can only be "recents" or "new". Found ${options.type}.`),
94
+ };
95
+ }
62
96
  return this.draw({
63
97
  username: profile.name,
64
98
  rating: profile.rating,
65
- newScores: score.new,
66
- oldScores: score.old,
99
+ newScores,
100
+ oldScores,
67
101
  }, {
68
102
  ...options,
69
103
  profilePicture: await (async () => {
@@ -74,6 +108,7 @@ class BestPainter extends painter_1.ChunithmPainter {
74
108
  return undefined;
75
109
  return pfp;
76
110
  })(),
111
+ bestScores,
77
112
  });
78
113
  }
79
114
  }
@@ -1 +1 @@
1
- {"version":3,"file":"best.js","sourceRoot":"","sources":["../../../src/chunithm/painter/best.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"best.js","sourceRoot":"","sources":["../../../src/chunithm/painter/best.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,6 @@ import type { Regions } from "gcm-database-local/maimai";
2
2
  export declare const DX_LATEST = 65;
3
3
  export declare const EX_LATEST = 60;
4
4
  export declare const CN_LATEST = 55;
5
- export declare function findMinorVersion(major: number, minor: number, region: Regions): 0 | 5 | 10 | 85 | 35 | 65 | 15 | 25 | 40 | 20 | 50 | 30 | 60 | 90 | 55 | 99 | 95 | 80 | 70 | 45 | null;
6
- export declare function findNewerMinorVersion(major: number, minor: number, region: Regions): 0 | 5 | 10 | 85 | 35 | 65 | 15 | 25 | 40 | 20 | 50 | 30 | 60 | 90 | 55 | 99 | 95 | 80 | 70 | 45 | null;
7
- export declare function findOlderMinorVersion(major: number, minor: number, region: Regions): 0 | 5 | 10 | 85 | 35 | 65 | 15 | 25 | 40 | 20 | 50 | 30 | 60 | 90 | 55 | 99 | 95 | 80 | 70 | 45 | null;
5
+ export declare function findMinorVersion(major: number, minor: number, region: Regions): 0 | 5 | 10 | 85 | 35 | 65 | 15 | 25 | 30 | 50 | 20 | 40 | 60 | 90 | 55 | 99 | 95 | 80 | 70 | 45 | null;
6
+ export declare function findNewerMinorVersion(major: number, minor: number, region: Regions): 0 | 5 | 10 | 85 | 35 | 65 | 15 | 25 | 30 | 50 | 20 | 40 | 60 | 90 | 55 | 99 | 95 | 80 | 70 | 45 | null;
7
+ export declare function findOlderMinorVersion(major: number, minor: number, region: Regions): 0 | 5 | 10 | 85 | 35 | 65 | 15 | 25 | 30 | 50 | 20 | 40 | 60 | 90 | 55 | 99 | 95 | 80 | 70 | 45 | null;
@@ -143,6 +143,10 @@ export declare class Best50Painter extends MaimaiPainter<typeof Best50Painter.TH
143
143
  private static readonly DEFAULT_THEME;
144
144
  private modules;
145
145
  constructor(database: Database<Chart>);
146
+ private getRatingBase;
147
+ private getRatingAvg;
148
+ private getRatingTargetLevel;
149
+ private getMilestone;
146
150
  draw(variables: {
147
151
  username: string;
148
152
  rating: number;
@@ -11,6 +11,8 @@ const theme_1 = require("../../common/painter/theme");
11
11
  const halfFullWidthConvert_1 = require("../../common/utils/halfFullWidthConvert");
12
12
  const number_1 = require("../../common/utils/number");
13
13
  const profile_1 = require("../painter/modules/profile");
14
+ const lodash_1 = __importDefault(require("lodash"));
15
+ const rg_stats_1 = require("rg-stats");
14
16
  const upath_1 = __importDefault(require("upath"));
15
17
  const v4_1 = require("zod/v4");
16
18
  const scoreGrid_1 = require("./modules/scoreGrid");
@@ -32,6 +34,47 @@ class Best50Painter extends painter_1.MaimaiPainter {
32
34
  });
33
35
  this.modules = Object.fromEntries(LOADED_SCHEMAS.map((v) => [v.SCHEMA.shape.type.value, new v(database)]));
34
36
  }
37
+ getRatingBase(scores, length) {
38
+ if (scores.length < length)
39
+ return 0;
40
+ return (scores
41
+ .map((v) => rg_stats_1.MaimaiDXRate.calculate(v.achievement, v.chart.internalLevel ?? parseInt(v.chart.level, 10) + (v.chart.level.includes("+") ? 0.6 : 0), "CLEAR"))
42
+ .sort((a, b) => a - b)
43
+ .slice(0, length)[0] || 0);
44
+ }
45
+ getRatingAvg(scores, length) {
46
+ if (scores.length <= 0)
47
+ return 0;
48
+ return scores.map((v) => v.dxRating).reduce((sum, v) => sum + v, 0) / length;
49
+ }
50
+ getRatingTargetLevel(rating, achievement) {
51
+ for (let level = 10; level <= 150; ++level) {
52
+ const calculateRating = rg_stats_1.MaimaiDXRate.calculate(achievement, level / 10, "CLEAR");
53
+ if (Math.trunc(calculateRating) > Math.trunc(rating)) {
54
+ return level / 10;
55
+ }
56
+ }
57
+ return null;
58
+ }
59
+ getMilestone(scores, length) {
60
+ const base = this.getRatingBase(scores, length);
61
+ const targets = [];
62
+ for (const score of [100, 100.1, 100.2, 100.3, 100.4, 100.5]) {
63
+ const level = this.getRatingTargetLevel(base, score);
64
+ if (level) {
65
+ targets.push({
66
+ level,
67
+ score,
68
+ });
69
+ }
70
+ }
71
+ if (scores.length >= length && targets.length > 0)
72
+ return `Next rating boost: ${lodash_1.default.uniqWith(targets.sort((a, b) => a.level - b.level), (a, b) => a.level === b.level)
73
+ .map((v) => `lv. ${(0, number_1.ceilWithPercision)(v.level, 1)} ${v.score >= 100.5 ? "SSS+" : `SSS ${(0, number_1.truncate)(v.score, 1)}%`}`)
74
+ .join("/")}`;
75
+ else
76
+ return "Good job!";
77
+ }
35
78
  async draw(variables, options) {
36
79
  return this.wrapPainter(async (ctx, currentTheme) => {
37
80
  for (const element of currentTheme.content.elements) {
@@ -46,6 +89,10 @@ class Best50Painter extends painter_1.MaimaiPainter {
46
89
  variables: {
47
90
  username: (0, halfFullWidthConvert_1.toFullWidth)(variables.username),
48
91
  rating: (0, number_1.truncate)(variables.rating, 0),
92
+ newScoreRatingAvgString: `NEW scores average: ${(0, number_1.ceilWithPercision)(this.getRatingAvg(variables.newScores, 15), 0)}`,
93
+ oldScoreRatingAvgString: `OLD scores average: ${(0, number_1.ceilWithPercision)(this.getRatingAvg(variables.oldScores, 35), 0)}`,
94
+ newScoreMilestone: this.getMilestone(variables.newScores, 15),
95
+ oldScoreMilestone: this.getMilestone(variables.oldScores, 35),
49
96
  },
50
97
  });
51
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"best50.js","sourceRoot":"","sources":["../../../src/maimai/painter/best50.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"best50.js","sourceRoot":"","sources":["../../../src/maimai/painter/best50.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maidraw",
3
- "version": "0.13.2",
3
+ "version": "0.13.3",
4
4
  "description": "A simple library to draw geki/chu/mai images",
5
5
  "main": "dist/index.js",
6
6
  "exports": {