flowerpicker 1.6.0 → 1.7.0
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.
- package/README.md +1 -1
- package/dist/convert.d.ts +8 -0
- package/dist/convert.d.ts.map +1 -0
- package/dist/convert.js +208 -0
- package/dist/convert.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +152 -0
- package/dist/index.js.map +1 -0
- package/dist/parser.d.ts +9 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +217 -0
- package/dist/parser.js.map +1 -0
- package/dist/types/convert.d.ts +149 -0
- package/dist/types/convert.d.ts.map +1 -0
- package/dist/types/convert.js +16 -0
- package/dist/types/convert.js.map +1 -0
- package/dist/types/errors.d.ts +7 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +13 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/scorelogJson.d.ts +95 -0
- package/dist/types/scorelogJson.d.ts.map +1 -0
- package/dist/types/scorelogJson.js +2 -0
- package/dist/types/scorelogJson.js.map +1 -0
- package/dist/util.d.ts +4 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +24 -0
- package/dist/util.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -44,7 +44,7 @@ The following games may not be updated by me, PRs may be reviewed and accepted
|
|
|
44
44
|
| pop'n music | ✅ | ✅ |
|
|
45
45
|
| MÚSECA | ✅[^1] | ✅ |
|
|
46
46
|
| GITADORA | ✅ | ✅ |
|
|
47
|
-
| DanceDanceRevolution |
|
|
47
|
+
| DanceDanceRevolution | ✅ | ✅ |
|
|
48
48
|
| Sound Voltex | ❌ | ❌ |
|
|
49
49
|
| beatmania IIDX | ❌ | ❌ |
|
|
50
50
|
| NOSTALGIA | ✅ | - |
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type * as convertType from "./types/convert.js";
|
|
2
|
+
import type * as scorelogJson from "./types/scorelogJson.js";
|
|
3
|
+
export declare function jubeatToTachiCompat(jubeatDataJSON: scorelogJson.JubeatDataRawJSON[], msOffset?: number, service?: string): convertType.BatchManualJSONJubeat;
|
|
4
|
+
export declare function pnmToTachiCompat(pnmDataJSON: scorelogJson.PnmDataRawJSON[], msOffset?: number, service?: string): convertType.BatchManualJSONPnm;
|
|
5
|
+
export declare function musecaToTachiCompat(musecaDataJSON: scorelogJson.MusecaDataRawJSON[], msOffset?: number, service?: string): convertType.BatchManualJSONMuseca;
|
|
6
|
+
export declare function gitadoraToTachiCompat(gitadoraDataJSON: scorelogJson.GitadoraDataRawJSON[], playtype: "Gita" | "Dora", msOffset?: number, service?: string): convertType.BatchManualJSONGitadora;
|
|
7
|
+
export declare function ddrToTachiCompat(ddrDataJSON: scorelogJson.DDRDataRawJSON[], playtype: "SP" | "DP", msOffset?: number, service?: string): convertType.BatchManualJSONDDR;
|
|
8
|
+
//# sourceMappingURL=convert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../src/convert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,WAAW,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,KAAK,YAAY,MAAM,yBAAyB,CAAC;AAE7D,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,YAAY,CAAC,iBAAiB,EAAE,EAAE,QAAQ,GAAE,MAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,qBAAqB,CAmC/J;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,YAAY,CAAC,cAAc,EAAE,EAAE,QAAQ,GAAE,MAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,kBAAkB,CAkCnJ;AAED,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,YAAY,CAAC,iBAAiB,EAAE,EAAE,QAAQ,GAAE,MAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,qBAAqB,CAqD/J;AAED,wBAAgB,qBAAqB,CAAC,gBAAgB,EAAE,YAAY,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,GAAE,MAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,uBAAuB,CAmClM;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,YAAY,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,EAAE,QAAQ,GAAE,MAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,kBAAkB,CA0D1K"}
|
package/dist/convert.js
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
export function jubeatToTachiCompat(jubeatDataJSON, msOffset = 0, service) {
|
|
2
|
+
// Thank you to https://gist.github.com/Meta-link/d01c15fc56a277becc7d67a7c1dccfa2 for the tachi structure
|
|
3
|
+
let tachiCompJson = {
|
|
4
|
+
meta: {
|
|
5
|
+
"game": "jubeat",
|
|
6
|
+
"playtype": "Single",
|
|
7
|
+
"service": service ? service : "FlowerPicker",
|
|
8
|
+
},
|
|
9
|
+
scores: []
|
|
10
|
+
};
|
|
11
|
+
jubeatDataJSON.forEach((item) => {
|
|
12
|
+
tachiCompJson.scores.push({
|
|
13
|
+
"score": Number(item.playScore),
|
|
14
|
+
"lamp": item.playLamp.toUpperCase(), // Values returned by the scraper are the same, just not in uppercase
|
|
15
|
+
"musicRate": Number(item.playMusicRate),
|
|
16
|
+
"matchType": "inGameID",
|
|
17
|
+
"identifier": item.songID.toString(),
|
|
18
|
+
"difficulty": (item.playIsHardPlay ? "HARD " : "") + item.playChartDifficultyString.toUpperCase(),
|
|
19
|
+
"timeAchieved": Math.floor(new Date(item.playTimestampString).getTime() - msOffset),
|
|
20
|
+
"judgements": {
|
|
21
|
+
"perfect": Number(item.playScoreJudgements.perfects),
|
|
22
|
+
"great": Number(item.playScoreJudgements.greats),
|
|
23
|
+
"good": Number(item.playScoreJudgements.goods),
|
|
24
|
+
"poor": Number(item.playScoreJudgements.poors),
|
|
25
|
+
"miss": Number(item.playScoreJudgements.misses)
|
|
26
|
+
},
|
|
27
|
+
"optional": {
|
|
28
|
+
"maxCombo": Number(item.playMaxCombo),
|
|
29
|
+
"musicBar": item.playJudgeBar
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
return tachiCompJson;
|
|
34
|
+
}
|
|
35
|
+
export function pnmToTachiCompat(pnmDataJSON, msOffset = 0, service) {
|
|
36
|
+
// Thank you to https://github.com/HutchyBen/flower-tachi/blob/main/games/popn.py for helping me figure out how to parse the lamp thing
|
|
37
|
+
let tachiCompJson = {
|
|
38
|
+
meta: {
|
|
39
|
+
"game": "popn",
|
|
40
|
+
"playtype": "9B",
|
|
41
|
+
"service": service ? service : "FlowerPicker",
|
|
42
|
+
},
|
|
43
|
+
scores: []
|
|
44
|
+
};
|
|
45
|
+
pnmDataJSON.forEach((item) => {
|
|
46
|
+
if (item.playChartDifficultyString.includes("BATTLE"))
|
|
47
|
+
return; // Battle charts are not supported by Tachi
|
|
48
|
+
const medals = ["ERROR", "failedCircle", "failedDiamond", "failedStar", "easyClear", "clearCircle", "clearDiamond", "clearStar", "fullComboCircle", "fullComboDiamond", "fullComboStar", "perfect"];
|
|
49
|
+
tachiCompJson.scores.push({
|
|
50
|
+
"score": item.playScore,
|
|
51
|
+
"clearMedal": medals[item.playMedal],
|
|
52
|
+
"judgements": {
|
|
53
|
+
"cool": item.playScoreJudgements.cool,
|
|
54
|
+
"great": item.playScoreJudgements.great,
|
|
55
|
+
"good": item.playScoreJudgements.good,
|
|
56
|
+
"bad": item.playScoreJudgements.bad,
|
|
57
|
+
},
|
|
58
|
+
// Has to turn EASY/NORMAL/HYPER/EX to Easy/Normal/Hyper/EX
|
|
59
|
+
"difficulty": item.playChartDifficultyString.length > 2 ? item.playChartDifficultyString.charAt(0).toUpperCase() + item.playChartDifficultyString.slice(1).toLowerCase() : item.playChartDifficultyString.toUpperCase(),
|
|
60
|
+
"matchType": "inGameID",
|
|
61
|
+
"identifier": item.songID.toString(),
|
|
62
|
+
"timeAchieved": Math.floor(new Date(item.playTimestampString).getTime() - msOffset),
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
return tachiCompJson;
|
|
66
|
+
}
|
|
67
|
+
export function musecaToTachiCompat(musecaDataJSON, msOffset = 0, service) {
|
|
68
|
+
let tachiCompJson = {
|
|
69
|
+
meta: {
|
|
70
|
+
"game": "museca",
|
|
71
|
+
"playtype": "Single",
|
|
72
|
+
"service": service ? service : "FlowerPicker",
|
|
73
|
+
},
|
|
74
|
+
scores: []
|
|
75
|
+
};
|
|
76
|
+
musecaDataJSON.forEach((item) => {
|
|
77
|
+
let parsedLamp = item.playLamp;
|
|
78
|
+
let parsedDifficulty;
|
|
79
|
+
if (parsedLamp === "CLEARED")
|
|
80
|
+
parsedLamp = "CLEAR";
|
|
81
|
+
// https://github.com/zkldi/Tachi/blob/a2f71ffcb38240089f2a0c1168ccd72afa566826/server/src/game-implementations/games/museca.ts#L75
|
|
82
|
+
if (item.playScore === 1000000)
|
|
83
|
+
parsedLamp = "PERFECT CONNECT ALL";
|
|
84
|
+
if (item.playScore < 800000)
|
|
85
|
+
parsedLamp = "FAILED";
|
|
86
|
+
if (item.playScore >= 800000 && parsedLamp === "FAILED")
|
|
87
|
+
parsedLamp = "CLEAR";
|
|
88
|
+
switch (item.playChartDifficultyString) {
|
|
89
|
+
case "翠":
|
|
90
|
+
parsedDifficulty = "Green";
|
|
91
|
+
break;
|
|
92
|
+
case "橙":
|
|
93
|
+
parsedDifficulty = "Yellow";
|
|
94
|
+
break;
|
|
95
|
+
case "朱":
|
|
96
|
+
parsedDifficulty = "Red";
|
|
97
|
+
break;
|
|
98
|
+
default:
|
|
99
|
+
parsedDifficulty = "ERROR";
|
|
100
|
+
}
|
|
101
|
+
tachiCompJson.scores.push({
|
|
102
|
+
"score": item.playScore,
|
|
103
|
+
"lamp": parsedLamp,
|
|
104
|
+
"judgements": {
|
|
105
|
+
"critical": item.playScoreJudgements.critical,
|
|
106
|
+
"near": item.playScoreJudgements.near,
|
|
107
|
+
"miss": item.playScoreJudgements.error,
|
|
108
|
+
},
|
|
109
|
+
"difficulty": parsedDifficulty,
|
|
110
|
+
"matchType": "inGameID",
|
|
111
|
+
"identifier": item.songID.toString(),
|
|
112
|
+
"timeAchieved": Math.floor(new Date(item.playTimestampString).getTime() - msOffset),
|
|
113
|
+
optional: {
|
|
114
|
+
"maxCombo": item.playMaxCombo,
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
return tachiCompJson;
|
|
119
|
+
}
|
|
120
|
+
export function gitadoraToTachiCompat(gitadoraDataJSON, playtype, msOffset = 0, service) {
|
|
121
|
+
let tachiCompJson = {
|
|
122
|
+
meta: {
|
|
123
|
+
"game": "gitadora",
|
|
124
|
+
"playtype": playtype,
|
|
125
|
+
"service": service ? service : "FlowerPicker",
|
|
126
|
+
},
|
|
127
|
+
scores: []
|
|
128
|
+
};
|
|
129
|
+
gitadoraDataJSON.forEach((item) => {
|
|
130
|
+
if (playtype === "Gita" && item.playInstrumentString === "Drum")
|
|
131
|
+
return;
|
|
132
|
+
if (playtype === "Dora" && item.playInstrumentString !== "Drum")
|
|
133
|
+
return;
|
|
134
|
+
tachiCompJson.scores.push({
|
|
135
|
+
percent: item.playPercentageScore,
|
|
136
|
+
lamp: item.playLamp.toUpperCase(),
|
|
137
|
+
judgements: {
|
|
138
|
+
perfect: item.playScoreJudgements.perfect,
|
|
139
|
+
great: item.playScoreJudgements.great,
|
|
140
|
+
good: item.playScoreJudgements.good,
|
|
141
|
+
ok: item.playScoreJudgements.ok,
|
|
142
|
+
miss: item.playScoreJudgements.miss,
|
|
143
|
+
},
|
|
144
|
+
difficulty: (item.playInstrumentString === "Bass" ? "BASS " : "") + item.playChartDifficultyString.toUpperCase(),
|
|
145
|
+
matchType: "inGameID",
|
|
146
|
+
identifier: item.songID.toString(),
|
|
147
|
+
timeAchieved: Math.floor(new Date(item.playTimestampString).getTime() - msOffset),
|
|
148
|
+
optional: {
|
|
149
|
+
maxCombo: item.playMaxCombo,
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
return tachiCompJson;
|
|
154
|
+
}
|
|
155
|
+
export function ddrToTachiCompat(ddrDataJSON, playtype, msOffset = 0, service) {
|
|
156
|
+
let tachiCompJson = {
|
|
157
|
+
meta: {
|
|
158
|
+
"game": "ddr",
|
|
159
|
+
"playtype": playtype,
|
|
160
|
+
"service": service ? service : "FlowerPicker",
|
|
161
|
+
},
|
|
162
|
+
scores: []
|
|
163
|
+
};
|
|
164
|
+
const flares = ["0", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "EX"];
|
|
165
|
+
ddrDataJSON.forEach((item) => {
|
|
166
|
+
if (playtype !== item.playPlaystyle)
|
|
167
|
+
return;
|
|
168
|
+
const calculatedExScore = (item.playScoreJudgements.marvelous * 3) + (item.playScoreJudgements.ok * 3) + (item.playScoreJudgements.perfect * 2) + (item.playScoreJudgements.great);
|
|
169
|
+
let parsedLamp = item.playGrade === "E" ? "FAILED" : "CLEAR";
|
|
170
|
+
switch (item.playLamp) {
|
|
171
|
+
case "ASSIST CLEAR":
|
|
172
|
+
parsedLamp = "ASSIST";
|
|
173
|
+
break;
|
|
174
|
+
case "GOOD FULL COMBO":
|
|
175
|
+
parsedLamp = "FULL COMBO";
|
|
176
|
+
break;
|
|
177
|
+
case "EXTRA CLEAR":
|
|
178
|
+
parsedLamp = "LIFE4";
|
|
179
|
+
break;
|
|
180
|
+
default:
|
|
181
|
+
parsedLamp = item.playLamp ? item.playLamp : parsedLamp;
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
tachiCompJson.scores.push({
|
|
185
|
+
score: item.playScore,
|
|
186
|
+
difficulty: item.playChartDifficultyString.toUpperCase(),
|
|
187
|
+
lamp: parsedLamp,
|
|
188
|
+
judgements: {
|
|
189
|
+
MARVELOUS: item.playScoreJudgements.marvelous,
|
|
190
|
+
PERFECT: item.playScoreJudgements.perfect,
|
|
191
|
+
GREAT: item.playScoreJudgements.great,
|
|
192
|
+
GOOD: item.playScoreJudgements.good,
|
|
193
|
+
OK: item.playScoreJudgements.ok,
|
|
194
|
+
MISS: item.playScoreJudgements.miss,
|
|
195
|
+
},
|
|
196
|
+
matchType: "inGameID",
|
|
197
|
+
identifier: item.songID.toString(),
|
|
198
|
+
timeAchieved: Math.floor(new Date(item.playTimestampString).getTime() - msOffset),
|
|
199
|
+
optional: {
|
|
200
|
+
"flare": item.flare ? flares[item.flare] : undefined,
|
|
201
|
+
"maxCombo": item.playMaxCombo,
|
|
202
|
+
"exScore": calculatedExScore,
|
|
203
|
+
},
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
return tachiCompJson;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../src/convert.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as parser from "./parser.js";
|
|
2
|
+
declare const GAMES: readonly ["iidx", "jubeat", "rb", "gitadora", "sdvx", "museca", "ddr", "nostalgia", "pnm"];
|
|
3
|
+
type Game = typeof GAMES[number];
|
|
4
|
+
type ScoreForGame<G extends Game> = G extends "jubeat" ? ReturnType<typeof parser.parseJubeatScoreData> : G extends "pnm" ? ReturnType<typeof parser.parsePnmScoreData> : G extends "museca" ? ReturnType<typeof parser.parseMusecaScoreData> : G extends "gitadora" ? ReturnType<typeof parser.parseGitadoraScoreData> : G extends "nostalgia" ? ReturnType<typeof parser.parseNostalgiaScoreData> : G extends "ddr" ? ReturnType<typeof parser.parseDDRScoreData> : never;
|
|
5
|
+
declare class FlowerPicker {
|
|
6
|
+
private baseURL;
|
|
7
|
+
private cookie;
|
|
8
|
+
constructor(baseURL: string, cookieSessionIDValue: string);
|
|
9
|
+
/**
|
|
10
|
+
* Makes sure the cookie that was provided is actually valid
|
|
11
|
+
* @throws {error.InvalidSessionCookieError} When the provided session cookie is invalid
|
|
12
|
+
*/
|
|
13
|
+
setup(): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
* @param url The url to fetch from
|
|
17
|
+
* @returns The completed fetch Response
|
|
18
|
+
* @throws {error.TooManyRatelimitErrors} If the server returns too many 429 responses
|
|
19
|
+
*/
|
|
20
|
+
private fetchWithCookie;
|
|
21
|
+
getProfileId(game: string, id: string): Promise<string | null>;
|
|
22
|
+
/**
|
|
23
|
+
* @param game The game to fetch scores from (MUST match ['iidx', 'jubeat', 'rb', 'gitadora', 'sdvx', 'museca', 'ddr', 'nostalgia', 'pnm'])
|
|
24
|
+
* @param profileID The profile ID to fetch from
|
|
25
|
+
* @param fetchDownTo Millisecond timestamp of the last score you want to fetch (inclusive)
|
|
26
|
+
*/
|
|
27
|
+
getScoreLog<G extends Game>(game: G, profileID: string, fetchDownTo?: number, msTimeout?: number): Promise<Array<ScoreForGame<G>>>;
|
|
28
|
+
}
|
|
29
|
+
export default FlowerPicker;
|
|
30
|
+
export * as convert from "./convert.js";
|
|
31
|
+
export * as error from "./types/errors.js";
|
|
32
|
+
export * as scorelogJson from "./types/scorelogJson.js";
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAItC,QAAA,MAAM,KAAK,4FAA6F,CAAC;AACzG,KAAK,IAAI,GAAG,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC;AACjC,KAAK,YAAY,CAAC,CAAC,SAAS,IAAI,IAC5B,CAAC,SAAS,QAAQ,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,oBAAoB,CAAC,GACnE,CAAC,SAAS,KAAK,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,iBAAiB,CAAC,GAC7D,CAAC,SAAS,QAAQ,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,oBAAoB,CAAC,GACnE,CAAC,SAAS,UAAU,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,sBAAsB,CAAC,GACvE,CAAC,SAAS,WAAW,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,uBAAuB,CAAC,GACzE,CAAC,SAAS,KAAK,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,iBAAiB,CAAC,GAC7D,KAAK,CAAC;AAEV,cAAM,YAAY;IACd,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM;IAKzD;;;OAGG;IACG,KAAK;IAUX;;;;;OAKG;YACW,eAAe;IAsBhB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAY3E;;;;MAIE;IACW,WAAW,CAAC,CAAC,SAAS,IAAI,EACnC,IAAI,EAAE,CAAC,EACP,SAAS,EAAE,MAAM,EACjB,WAAW,GAAE,MAAU,EACvB,SAAS,GAAE,MAAa,GACzB,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;CAiFrC;AAUD,eAAe,YAAY,CAAC;AAC5B,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAC3C,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import * as cheerio from "cheerio";
|
|
2
|
+
import * as parser from "./parser.js";
|
|
3
|
+
import * as error from "./types/errors.js";
|
|
4
|
+
import * as util from "./util.js";
|
|
5
|
+
const GAMES = ['iidx', 'jubeat', 'rb', 'gitadora', 'sdvx', 'museca', 'ddr', 'nostalgia', 'pnm'];
|
|
6
|
+
class FlowerPicker {
|
|
7
|
+
baseURL;
|
|
8
|
+
cookie;
|
|
9
|
+
constructor(baseURL, cookieSessionIDValue) {
|
|
10
|
+
this.baseURL = baseURL;
|
|
11
|
+
this.cookie = cookieSessionIDValue;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Makes sure the cookie that was provided is actually valid
|
|
15
|
+
* @throws {error.InvalidSessionCookieError} When the provided session cookie is invalid
|
|
16
|
+
*/
|
|
17
|
+
async setup() {
|
|
18
|
+
await this.fetchWithCookie(`${this.baseURL}/user`)
|
|
19
|
+
.then((response) => {
|
|
20
|
+
// Redirection means an invalid session ID
|
|
21
|
+
if (response.redirected) {
|
|
22
|
+
throw new error.InvalidSessionCookieError();
|
|
23
|
+
}
|
|
24
|
+
;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
*
|
|
29
|
+
* @param url The url to fetch from
|
|
30
|
+
* @returns The completed fetch Response
|
|
31
|
+
* @throws {error.TooManyRatelimitErrors} If the server returns too many 429 responses
|
|
32
|
+
*/
|
|
33
|
+
async fetchWithCookie(url) {
|
|
34
|
+
const retryCount = 3;
|
|
35
|
+
let delayBetweenRetriesMs = 1000;
|
|
36
|
+
for (let attempt = 1; attempt <= retryCount; attempt++) {
|
|
37
|
+
const res = await fetch(url, {
|
|
38
|
+
headers: {
|
|
39
|
+
cookie: this.cookie,
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
if (res.status === 200) {
|
|
43
|
+
return res;
|
|
44
|
+
}
|
|
45
|
+
else if (attempt <= retryCount) {
|
|
46
|
+
console.warn(`Fetch attempt ${attempt} for ${url} failed with status ${res.status}. Retrying...`);
|
|
47
|
+
await util.delay(delayBetweenRetriesMs);
|
|
48
|
+
delayBetweenRetriesMs *= 2;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
throw new error.TooManyRatelimitErrors(`Failed to fetch ${url} after ${retryCount} attempts.`);
|
|
52
|
+
}
|
|
53
|
+
async getProfileId(game, id) {
|
|
54
|
+
const res = await this.fetchWithCookie(`${this.baseURL}/game/${game}${util.doesGameHaveProfileInUrl(game) ? '/profile' : ''}/${id}`);
|
|
55
|
+
const html = await res.text();
|
|
56
|
+
const $ = cheerio.load(html);
|
|
57
|
+
const href = $("small > a").first().attr("href");
|
|
58
|
+
if (!href)
|
|
59
|
+
return null;
|
|
60
|
+
return href.split("/")[4] ?? null;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* @param game The game to fetch scores from (MUST match ['iidx', 'jubeat', 'rb', 'gitadora', 'sdvx', 'museca', 'ddr', 'nostalgia', 'pnm'])
|
|
64
|
+
* @param profileID The profile ID to fetch from
|
|
65
|
+
* @param fetchDownTo Millisecond timestamp of the last score you want to fetch (inclusive)
|
|
66
|
+
*/
|
|
67
|
+
async getScoreLog(game, profileID, fetchDownTo = 0, msTimeout = 1000) {
|
|
68
|
+
if (!GAMES.includes(game)) {
|
|
69
|
+
throw new Error(`Game "${game}" is not supported.`);
|
|
70
|
+
}
|
|
71
|
+
if (fetchDownTo > 0) {
|
|
72
|
+
console.log(`Fetching scores down to timestamp: ${new Date(fetchDownTo).toISOString()}`);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
console.log(`Fetching all scores without a down-to limit.`);
|
|
76
|
+
}
|
|
77
|
+
let url = `${this.baseURL}/game/${game}${util.doesGameHaveProfileInUrl(game) ? '/profile' : ''}/${profileID}?page=`;
|
|
78
|
+
const firstFetchedPage = await this.fetchWithCookie(`${url}1`);
|
|
79
|
+
const firstFullPage = await firstFetchedPage.text();
|
|
80
|
+
const first$ = cheerio.load(firstFullPage);
|
|
81
|
+
const first$scoreLogGeneric = first$(".col-lg-8.col-lg-pull-4");
|
|
82
|
+
const totalPagesRaw = parseInt(first$scoreLogGeneric.find('div.text-center > ul.pagination > li:nth-last-child(2) > a').first().text());
|
|
83
|
+
const totalPages = isNaN(totalPagesRaw) ? 1 : totalPagesRaw;
|
|
84
|
+
const allScores = [];
|
|
85
|
+
let stop = false;
|
|
86
|
+
for (let pageIndex = 1; pageIndex <= totalPages && !stop; pageIndex++) {
|
|
87
|
+
console.log(`Fetching page ${pageIndex}/${totalPages}...`);
|
|
88
|
+
const fetchedPage = await this.fetchWithCookie(`${url}${pageIndex}`);
|
|
89
|
+
const fullPage = await fetchedPage.text();
|
|
90
|
+
const $ = cheerio.load(fullPage);
|
|
91
|
+
const $scoreLogGeneric = $(".col-lg-8.col-lg-pull-4");
|
|
92
|
+
const $scoreLog = $scoreLogGeneric.find('tbody').children();
|
|
93
|
+
// Some games have an extra element at the beginning (Currently only found iidx, sdvx has extra elements inbetween scores)
|
|
94
|
+
const indexStart = $scoreLog.toArray().findIndex((elem) => {
|
|
95
|
+
return first$(elem).hasClass('accordion-toggle');
|
|
96
|
+
});
|
|
97
|
+
for (let index = indexStart; index < $scoreLog.toArray().length; index += 2) {
|
|
98
|
+
const element = $scoreLog.toArray()[index];
|
|
99
|
+
const elementCollapsed = $scoreLog.toArray()[index + 1];
|
|
100
|
+
let score;
|
|
101
|
+
if (!element || !elementCollapsed) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
switch (game) {
|
|
105
|
+
case "jubeat":
|
|
106
|
+
score = parser.parseJubeatScoreData(element, elementCollapsed, pageIndex);
|
|
107
|
+
break;
|
|
108
|
+
case "pnm":
|
|
109
|
+
score = parser.parsePnmScoreData(element, elementCollapsed, pageIndex);
|
|
110
|
+
break;
|
|
111
|
+
case "museca":
|
|
112
|
+
score = parser.parseMusecaScoreData(element, elementCollapsed, pageIndex);
|
|
113
|
+
break;
|
|
114
|
+
case "gitadora":
|
|
115
|
+
score = parser.parseGitadoraScoreData(element, elementCollapsed, pageIndex);
|
|
116
|
+
break;
|
|
117
|
+
case "ddr":
|
|
118
|
+
score = parser.parseDDRScoreData(element, elementCollapsed, pageIndex);
|
|
119
|
+
break;
|
|
120
|
+
case "nostalgia":
|
|
121
|
+
score = parser.parseNostalgiaScoreData(element, elementCollapsed, pageIndex);
|
|
122
|
+
break;
|
|
123
|
+
default:
|
|
124
|
+
throw new Error(`Parser not implemented for game "${game}".`);
|
|
125
|
+
}
|
|
126
|
+
if (new Date(score.playTimestampString).getTime() < fetchDownTo) {
|
|
127
|
+
console.log(`Reached fetch down to timestamp at score played on "${score.playTimestampString}", stopping fetch.`);
|
|
128
|
+
stop = true;
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
allScores.push(score);
|
|
132
|
+
}
|
|
133
|
+
if (!stop && msTimeout > 0 && pageIndex <= totalPages) {
|
|
134
|
+
await util.delay(msTimeout);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return allScores;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/*
|
|
141
|
+
Functions not yet ported:
|
|
142
|
+
_accountInfoSetup
|
|
143
|
+
_getPetalWalletsInfo
|
|
144
|
+
|
|
145
|
+
Only mentioning so I don't forget they used to exist
|
|
146
|
+
*/
|
|
147
|
+
export default FlowerPicker;
|
|
148
|
+
export * as convert from "./convert.js";
|
|
149
|
+
export * as error from "./types/errors.js";
|
|
150
|
+
export * as scorelogJson from "./types/scorelogJson.js";
|
|
151
|
+
// export * as util from "./util";
|
|
152
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/parser.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as cheerio from "cheerio";
|
|
2
|
+
import * as scorelogJson from "./types/scorelogJson.js";
|
|
3
|
+
export declare function parseJubeatScoreData(mainElement: cheerio.Element, collapsedElement: cheerio.Element, pageIndex: number): scorelogJson.JubeatDataRawJSON;
|
|
4
|
+
export declare function parsePnmScoreData(mainElement: cheerio.Element, collapsedElement: cheerio.Element, pageIndex: number): scorelogJson.PnmDataRawJSON;
|
|
5
|
+
export declare function parseMusecaScoreData(mainElement: cheerio.Element, collapsedElement: cheerio.Element, pageIndex: number): scorelogJson.MusecaDataRawJSON;
|
|
6
|
+
export declare function parseGitadoraScoreData(mainElement: cheerio.Element, collapsedElement: cheerio.Element, pageIndex: number): scorelogJson.GitadoraDataRawJSON;
|
|
7
|
+
export declare function parseNostalgiaScoreData(mainElement: cheerio.Element, collapsedElement: cheerio.Element, pageIndex: number): scorelogJson.NostalgiaDataRawJSON;
|
|
8
|
+
export declare function parseDDRScoreData(mainElement: cheerio.Element, collapsedElement: cheerio.Element, pageIndex: number): scorelogJson.DDRDataRawJSON;
|
|
9
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAC;AAGxD,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC,iBAAiB,CAwCvJ;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC,cAAc,CAmCjJ;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC,iBAAiB,CAkCvJ;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC,mBAAmB,CAyD3J;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC,oBAAoB,CAqC7J;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC,cAAc,CA8CjJ"}
|
package/dist/parser.js
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import * as cheerio from "cheerio";
|
|
2
|
+
import * as scorelogJson from "./types/scorelogJson.js";
|
|
3
|
+
import * as util from "./util.js";
|
|
4
|
+
export function parseJubeatScoreData(mainElement, collapsedElement, pageIndex) {
|
|
5
|
+
const $ = cheerio.load('');
|
|
6
|
+
const $main = $(mainElement);
|
|
7
|
+
const $collapsed = $(collapsedElement).find('td > div > div');
|
|
8
|
+
const rawData = {
|
|
9
|
+
playID: util.trimToNumber($main.attr('data-target')),
|
|
10
|
+
songTitle: $main.find('td > a > b').text(),
|
|
11
|
+
songID: util.trimToNumber($main.find('td > a').attr('href').split('/')[7]),
|
|
12
|
+
playChartDifficultyID: util.trimToNumber($main.find('td > a').attr('href').split('/').pop()),
|
|
13
|
+
playChartDifficultyString: $main.children('td').eq(2).text().trim().split(' ').at(0),
|
|
14
|
+
playChartDifficultyNumber: Number($main.children('td').eq(2).text().trim().split(' ').at(1)),
|
|
15
|
+
playIsHardPlay: $main.children('td').eq(1).find('div.pull-right').length ? true : false,
|
|
16
|
+
playGrade: $main.children('td').eq(3).find('div > strong').text().trim(),
|
|
17
|
+
playScore: util.trimToNumber($main.children('td').eq(3).find('small').text().trim()),
|
|
18
|
+
playMusicRate: Number($main.children('td').eq(4).find('div > strong').text().trim().replace('%', '')),
|
|
19
|
+
playJubility: Number($main.children('td').eq(4).find('small').text().trim()),
|
|
20
|
+
playLamp: $main.children('td').eq(5).find('strong').text().trim(),
|
|
21
|
+
playMaxCombo: util.trimToNumber($main.children('td').eq(6).find('strong').text().trim()),
|
|
22
|
+
playScoreJudgements: {
|
|
23
|
+
perfects: util.trimToNumber($collapsed.find("div:contains('Perfects')").text()),
|
|
24
|
+
greats: util.trimToNumber($collapsed.find("div:contains('Greats')").text()),
|
|
25
|
+
goods: util.trimToNumber($collapsed.find("div:contains('Goods')").text()),
|
|
26
|
+
poors: util.trimToNumber($collapsed.find("div:contains('Poors')").text()),
|
|
27
|
+
misses: util.trimToNumber($collapsed.find("div:contains('Misses')").text()),
|
|
28
|
+
},
|
|
29
|
+
playTimestampString: $main.children('td').eq(7).find('small').text().trim(),
|
|
30
|
+
arcadePlayedAtString: $collapsed.find("div:contains('Played at')").text().replace('Played at', ''),
|
|
31
|
+
arcadePlayedAtID: util.trimToNumber($collapsed.find("div:contains('Played at') > a").attr('href')?.split('/').pop()),
|
|
32
|
+
versionPlayedOnString: $collapsed.find("div:contains('Played with')").text().replace('Played with', ''),
|
|
33
|
+
playJudgeBar: $collapsed.find(".jubeat-bars").attr("data-jubeat-judge").split(" ").map(Number),
|
|
34
|
+
onPage: pageIndex,
|
|
35
|
+
};
|
|
36
|
+
return rawData;
|
|
37
|
+
}
|
|
38
|
+
export function parsePnmScoreData(mainElement, collapsedElement, pageIndex) {
|
|
39
|
+
const $ = cheerio.load('');
|
|
40
|
+
const $main = $(mainElement);
|
|
41
|
+
const $collapsed = $(collapsedElement).find('td > div > div');
|
|
42
|
+
const rawData = {
|
|
43
|
+
playID: util.trimToNumber($main.attr('data-target')),
|
|
44
|
+
songTitle: $main.find('td > a > b').text(),
|
|
45
|
+
songArtist: $main.children('td').eq(0).find('small').text().trim(),
|
|
46
|
+
songID: util.trimToNumber($main.find('td > a').attr('href').split('/')[7]),
|
|
47
|
+
playChartDifficultyID: util.trimToNumber($main.find('td > a').attr('href').split('/').pop()),
|
|
48
|
+
playChartDifficultyString: $main.children("td").eq(1).text().trim().replace(/\s*\d+\s*/g, " ").trim().toString(),
|
|
49
|
+
playChartDifficultyNumber: util.trimToNumber($main.children("td").eq(1).text().trim().replace(/\s{5,}/g, " ").replace(/(\d)([A-Z])/g, "$1 $2")),
|
|
50
|
+
playMedal: util.trimToNumber($main.children('td').eq(2).find('img').attr('src').split('_').pop().replace('.png', '')),
|
|
51
|
+
playGrade: $main.children('td').eq(3).find('strong').text().trim(),
|
|
52
|
+
playScore: util.trimToNumber($main.children('td').eq(3).find('div').text().trim()),
|
|
53
|
+
playExScore: util.trimToNumber($collapsed.find("div:contains('EX Score')").text().trim().split(' ').at(2)),
|
|
54
|
+
playScoreJudgements: {
|
|
55
|
+
cool: util.trimToNumber($collapsed.find("div:contains('Cool')").eq(1).text()),
|
|
56
|
+
great: util.trimToNumber($collapsed.find("div:contains('Great')").eq(1).text()),
|
|
57
|
+
good: util.trimToNumber($collapsed.find("div:contains('Good')").text()),
|
|
58
|
+
bad: util.trimToNumber($collapsed.find("div:contains('Bad')").text()),
|
|
59
|
+
},
|
|
60
|
+
playTimestampString: $main.children('td').eq(5).find('small').text().trim(),
|
|
61
|
+
arcadePlayedAtString: $collapsed.find("div:contains('Played at') > a").text().replace('Played at', '').trim(),
|
|
62
|
+
arcadePlayedAtID: util.trimToNumber($collapsed.find("div:contains('Played at') > a").attr('href')?.split('/').pop()),
|
|
63
|
+
versionPlayedOnString: $collapsed.find("div:contains('Played with')").text().replace('Played with', '').trim(),
|
|
64
|
+
onPage: pageIndex,
|
|
65
|
+
};
|
|
66
|
+
return rawData;
|
|
67
|
+
}
|
|
68
|
+
export function parseMusecaScoreData(mainElement, collapsedElement, pageIndex) {
|
|
69
|
+
const $ = cheerio.load('');
|
|
70
|
+
const $main = $(mainElement);
|
|
71
|
+
const $collapsed = $(collapsedElement).find('td > div > div');
|
|
72
|
+
const rawData = {
|
|
73
|
+
playID: util.trimToNumber($main.attr('data-target')),
|
|
74
|
+
songTitle: $main.find('td > a > b').text(),
|
|
75
|
+
songID: util.trimToNumber($main.find('td > a').attr('href').split('/')[7]),
|
|
76
|
+
playChartDifficultyID: util.trimToNumber($main.find('td > a').attr('href').split('/').pop()),
|
|
77
|
+
playChartDifficultyString: $main.children('td').eq(2).text().trim().replace(/\s+/g, '').at(0),
|
|
78
|
+
playChartDifficultyNumber: Number($main.children('td').eq(2).text().trim().replace(/\s+/g, '').slice(1)),
|
|
79
|
+
missionString: $collapsed.find("h4.media-heading").text().trim() || null,
|
|
80
|
+
playScore: util.trimToNumber($main.children('td').eq(3).find('strong').text().trim()),
|
|
81
|
+
playGrade: $main.children('td').eq(4).find('strong').text().trim(),
|
|
82
|
+
playLamp: $main.children('td').eq(5).find('strong').text().trim(),
|
|
83
|
+
playMaxCombo: util.trimToNumber($main.children('td').eq(6).find('strong').text().trim()),
|
|
84
|
+
playScoreJudgements: {
|
|
85
|
+
critical: util.trimToNumber($collapsed.find("div:contains('Critical')").text()),
|
|
86
|
+
near: util.trimToNumber($collapsed.find("div:contains('Near')").text()),
|
|
87
|
+
error: util.trimToNumber($collapsed.find("div:contains('Error')").text()),
|
|
88
|
+
},
|
|
89
|
+
playTimestampString: $main.children('td').eq(7).find('small').text().trim(),
|
|
90
|
+
arcadePlayedAtString: $collapsed.find("div:contains('Played at') > a").text().replace('Played at', '').trim(),
|
|
91
|
+
arcadePlayedAtID: util.trimToNumber($collapsed.find("div:contains('Played at') > a").attr('href')?.split('/').pop()),
|
|
92
|
+
versionPlayedOnString: $collapsed.find("div:contains('Played with')").text().replace('Played with', '').trim(),
|
|
93
|
+
onPage: pageIndex,
|
|
94
|
+
};
|
|
95
|
+
return rawData;
|
|
96
|
+
}
|
|
97
|
+
export function parseGitadoraScoreData(mainElement, collapsedElement, pageIndex) {
|
|
98
|
+
const $ = cheerio.load('');
|
|
99
|
+
const $main = $(mainElement);
|
|
100
|
+
const $collapsed = $(collapsedElement).find('td > div > div');
|
|
101
|
+
const rawData = {
|
|
102
|
+
playID: util.trimToNumber($main.attr('data-target')),
|
|
103
|
+
songTitle: $main.find('td > a > strong').text(),
|
|
104
|
+
// Url is /music/version?/songID/instrument/difficulty
|
|
105
|
+
// 0 is drum, 1 is guitar, 2 is bass
|
|
106
|
+
songID: util.trimToNumber($main.find('td > a').attr('href').split('/')[7]),
|
|
107
|
+
playChartDifficultyID: util.trimToNumber($main.find('td > a').attr('href').split('/')[9]),
|
|
108
|
+
playInstrumentID: util.trimToNumber($main.find('td > a').attr('href').split('/')[8]),
|
|
109
|
+
playInstrumentString: $main.children('td').eq(2).text().trim().split('\n').at(0),
|
|
110
|
+
playChartDifficultyString: $main.children('td').eq(2).text().trim().split('\n').at(-1).trim(),
|
|
111
|
+
playChartDifficultyNumber: Number($main.children('td').eq(2).find('strong').text().trim()),
|
|
112
|
+
playSkillRating: Number($main.children('td').eq(4).find('strong').text().trim()),
|
|
113
|
+
playPercentageScore: Number($main.children('td').eq(4).find('small').text().trim().replace('%', '')),
|
|
114
|
+
playLamp: $main.children('td').eq(5).find('strong').text().trim(),
|
|
115
|
+
playGrade: $main.children('td').eq(3).find('strong').text().trim(),
|
|
116
|
+
playScore: util.trimToNumber($collapsed.find("div:contains('Score')").text().trim()),
|
|
117
|
+
playMaxCombo: util.trimToNumber($collapsed.find("div:contains('Max combo')").text().trim()),
|
|
118
|
+
playScoreJudgements: {
|
|
119
|
+
perfect: util.trimToNumber($collapsed.find("div:contains('Perfect')").text()),
|
|
120
|
+
great: util.trimToNumber($collapsed.find("div:contains('Great')").text()),
|
|
121
|
+
good: util.trimToNumber($collapsed.find("div:contains('Good')").text()),
|
|
122
|
+
ok: util.trimToNumber($collapsed.find("div:contains('OK')").text()),
|
|
123
|
+
miss: util.trimToNumber($collapsed.find("div:contains('Miss')").text()),
|
|
124
|
+
},
|
|
125
|
+
playTimestampString: $main.children('td').eq(6).find('small').text().trim(),
|
|
126
|
+
arcadePlayedAtString: $collapsed.find("div:contains('Played at') > div > a").text().replace('Played at', '').trim(),
|
|
127
|
+
arcadePlayedAtID: util.trimToNumber($collapsed.find("div:contains('Played at') > div > a").attr('href')?.split('/').pop()),
|
|
128
|
+
versionPlayedOnString: $collapsed.find("div:contains('Played with')").text().replace('Played with', '').trim(),
|
|
129
|
+
playJudgeBar: $collapsed.find("svg").children().toArray().map(el => {
|
|
130
|
+
const fill = $(el).attr('fill');
|
|
131
|
+
switch (fill) {
|
|
132
|
+
case "#feff00": // Seems to be anything OTHER than a miss
|
|
133
|
+
return 3;
|
|
134
|
+
case "#7598ff": // Miss, don't believe it's anything else
|
|
135
|
+
return 2;
|
|
136
|
+
case "#ff0000": // Failed here
|
|
137
|
+
return 1;
|
|
138
|
+
case "#000000": // Unplayed
|
|
139
|
+
return 0;
|
|
140
|
+
default: // Unknown or error
|
|
141
|
+
return -1;
|
|
142
|
+
}
|
|
143
|
+
}),
|
|
144
|
+
onPage: pageIndex,
|
|
145
|
+
};
|
|
146
|
+
return rawData;
|
|
147
|
+
}
|
|
148
|
+
export function parseNostalgiaScoreData(mainElement, collapsedElement, pageIndex) {
|
|
149
|
+
const $ = cheerio.load('');
|
|
150
|
+
const $main = $(mainElement);
|
|
151
|
+
const $collapsed = $(collapsedElement).find('td > div > div');
|
|
152
|
+
const fastSlowText = $collapsed.find("div:contains('Fast / Slow')").text();
|
|
153
|
+
const rawData = {
|
|
154
|
+
playID: util.trimToNumber($main.attr('data-target')),
|
|
155
|
+
songTitle: $main.find('td > a > strong').text().trim(),
|
|
156
|
+
songID: util.trimToNumber($main.find('td > a').attr('href').split('/')[7]),
|
|
157
|
+
playChartDifficultyID: util.trimToNumber($main.find('td > a').attr('href').split('/').pop()),
|
|
158
|
+
playChartDifficultyString: $main.children('td').eq(2).text().trim().split('\n').at(0),
|
|
159
|
+
playChartDifficultyNumber: util.trimToNumber($main.children('td').eq(2).text().trim().split('\n').at(1).trim()),
|
|
160
|
+
playGrade: $main.children('td').eq(3).find('strong').text().trim(),
|
|
161
|
+
playScore: util.trimToNumber($main.children('td').eq(3).find('div > small').text().trim()),
|
|
162
|
+
playScoreJudgements: {
|
|
163
|
+
pJust: util.trimToNumber($collapsed.find("div:contains('◆Just')").text()),
|
|
164
|
+
just: util.trimToNumber($collapsed.find("div:contains('Just'):not(:contains('◆'))").text()),
|
|
165
|
+
good: util.trimToNumber($collapsed.find("div:contains('Good')").text()),
|
|
166
|
+
near: util.trimToNumber($collapsed.find("div:contains('Near')").text()),
|
|
167
|
+
miss: util.trimToNumber($collapsed.find("div:contains('Miss')").text()),
|
|
168
|
+
fast: fastSlowText ? util.trimToNumber(fastSlowText.split('/').at(1) ?? 0) : 0, // The element only doesn't exist if all notes were hit perfectly
|
|
169
|
+
slow: fastSlowText ? util.trimToNumber(fastSlowText.split('/').at(2) ?? 0) : 0,
|
|
170
|
+
},
|
|
171
|
+
playTimestampString: $main.children('td').eq(5).find('div > small').text().trim(),
|
|
172
|
+
arcadePlayedAtString: $collapsed.find("div:contains('Played at') > div > a").text().replace('Played at', '').trim(),
|
|
173
|
+
arcadePlayedAtID: util.trimToNumber($collapsed.find("div:contains('Played at') > div > a").attr('href')?.split('/').pop()),
|
|
174
|
+
versionPlayedOnString: $collapsed.find("div:contains('Played with')").text().replace('Played with', '').trim(),
|
|
175
|
+
onPage: pageIndex,
|
|
176
|
+
};
|
|
177
|
+
return rawData;
|
|
178
|
+
}
|
|
179
|
+
export function parseDDRScoreData(mainElement, collapsedElement, pageIndex) {
|
|
180
|
+
{
|
|
181
|
+
const $ = cheerio.load('');
|
|
182
|
+
const $main = $(mainElement);
|
|
183
|
+
const $collapsed = $(collapsedElement).find('td > div > div');
|
|
184
|
+
const hasLamp = $main.children('td').eq(5).find('small').attr('title') ? true : false;
|
|
185
|
+
const flare = $main.children('td').eq(6).text().trim();
|
|
186
|
+
const rawData = {
|
|
187
|
+
playID: util.trimToNumber($main.attr('data-target')),
|
|
188
|
+
songTitle: $main.find('td > a > b').text().trim(),
|
|
189
|
+
songID: util.trimToNumber($main.find('td > a').attr('href').split('/')[7]),
|
|
190
|
+
playChartDifficultyID: util.trimToNumber($main.find('td > a').attr('href').split('/').pop()),
|
|
191
|
+
playPlaystyle: $main.children('td').eq(2).text().trim().split('\n').at(0).split(' ').at(0),
|
|
192
|
+
playChartDifficultyString: $main.children('td').eq(2).text().trim().split('\n').at(0).split(' ').at(1),
|
|
193
|
+
playChartDifficultyNumber: util.trimToNumber($main.children('td').eq(2).text().trim().split('\n').at(1).trim()),
|
|
194
|
+
playLamp: hasLamp ? $main.children('td').eq(5).find('small').attr('title').trim() : undefined,
|
|
195
|
+
playScore: util.trimToNumber($main.children('td').eq(3).find('strong').text().trim()),
|
|
196
|
+
playGrade: $main.children('td').eq(4).find('strong').text().trim(),
|
|
197
|
+
flare: flare ? util.trimToNumber(flare) : undefined,
|
|
198
|
+
playMaxCombo: util.trimToNumber($main.children('td').eq(7).text().trim()),
|
|
199
|
+
playScoreJudgements: {
|
|
200
|
+
marvelous: util.trimToNumber($collapsed.find("strong:contains('Marvelous')").parent().text()),
|
|
201
|
+
perfect: util.trimToNumber($collapsed.find("strong:contains('Perfect')").parent().text()),
|
|
202
|
+
great: util.trimToNumber($collapsed.find("strong:contains('Great')").parent().text()),
|
|
203
|
+
good: util.trimToNumber($collapsed.find("strong:contains('Good')").parent().text()),
|
|
204
|
+
ok: util.trimToNumber($collapsed.find("strong:contains('OK')").parent().text()),
|
|
205
|
+
ng: util.trimToNumber($collapsed.find("strong:contains('NG')").parent().text()),
|
|
206
|
+
miss: util.trimToNumber($collapsed.find("strong:contains('Miss')").parent().text()),
|
|
207
|
+
},
|
|
208
|
+
playTimestampString: $main.children('td').eq(8).find('small').text().trim(),
|
|
209
|
+
arcadePlayedAtString: $collapsed.find("div:contains('Played at') > div > a").text().replace('Played at', '').trim(),
|
|
210
|
+
arcadePlayedAtID: util.trimToNumber($collapsed.find("div:contains('Played at') > div > a").attr('href')?.split('/').pop()),
|
|
211
|
+
versionPlayedOnString: $collapsed.find("div:contains('Played with')").text().replace('Played with', '').trim(),
|
|
212
|
+
onPage: pageIndex,
|
|
213
|
+
};
|
|
214
|
+
return rawData;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
export declare const Games: readonly [{
|
|
2
|
+
readonly name: "iidx";
|
|
3
|
+
readonly playtypes: readonly ["SP", "DP"];
|
|
4
|
+
}, {
|
|
5
|
+
readonly name: "chunithm";
|
|
6
|
+
readonly playtypes: readonly ["Single"];
|
|
7
|
+
}, {
|
|
8
|
+
readonly name: "museca";
|
|
9
|
+
readonly playtypes: readonly ["Single"];
|
|
10
|
+
}, {
|
|
11
|
+
readonly name: "sdvx";
|
|
12
|
+
readonly playtypes: readonly ["Single"];
|
|
13
|
+
}, {
|
|
14
|
+
readonly name: "wacca";
|
|
15
|
+
readonly playtypes: readonly ["Single"];
|
|
16
|
+
}, {
|
|
17
|
+
readonly name: "popn";
|
|
18
|
+
readonly playtypes: readonly ["9B"];
|
|
19
|
+
}, {
|
|
20
|
+
readonly name: "jubeat";
|
|
21
|
+
readonly playtypes: readonly ["Single"];
|
|
22
|
+
}, {
|
|
23
|
+
readonly name: "gitadora";
|
|
24
|
+
readonly playtypes: readonly ["Gita", "Dora"];
|
|
25
|
+
}, {
|
|
26
|
+
readonly name: "maimaidx";
|
|
27
|
+
readonly playtypes: readonly ["Single"];
|
|
28
|
+
}, {
|
|
29
|
+
readonly name: "maimai";
|
|
30
|
+
readonly playtypes: readonly ["Single"];
|
|
31
|
+
}, {
|
|
32
|
+
readonly name: "ongeki";
|
|
33
|
+
readonly playtypes: readonly ["Single"];
|
|
34
|
+
}, {
|
|
35
|
+
readonly name: "ddr";
|
|
36
|
+
readonly playtypes: readonly ["SP", "DP"];
|
|
37
|
+
}];
|
|
38
|
+
export type GameName = typeof Games[number]["name"];
|
|
39
|
+
export type PlaytypeFor<G extends GameName> = Extract<(typeof Games)[number], {
|
|
40
|
+
name: G;
|
|
41
|
+
}>["playtypes"][number];
|
|
42
|
+
export type BatchManualMeta = {
|
|
43
|
+
[G in GameName]: {
|
|
44
|
+
game: G;
|
|
45
|
+
playtype: PlaytypeFor<G>;
|
|
46
|
+
service: string;
|
|
47
|
+
version?: string;
|
|
48
|
+
};
|
|
49
|
+
}[GameName];
|
|
50
|
+
export type BatchManualScoresJubeat = {
|
|
51
|
+
score: number;
|
|
52
|
+
/**
|
|
53
|
+
* The lamp for this score. This should be one of the lamps as described in the config for your game + playtype.
|
|
54
|
+
*/
|
|
55
|
+
lamp: string;
|
|
56
|
+
/**
|
|
57
|
+
* Only appears for jubeat. This should be set to the Percent for this score. In jubeat's case, this is your Music Rate.
|
|
58
|
+
*
|
|
59
|
+
* Full match types at https://github.com/zkldi/Tachi/blob/main/common/src/types/batch-manual.ts but im not doin all that, so I'm getting it from https://docs.tachi.ac/codebase/batch-manual/#meta - This should be enough anyways since inGameID SHOULD be able to be used for everything
|
|
60
|
+
*
|
|
61
|
+
* (Undocumented on the wiki, but it was changed to musicRate https://discord.com/channels/683092550160351261/683093545330147399/1067897460791451654)
|
|
62
|
+
*/
|
|
63
|
+
musicRate?: number;
|
|
64
|
+
/** This determines how identifier will be used to match your scores' chart with Tachi's database of songs and charts.*/
|
|
65
|
+
matchType: "inGameID" | "tachiSongID";
|
|
66
|
+
/** A string that Tachi uses to identify what chart this is for. How this is used depends on the matchType.*/
|
|
67
|
+
identifier: string;
|
|
68
|
+
/**
|
|
69
|
+
* If matchType is `tachiSongID`, `inGameID`, `ddrSongHash` or `songTitle`, this field must be present, and describe the difficulty of the chart this score is for.
|
|
70
|
+
*
|
|
71
|
+
* Because this projects plans to only use the above, difficulty is set as required here, otherwise it is technically conditional
|
|
72
|
+
*/
|
|
73
|
+
difficulty: string;
|
|
74
|
+
/** If matchType is `songTitle`, this field can be present, and describe the artist name for less equivocal matching. This field is optional for legacy purposes. */
|
|
75
|
+
artist?: string;
|
|
76
|
+
/** This is when the score was achieved in unix milliseconds. This should be provided if possible, as Tachi uses it for a LOT of features. */
|
|
77
|
+
timeAchieved?: number | null;
|
|
78
|
+
/** A comment from the user about this score. */
|
|
79
|
+
comment?: string | null;
|
|
80
|
+
/** The detailed judgement counts for this score. This should be provided if possible, as Tachi uses it for a LOT of features. */
|
|
81
|
+
judgements?: any;
|
|
82
|
+
/** Any optional metrics you wish to provide for this game. */
|
|
83
|
+
optional?: any;
|
|
84
|
+
/** This can be a partial record of various scoreMeta props for this game. */
|
|
85
|
+
scoreMeta?: any;
|
|
86
|
+
};
|
|
87
|
+
export interface BatchManualJSONJubeat {
|
|
88
|
+
meta: BatchManualMeta;
|
|
89
|
+
scores: BatchManualScoresJubeat[];
|
|
90
|
+
}
|
|
91
|
+
export interface BatchManualScoresPnm {
|
|
92
|
+
score: number;
|
|
93
|
+
/**
|
|
94
|
+
* The clear medal for this score. This should be one of the medals as described in the config for your game + playtype.
|
|
95
|
+
*/
|
|
96
|
+
clearMedal: string;
|
|
97
|
+
judgements: any;
|
|
98
|
+
difficulty: string;
|
|
99
|
+
matchType: "inGameID" | "tachiSongID" | "popnChartHash";
|
|
100
|
+
identifier: string;
|
|
101
|
+
timeAchieved?: number | null;
|
|
102
|
+
}
|
|
103
|
+
export interface BatchManualJSONPnm {
|
|
104
|
+
meta: BatchManualMeta;
|
|
105
|
+
scores: BatchManualScoresPnm[];
|
|
106
|
+
}
|
|
107
|
+
export interface BatchManualScoresMuseca {
|
|
108
|
+
score: number;
|
|
109
|
+
lamp: string;
|
|
110
|
+
judgements: any;
|
|
111
|
+
difficulty: string;
|
|
112
|
+
matchType: "songTitle" | "tachiSongID" | "inGameID";
|
|
113
|
+
identifier: string;
|
|
114
|
+
optional?: any;
|
|
115
|
+
timeAchieved?: number | null;
|
|
116
|
+
}
|
|
117
|
+
export interface BatchManualJSONMuseca {
|
|
118
|
+
meta: BatchManualMeta;
|
|
119
|
+
scores: BatchManualScoresMuseca[];
|
|
120
|
+
}
|
|
121
|
+
export interface BatchManualScoresGitadora {
|
|
122
|
+
percent: number;
|
|
123
|
+
lamp: string;
|
|
124
|
+
judgements: any;
|
|
125
|
+
difficulty: string;
|
|
126
|
+
matchType: "inGameID" | "songTitle" | "tachiSongID";
|
|
127
|
+
identifier: string;
|
|
128
|
+
optional?: any;
|
|
129
|
+
timeAchieved?: number | null;
|
|
130
|
+
}
|
|
131
|
+
export interface BatchManualJSONGitadora {
|
|
132
|
+
meta: BatchManualMeta;
|
|
133
|
+
scores: BatchManualScoresGitadora[];
|
|
134
|
+
}
|
|
135
|
+
export interface BatchManualScoresDDR {
|
|
136
|
+
score: number;
|
|
137
|
+
lamp: string;
|
|
138
|
+
difficulty: string;
|
|
139
|
+
judgements: any;
|
|
140
|
+
matchType: "inGameID" | "songTitle" | "tachiSongID" | "ddrSongHash";
|
|
141
|
+
identifier: string;
|
|
142
|
+
optional?: any;
|
|
143
|
+
timeAchieved?: number | null;
|
|
144
|
+
}
|
|
145
|
+
export interface BatchManualJSONDDR {
|
|
146
|
+
meta: BatchManualMeta;
|
|
147
|
+
scores: BatchManualScoresDDR[];
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=convert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/types/convert.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAaR,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,QAAQ,IACtC,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,MAAM,MAAM,eAAe,GAAG;KACzB,CAAC,IAAI,QAAQ,GAAG;QACb,IAAI,EAAE,CAAC,CAAC;QACR,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB;CACJ,CAAC,QAAQ,CAAC,CAAC;AAGZ,MAAM,MAAM,uBAAuB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yHAAyH;IACzH,SAAS,EAAE,UAAU,GAAG,aAAa,CAAC;IACtC,6GAA6G;IAC7G,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,oKAAoK;IACpK,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6IAA6I;IAC7I,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,iIAAiI;IACjI,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,6EAA6E;IAC7E,SAAS,CAAC,EAAE,GAAG,CAAC;CACnB,CAAA;AAED,MAAM,WAAW,qBAAqB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,uBAAuB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,GAAG,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,UAAU,GAAG,aAAa,GAAG,eAAe,CAAC;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,uBAAuB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,GAAG,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,WAAW,GAAG,aAAa,GAAG,UAAU,CAAC;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,qBAAqB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,uBAAuB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,yBAAyB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,GAAG,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,CAAC;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACpC,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,yBAAyB,EAAE,CAAC;CACvC;AACD,MAAM,WAAW,oBAAoB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,GAAG,CAAC;IAChB,SAAS,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,aAAa,CAAC;IACpE,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAClC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// https://docs.tachi.ac/codebase/batch-manual/#meta
|
|
2
|
+
export const Games = [
|
|
3
|
+
{ name: "iidx", playtypes: ["SP", "DP"] },
|
|
4
|
+
{ name: "chunithm", playtypes: ["Single"] },
|
|
5
|
+
{ name: "museca", playtypes: ["Single"] },
|
|
6
|
+
{ name: "sdvx", playtypes: ["Single"] },
|
|
7
|
+
{ name: "wacca", playtypes: ["Single"] },
|
|
8
|
+
{ name: "popn", playtypes: ["9B"] },
|
|
9
|
+
{ name: "jubeat", playtypes: ["Single"] },
|
|
10
|
+
{ name: "gitadora", playtypes: ["Gita", "Dora"] },
|
|
11
|
+
{ name: "maimaidx", playtypes: ["Single"] },
|
|
12
|
+
{ name: "maimai", playtypes: ["Single"] },
|
|
13
|
+
{ name: "ongeki", playtypes: ["Single"] },
|
|
14
|
+
{ name: "ddr", playtypes: ["SP", "DP"] },
|
|
15
|
+
];
|
|
16
|
+
//# sourceMappingURL=convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/types/convert.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,MAAM,CAAC,MAAM,KAAK,GAAG;IACjB,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;IACzC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE;IAC3C,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE;IACzC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE;IACvC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE;IACxC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE;IACnC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE;IACzC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;IACjD,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE;IAC3C,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE;IACzC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE;IACzC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;CAClC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,yBAA0B,SAAQ,KAAK;gBACpC,OAAO,GAAE,MAA6F;CAIrH;AAED,qBAAa,sBAAuB,SAAQ,KAAK;gBACjC,OAAO,GAAE,MAAuE;CAI/F"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class InvalidSessionCookieError extends Error {
|
|
2
|
+
constructor(message = "The provided session cookie is invalid, please double check it or create a new one") {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = "InvalidSessionCookieError";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class TooManyRatelimitErrors extends Error {
|
|
8
|
+
constructor(message = "The server returned 429 too often, aborting further requests") {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = "TooManyRatelimitErrors";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAChD,YAAY,UAAkB,oFAAoF;QAC9G,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC5C,CAAC;CACJ;AAED,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC7C,YAAY,UAAkB,8DAA8D;QACxF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACzC,CAAC;CACJ"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
interface BaseDataRawJSON {
|
|
2
|
+
playID: number;
|
|
3
|
+
songTitle: string;
|
|
4
|
+
songID: number;
|
|
5
|
+
playChartDifficultyID: number;
|
|
6
|
+
playChartDifficultyString: string;
|
|
7
|
+
playChartDifficultyNumber: number;
|
|
8
|
+
playGrade: string;
|
|
9
|
+
playScore: number;
|
|
10
|
+
playTimestampString: string;
|
|
11
|
+
arcadePlayedAtString: string;
|
|
12
|
+
arcadePlayedAtID: number;
|
|
13
|
+
versionPlayedOnString: string;
|
|
14
|
+
onPage: number;
|
|
15
|
+
}
|
|
16
|
+
export interface JubeatDataRawJSON extends BaseDataRawJSON {
|
|
17
|
+
playIsHardPlay: boolean;
|
|
18
|
+
playMusicRate: number;
|
|
19
|
+
playJubility: number;
|
|
20
|
+
playLamp: string;
|
|
21
|
+
playMaxCombo: number;
|
|
22
|
+
playScoreJudgements: {
|
|
23
|
+
perfects: number;
|
|
24
|
+
greats: number;
|
|
25
|
+
goods: number;
|
|
26
|
+
poors: number;
|
|
27
|
+
misses: number;
|
|
28
|
+
};
|
|
29
|
+
playJudgeBar: number[];
|
|
30
|
+
}
|
|
31
|
+
export interface PnmDataRawJSON extends BaseDataRawJSON {
|
|
32
|
+
songArtist: string;
|
|
33
|
+
playMedal: number;
|
|
34
|
+
playExScore: number;
|
|
35
|
+
playScoreJudgements: {
|
|
36
|
+
cool: number;
|
|
37
|
+
great: number;
|
|
38
|
+
good: number;
|
|
39
|
+
bad: number;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export interface MusecaDataRawJSON extends BaseDataRawJSON {
|
|
43
|
+
missionString: string | null;
|
|
44
|
+
playLamp: string;
|
|
45
|
+
playMaxCombo: number;
|
|
46
|
+
playScoreJudgements: {
|
|
47
|
+
critical: number;
|
|
48
|
+
near: number;
|
|
49
|
+
error: number;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export interface GitadoraDataRawJSON extends BaseDataRawJSON {
|
|
53
|
+
playInstrumentID: number;
|
|
54
|
+
playInstrumentString: string;
|
|
55
|
+
playSkillRating: number;
|
|
56
|
+
playPercentageScore: number;
|
|
57
|
+
playLamp: string;
|
|
58
|
+
playMaxCombo: number;
|
|
59
|
+
playScoreJudgements: {
|
|
60
|
+
perfect: number;
|
|
61
|
+
great: number;
|
|
62
|
+
good: number;
|
|
63
|
+
ok: number;
|
|
64
|
+
miss: number;
|
|
65
|
+
};
|
|
66
|
+
playJudgeBar: number[];
|
|
67
|
+
}
|
|
68
|
+
export interface NostalgiaDataRawJSON extends BaseDataRawJSON {
|
|
69
|
+
playScoreJudgements: {
|
|
70
|
+
pJust: number;
|
|
71
|
+
just: number;
|
|
72
|
+
good: number;
|
|
73
|
+
near: number;
|
|
74
|
+
miss: number;
|
|
75
|
+
fast: number;
|
|
76
|
+
slow: number;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export interface DDRDataRawJSON extends BaseDataRawJSON {
|
|
80
|
+
playPlaystyle: string;
|
|
81
|
+
playLamp?: string;
|
|
82
|
+
flare?: number;
|
|
83
|
+
playMaxCombo: number;
|
|
84
|
+
playScoreJudgements: {
|
|
85
|
+
marvelous: number;
|
|
86
|
+
perfect: number;
|
|
87
|
+
great: number;
|
|
88
|
+
good: number;
|
|
89
|
+
ok: number;
|
|
90
|
+
ng: number;
|
|
91
|
+
miss: number;
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export {};
|
|
95
|
+
//# sourceMappingURL=scorelogJson.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scorelogJson.d.ts","sourceRoot":"","sources":["../../src/types/scorelogJson.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scorelogJson.js","sourceRoot":"","sources":["../../src/types/scorelogJson.ts"],"names":[],"mappings":""}
|
package/dist/util.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAgB9D;AAED,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,iBAErC"}
|
package/dist/util.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export function trimToNumber(inputString) {
|
|
2
|
+
return Number(inputString.replace(/\D/g, ''));
|
|
3
|
+
}
|
|
4
|
+
export function doesGameHaveProfileInUrl(game) {
|
|
5
|
+
switch (game) {
|
|
6
|
+
case 'iidx':
|
|
7
|
+
case 'jubeat':
|
|
8
|
+
case 'rb':
|
|
9
|
+
case 'gitadora':
|
|
10
|
+
case 'sdvx':
|
|
11
|
+
case 'museca':
|
|
12
|
+
return true;
|
|
13
|
+
case 'ddr':
|
|
14
|
+
case 'nostalgia':
|
|
15
|
+
case 'pnm':
|
|
16
|
+
return false;
|
|
17
|
+
default:
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export async function delay(ms) {
|
|
22
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC5C,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACjD,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ;YACT,OAAO,IAAI,CAAC;QAChB,KAAK,KAAK,CAAC;QACX,KAAK,WAAW,CAAC;QACjB,KAAK,KAAK;YACN,OAAO,KAAK,CAAC;QACjB;YACI,OAAO,KAAK,CAAC;IACrB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,EAAU;IAClC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACnE,CAAC"}
|