@rian8337/osu-droid-utilities 3.0.0-beta.2 → 3.0.0-beta.20

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/dist/index.js CHANGED
@@ -4,324 +4,336 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var osuBase = require('@rian8337/osu-base');
6
6
  var osuDroidReplayAnalyzer = require('@rian8337/osu-droid-replay-analyzer');
7
- var cryptoJs = require('crypto-js');
7
+ var crypto = require('crypto');
8
8
 
9
- /**
10
- * Represents an osu!droid score.
11
- */
12
- class Score {
13
- /**
14
- * The uid of the player.
15
- */
16
- uid;
17
- /**
18
- * The ID of the score.
19
- */
20
- scoreID;
21
- /**
22
- * The player's name.
23
- */
24
- username;
25
- /**
26
- * The title of the beatmap.
27
- */
28
- title;
29
- /**
30
- * The maximum combo achieved in the play.
31
- */
32
- combo;
33
- /**
34
- * The score achieved in the play.
35
- */
36
- score;
37
- /**
38
- * The rank achieved in the play.
39
- */
40
- rank;
41
- /**
42
- * The date of which the play was set.
43
- */
44
- date;
45
- /**
46
- * The accuracy achieved in the play.
47
- */
48
- accuracy;
49
- /**
50
- * Enabled modifications in the score.
51
- */
52
- mods;
53
- /**
54
- * MD5 hash of the play.
55
- */
56
- hash;
57
- /**
58
- * The speed multiplier of the play.
59
- */
60
- speedMultiplier = 1;
61
- /**
62
- * The forced AR of the play.
63
- */
64
- forcedAR;
65
- /**
66
- * The replay of the score.
67
- */
68
- replay;
69
- constructor(values) {
70
- this.uid = values?.uid ?? 0;
71
- this.scoreID = values?.scoreID ?? 0;
72
- this.username = values?.username ?? "";
73
- this.title = values?.title ?? "";
74
- this.combo = values?.combo ?? 0;
75
- this.score = values?.score ?? 0;
76
- this.rank = values?.rank ?? "";
77
- this.date = new Date(values?.date ?? 0);
78
- this.accuracy = values?.accuracy ?? new osuBase.Accuracy({});
79
- this.hash = values?.hash ?? "";
80
- const modstrings = (values?.mods ?? "").split("|");
81
- let actualMods = "";
82
- for (let i = 0; i < modstrings.length; ++i) {
83
- if (!modstrings[i]) {
84
- continue;
85
- }
86
- if (modstrings[i].startsWith("AR")) {
87
- this.forcedAR = parseFloat(modstrings[i].replace("AR", ""));
88
- }
89
- else if (modstrings[i].startsWith("x")) {
90
- this.speedMultiplier = parseFloat(modstrings[i].replace("x", ""));
91
- }
92
- else {
93
- actualMods += modstrings[i];
94
- }
95
- }
96
- this.mods = osuBase.ModUtil.droidStringToMods(actualMods);
97
- }
98
- /**
99
- * Retrieves score information on a beatmap from a player.
100
- *
101
- * @param uid The uid of the player.
102
- * @param hash The MD5 hash of the beatmap.
103
- * @returns The score, `null` if the score is not found.
104
- */
105
- static async getFromHash(uid, hash) {
106
- const score = new Score();
107
- const apiRequestBuilder = new osuBase.DroidAPIRequestBuilder()
108
- .setEndpoint("scoresearchv2.php")
109
- .addParameter("uid", uid)
110
- .addParameter("hash", hash);
111
- const result = await apiRequestBuilder.sendRequest();
112
- if (result.statusCode !== 200) {
113
- throw new Error("Error retrieving score data");
114
- }
115
- const entry = result.data.toString("utf-8").split("<br>");
116
- entry.shift();
117
- if (entry.length === 0) {
118
- return null;
119
- }
120
- score.fillInformation(entry[0]);
121
- return score;
122
- }
123
- /**
124
- * Fills this instance with score information.
125
- *
126
- * @param info The score information from API response to fill with.
127
- */
128
- fillInformation(info) {
129
- const play = info.split(" ");
130
- this.scoreID = parseInt(play[0]);
131
- this.uid = parseInt(play[1]);
132
- this.username = play[2];
133
- this.score = parseInt(play[3]);
134
- this.combo = parseInt(play[4]);
135
- this.rank = play[5];
136
- const modstrings = play[6].split("|");
137
- let actualMods = "";
138
- for (let i = 0; i < modstrings.length; ++i) {
139
- if (!modstrings[i]) {
140
- continue;
141
- }
142
- if (modstrings[i].startsWith("AR")) {
143
- this.forcedAR = parseFloat(modstrings[i].replace("AR", ""));
144
- }
145
- else if (modstrings[i].startsWith("x")) {
146
- this.speedMultiplier = parseFloat(modstrings[i].replace("x", ""));
147
- }
148
- else {
149
- actualMods += modstrings[i];
150
- }
151
- }
152
- this.mods = osuBase.ModUtil.droidStringToMods(actualMods);
153
- this.accuracy = new osuBase.Accuracy({
154
- n300: parseInt(play[8]),
155
- n100: parseInt(play[9]),
156
- n50: parseInt(play[10]),
157
- nmiss: parseInt(play[11]),
158
- });
159
- const date = new Date(parseInt(play[12]) * 1000);
160
- date.setUTCHours(date.getUTCHours() + 6);
161
- this.date = date;
162
- this.title = play[13]
163
- .substring(0, play[13].length - 4)
164
- .replace(/_/g, " ");
165
- this.hash = play[14];
166
- return this;
167
- }
168
- /**
169
- * Returns the complete mod string of this score (mods, speed multiplier, and force AR combined).
170
- */
171
- getCompleteModString() {
172
- let finalString = `+${this.mods.length > 0 ? this.mods.map((v) => v.acronym) : "No Mod"}`;
173
- if (this.forcedAR !== undefined || this.speedMultiplier !== 1) {
174
- finalString += " (";
175
- if (this.forcedAR !== undefined) {
176
- finalString += `AR${this.forcedAR}`;
177
- }
178
- if (this.speedMultiplier !== 1) {
179
- if (this.forcedAR !== undefined) {
180
- finalString += ", ";
181
- }
182
- finalString += `${this.speedMultiplier}x`;
183
- }
184
- finalString += ")";
185
- }
186
- return finalString;
187
- }
188
- /**
189
- * Downloads the replay of this score.
190
- */
191
- async downloadReplay() {
192
- if (!this.scoreID || this.replay) {
193
- return;
194
- }
195
- this.replay = await new osuDroidReplayAnalyzer.ReplayAnalyzer({
196
- scoreID: this.scoreID,
197
- }).analyze();
198
- }
199
- /**
200
- * Returns a string representative of the class.
201
- */
202
- toString() {
203
- return `Player: ${this.username}, uid: ${this.uid}, title: ${this.title}, score: ${this.score}, combo: ${this.combo}, rank: ${this.rank}, acc: ${this.accuracy}%, date: ${this.date}, mods: ${this.mods}, hash: ${this.hash}`;
204
- }
9
+ /**
10
+ * Represents an osu!droid score.
11
+ */
12
+ class Score {
13
+ /**
14
+ * The uid of the player.
15
+ */
16
+ uid;
17
+ /**
18
+ * The ID of the score.
19
+ */
20
+ scoreID;
21
+ /**
22
+ * The player's name.
23
+ */
24
+ username;
25
+ /**
26
+ * The title of the beatmap.
27
+ */
28
+ title;
29
+ /**
30
+ * The maximum combo achieved in the play.
31
+ */
32
+ combo;
33
+ /**
34
+ * The score achieved in the play.
35
+ */
36
+ score;
37
+ /**
38
+ * The rank achieved in the play.
39
+ */
40
+ rank;
41
+ /**
42
+ * The date of which the play was set.
43
+ */
44
+ date;
45
+ /**
46
+ * The accuracy achieved in the play.
47
+ */
48
+ accuracy;
49
+ /**
50
+ * Enabled modifications in the score.
51
+ */
52
+ mods;
53
+ /**
54
+ * MD5 hash of the play.
55
+ */
56
+ hash;
57
+ /**
58
+ * The speed multiplier of the play.
59
+ */
60
+ speedMultiplier = 1;
61
+ /**
62
+ * Whether to use old statistics for this score when calculating with `MapStats`.
63
+ *
64
+ * Otherwise, this denotes whether the score was set in version 1.6.7 or lower.
65
+ */
66
+ oldStatistics;
67
+ /**
68
+ * The forced AR of the play.
69
+ */
70
+ forcedAR;
71
+ /**
72
+ * The replay of the score.
73
+ */
74
+ replay;
75
+ constructor(values) {
76
+ this.uid = values?.uid ?? 0;
77
+ this.scoreID = values?.scoreID ?? 0;
78
+ this.username = values?.username ?? "";
79
+ this.title = values?.title ?? "";
80
+ this.combo = values?.combo ?? 0;
81
+ this.score = values?.score ?? 0;
82
+ this.rank = values?.rank ?? "";
83
+ this.date = new Date(values?.date ?? 0);
84
+ this.accuracy = values?.accuracy ?? new osuBase.Accuracy({});
85
+ this.hash = values?.hash ?? "";
86
+ const modstrings = (values?.mods ?? "").split("|");
87
+ let actualMods = "";
88
+ for (let i = 0; i < modstrings.length; ++i) {
89
+ if (!modstrings[i]) {
90
+ continue;
91
+ }
92
+ if (modstrings[i].startsWith("AR")) {
93
+ this.forcedAR = parseFloat(modstrings[i].replace("AR", ""));
94
+ }
95
+ else if (modstrings[i].startsWith("x")) {
96
+ this.speedMultiplier = parseFloat(modstrings[i].replace("x", ""));
97
+ }
98
+ else {
99
+ actualMods += modstrings[i];
100
+ }
101
+ }
102
+ this.mods = osuBase.ModUtil.droidStringToMods(actualMods);
103
+ // The pipe was added in 1.6.8 first pre-release (https://github.com/osudroid/osu-droid/commit/c08c406f4b2e535ed1ec43607a72fd8f70f8e316),
104
+ // so we can use that information to infer whether the score was set on version 1.6.7 or lower.
105
+ this.oldStatistics = !(values?.mods ?? "").includes("|");
106
+ }
107
+ /**
108
+ * Retrieves score information on a beatmap from a player.
109
+ *
110
+ * @param uid The uid of the player.
111
+ * @param hash The MD5 hash of the beatmap.
112
+ * @returns The score, `null` if the score is not found.
113
+ */
114
+ static async getFromHash(uid, hash) {
115
+ const score = new Score();
116
+ const apiRequestBuilder = new osuBase.DroidAPIRequestBuilder()
117
+ .setEndpoint("scoresearchv2.php")
118
+ .addParameter("uid", uid)
119
+ .addParameter("hash", hash);
120
+ const result = await apiRequestBuilder.sendRequest();
121
+ if (result.statusCode !== 200) {
122
+ throw new Error("Error retrieving score data");
123
+ }
124
+ const entry = result.data.toString("utf-8").split("<br>");
125
+ entry.shift();
126
+ if (entry.length === 0) {
127
+ return null;
128
+ }
129
+ score.fillInformation(entry[0]);
130
+ return score;
131
+ }
132
+ /**
133
+ * Fills this instance with score information.
134
+ *
135
+ * @param info The score information from API response to fill with.
136
+ */
137
+ fillInformation(info) {
138
+ const play = info.split(" ");
139
+ this.scoreID = parseInt(play[0]);
140
+ this.uid = parseInt(play[1]);
141
+ this.username = play[2];
142
+ this.score = parseInt(play[3]);
143
+ this.combo = parseInt(play[4]);
144
+ this.rank = play[5];
145
+ const modstrings = play[6].split("|");
146
+ let actualMods = "";
147
+ for (let i = 0; i < modstrings.length; ++i) {
148
+ if (!modstrings[i]) {
149
+ continue;
150
+ }
151
+ if (modstrings[i].startsWith("AR")) {
152
+ this.forcedAR = parseFloat(modstrings[i].replace("AR", ""));
153
+ }
154
+ else if (modstrings[i].startsWith("x")) {
155
+ this.speedMultiplier = parseFloat(modstrings[i].replace("x", ""));
156
+ }
157
+ else {
158
+ actualMods += modstrings[i];
159
+ }
160
+ }
161
+ this.mods = osuBase.ModUtil.droidStringToMods(actualMods);
162
+ this.oldStatistics = !play[6].includes("|");
163
+ this.accuracy = new osuBase.Accuracy({
164
+ n300: parseInt(play[8]),
165
+ n100: parseInt(play[9]),
166
+ n50: parseInt(play[10]),
167
+ nmiss: parseInt(play[11]),
168
+ });
169
+ const date = new Date(parseInt(play[12]) * 1000);
170
+ date.setUTCHours(date.getUTCHours() + 6);
171
+ this.date = date;
172
+ this.title = play[13]
173
+ .substring(0, play[13].length - 4)
174
+ .replace(/_/g, " ");
175
+ this.hash = play[14];
176
+ return this;
177
+ }
178
+ /**
179
+ * Returns the complete mod string of this score (mods, speed multiplier, and force AR combined).
180
+ */
181
+ getCompleteModString() {
182
+ let finalString = `+${this.mods.length > 0 ? this.mods.map((v) => v.acronym) : "No Mod"}`;
183
+ if (this.forcedAR !== undefined || this.speedMultiplier !== 1) {
184
+ finalString += " (";
185
+ if (this.forcedAR !== undefined) {
186
+ finalString += `AR${this.forcedAR}`;
187
+ }
188
+ if (this.speedMultiplier !== 1) {
189
+ if (this.forcedAR !== undefined) {
190
+ finalString += ", ";
191
+ }
192
+ finalString += `${this.speedMultiplier}x`;
193
+ }
194
+ finalString += ")";
195
+ }
196
+ return finalString;
197
+ }
198
+ /**
199
+ * Downloads the replay of this score.
200
+ */
201
+ async downloadReplay() {
202
+ if (!this.scoreID || this.replay) {
203
+ return;
204
+ }
205
+ this.replay = await new osuDroidReplayAnalyzer.ReplayAnalyzer({
206
+ scoreID: this.scoreID,
207
+ }).analyze();
208
+ }
209
+ /**
210
+ * Returns a string representative of the class.
211
+ */
212
+ toString() {
213
+ return `Player: ${this.username}, uid: ${this.uid}, title: ${this.title}, score: ${this.score}, combo: ${this.combo}, rank: ${this.rank}, acc: ${this.accuracy}%, date: ${this.date}, mods: ${this.mods}, hash: ${this.hash}`;
214
+ }
205
215
  }
206
216
 
207
- /**
208
- * Represents an osu!droid player.
209
- */
210
- class Player {
211
- /**
212
- * The uid of the player.
213
- */
214
- uid = 0;
215
- /**
216
- * The username of the player.
217
- */
218
- username = "";
219
- /**
220
- * The avatar URL of the player.
221
- */
222
- avatarURL = "";
223
- /**
224
- * The location of the player based on ISO 3166-1 country codes. See {@link https://en.wikipedia.org/wiki/ISO_3166-1 this} Wikipedia page for more information.
225
- */
226
- location = "";
227
- /**
228
- * The email that is attached to the player's account.
229
- */
230
- email = "";
231
- /**
232
- * The overall rank of the player.
233
- */
234
- rank = 0;
235
- /**
236
- * The total score of the player.
237
- */
238
- score = 0;
239
- /**
240
- * The overall accuracy of the player.
241
- */
242
- accuracy = 0;
243
- /**
244
- * The amount of times the player has played.
245
- */
246
- playCount = 0;
247
- /**
248
- * Recent plays of the player.
249
- */
250
- recentPlays = [];
251
- /**
252
- * Retrieves a player's info based on their username.
253
- *
254
- * @param uidOrUsername The uid or username of the player.
255
- * @returns The player, `null` if the player is not found.
256
- */
257
- static async getInformation(uidOrUsername) {
258
- const player = new Player();
259
- const apiRequestBuilder = new osuBase.DroidAPIRequestBuilder()
260
- .setEndpoint("getuserinfo.php")
261
- .addParameter(typeof uidOrUsername === "number" ? "uid" : "username", uidOrUsername);
262
- const result = await apiRequestBuilder.sendRequest();
263
- if (result.statusCode !== 200) {
264
- throw new Error("Error retrieving player data");
265
- }
266
- const data = result.data.toString("utf-8");
267
- const resArr = data.split("<br>");
268
- const headerRes = resArr[0].split(" ");
269
- if (headerRes[0] === "FAILED") {
270
- return null;
271
- }
272
- player.fillInformation(data);
273
- return player;
274
- }
275
- /**
276
- * Fills this instance with player information.
277
- *
278
- * @param info The player information from API response to fill with.
279
- */
280
- fillInformation(info) {
281
- const resArr = info.split("<br>");
282
- const headerRes = resArr[0].split(" ");
283
- if (headerRes[0] === "FAILED") {
284
- return this;
285
- }
286
- const obj = JSON.parse(resArr[1]);
287
- this.uid = parseInt(headerRes[1]);
288
- this.username = headerRes[2];
289
- this.score = parseInt(headerRes[3]);
290
- this.playCount = parseInt(headerRes[4]);
291
- this.accuracy = parseFloat((parseFloat(headerRes[5]) * 100).toFixed(2));
292
- this.email = headerRes[6];
293
- this.location = headerRes[7];
294
- this.avatarURL = `https://osudroid.moe/user/avatar?id=${cryptoJs.MD5(this.email.trim().toLowerCase()).toString()}&s=200`;
295
- this.rank = obj.rank;
296
- const recent = obj.recent;
297
- for (const play of recent) {
298
- this.recentPlays.push(new Score({
299
- uid: this.uid,
300
- username: this.username,
301
- scoreID: play.scoreid,
302
- score: play.score,
303
- accuracy: new osuBase.Accuracy({
304
- n300: play.perfect,
305
- n100: play.good,
306
- n50: play.bad,
307
- nmiss: play.miss,
308
- }),
309
- rank: play.mark,
310
- combo: play.combo,
311
- title: play.filename,
312
- date: (play.date + 3600 * 6) * 1000,
313
- mods: play.mode,
314
- hash: play.hash,
315
- }));
316
- }
317
- return this;
318
- }
319
- /**
320
- * Returns a string representative of the class.
321
- */
322
- toString() {
323
- return `Username: ${this.username}\nUID: ${this.uid}\nRank: ${this.rank}\nScore: ${this.score}\nPlay count: ${this.playCount}`;
324
- }
217
+ /**
218
+ * Represents an osu!droid player.
219
+ */
220
+ class Player {
221
+ /**
222
+ * The uid of the player.
223
+ */
224
+ uid = 0;
225
+ /**
226
+ * The username of the player.
227
+ */
228
+ username = "";
229
+ /**
230
+ * The avatar URL of the player.
231
+ */
232
+ avatarURL = "";
233
+ /**
234
+ * The location of the player based on ISO 3166-1 country codes. See {@link https://en.wikipedia.org/wiki/ISO_3166-1 this} Wikipedia page for more information.
235
+ */
236
+ location = "";
237
+ /**
238
+ * The email that is attached to the player's account.
239
+ */
240
+ email = "";
241
+ /**
242
+ * The overall rank of the player.
243
+ */
244
+ rank = 0;
245
+ /**
246
+ * The total score of the player.
247
+ */
248
+ score = 0;
249
+ /**
250
+ * The overall accuracy of the player.
251
+ */
252
+ accuracy = 0;
253
+ /**
254
+ * The amount of times the player has played.
255
+ */
256
+ playCount = 0;
257
+ /**
258
+ * Recent plays of the player.
259
+ */
260
+ recentPlays = [];
261
+ /**
262
+ * Retrieves a player's info based on their username.
263
+ *
264
+ * @param uidOrUsername The uid or username of the player.
265
+ * @returns The player, `null` if the player is not found.
266
+ */
267
+ static async getInformation(uidOrUsername) {
268
+ const player = new Player();
269
+ const apiRequestBuilder = new osuBase.DroidAPIRequestBuilder()
270
+ .setEndpoint("getuserinfo.php")
271
+ .addParameter(typeof uidOrUsername === "number" ? "uid" : "username", uidOrUsername);
272
+ const result = await apiRequestBuilder.sendRequest();
273
+ if (result.statusCode !== 200) {
274
+ throw new Error("Error retrieving player data");
275
+ }
276
+ const data = result.data.toString("utf-8");
277
+ const resArr = data.split("<br>");
278
+ const headerRes = resArr[0].split(" ");
279
+ if (headerRes[0] === "FAILED") {
280
+ return null;
281
+ }
282
+ player.fillInformation(data);
283
+ return player;
284
+ }
285
+ /**
286
+ * Fills this instance with player information.
287
+ *
288
+ * @param info The player information from API response to fill with.
289
+ */
290
+ fillInformation(info) {
291
+ const resArr = info.split("<br>");
292
+ const headerRes = resArr[0].split(" ");
293
+ if (headerRes[0] === "FAILED") {
294
+ return this;
295
+ }
296
+ const obj = JSON.parse(resArr[1]);
297
+ this.uid = parseInt(headerRes[1]);
298
+ this.username = headerRes[2];
299
+ this.score = parseInt(headerRes[3]);
300
+ this.playCount = parseInt(headerRes[4]);
301
+ this.accuracy = parseFloat((parseFloat(headerRes[5]) * 100).toFixed(2));
302
+ this.email = headerRes[6];
303
+ this.location = headerRes[7];
304
+ this.avatarURL = `https://osudroid.moe/user/avatar?id=${crypto.createHash("md5")
305
+ .update(this.email.trim().toLowerCase())
306
+ .digest("hex")}&s=200`;
307
+ this.rank = obj.rank;
308
+ const recent = obj.recent;
309
+ for (const play of recent) {
310
+ this.recentPlays.push(new Score({
311
+ uid: this.uid,
312
+ username: this.username,
313
+ scoreID: play.scoreid,
314
+ score: play.score,
315
+ accuracy: new osuBase.Accuracy({
316
+ n300: play.perfect,
317
+ n100: play.good,
318
+ n50: play.bad,
319
+ nmiss: play.miss,
320
+ }),
321
+ rank: play.mark,
322
+ combo: play.combo,
323
+ title: play.filename,
324
+ date: (play.date + 3600 * 6) * 1000,
325
+ mods: play.mode,
326
+ hash: play.hash,
327
+ }));
328
+ }
329
+ return this;
330
+ }
331
+ /**
332
+ * Returns a string representative of the class.
333
+ */
334
+ toString() {
335
+ return `Username: ${this.username}\nUID: ${this.uid}\nRank: ${this.rank}\nScore: ${this.score}\nPlay count: ${this.playCount}`;
336
+ }
325
337
  }
326
338
 
327
339
  exports.Player = Player;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/Score.ts","../src/Player.ts"],"sourcesContent":[null,null],"names":["Accuracy","ModUtil","DroidAPIRequestBuilder","ReplayAnalyzer","MD5"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/Score.ts","../src/Player.ts"],"sourcesContent":[null,null],"names":["Accuracy","ModUtil","DroidAPIRequestBuilder","ReplayAnalyzer","createHash"],"mappings":"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"}
package/package.json CHANGED
@@ -1,44 +1,40 @@
1
1
  {
2
- "name": "@rian8337/osu-droid-utilities",
3
- "version": "3.0.0-beta.2",
4
- "description": "A module containing utilities for osu!droid.",
5
- "keywords": [
6
- "osu",
7
- "osu-droid"
8
- ],
9
- "author": "Rian8337 <52914632+Rian8337@users.noreply.github.com>",
10
- "homepage": "https://github.com/Rian8337/osu-droid-module#readme",
11
- "license": "MIT",
12
- "main": "dist/index.js",
13
- "typings": "typings/index.d.ts",
14
- "typedocMain": "src/index.ts",
15
- "files": [
16
- "dist/**",
17
- "typings/**"
18
- ],
19
- "repository": {
20
- "type": "git",
21
- "url": "git+https://github.com/Rian8337/osu-droid-module.git"
22
- },
23
- "scripts": {
24
- "build": "rollup -c ../../rollup.config.js",
25
- "lint": "eslint --ext ts",
26
- "prepare": "npm run build",
27
- "test": "jest"
28
- },
29
- "bugs": {
30
- "url": "https://github.com/Rian8337/osu-droid-module/issues"
31
- },
32
- "dependencies": {
33
- "@rian8337/osu-base": "^3.0.0-beta.2",
34
- "@rian8337/osu-droid-replay-analyzer": "^3.0.0-beta.2",
35
- "crypto-js": "^4.1.1"
36
- },
37
- "publishConfig": {
38
- "access": "public"
39
- },
40
- "devDependencies": {
41
- "@types/crypto-js": "^4.1.0"
42
- },
43
- "gitHead": "da73e3f412b65f764f1266757c1d0cca8712bd12"
2
+ "name": "@rian8337/osu-droid-utilities",
3
+ "version": "3.0.0-beta.20",
4
+ "description": "A module containing utilities for osu!droid.",
5
+ "keywords": [
6
+ "osu",
7
+ "osu-droid"
8
+ ],
9
+ "author": "Rian8337 <52914632+Rian8337@users.noreply.github.com>",
10
+ "homepage": "https://github.com/Rian8337/osu-droid-module#readme",
11
+ "license": "MIT",
12
+ "main": "dist/index.js",
13
+ "typings": "typings/index.d.ts",
14
+ "typedocMain": "src/index.ts",
15
+ "files": [
16
+ "dist/**",
17
+ "typings/**"
18
+ ],
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/Rian8337/osu-droid-module.git"
22
+ },
23
+ "scripts": {
24
+ "build": "rollup -c ../../rollup.config.js",
25
+ "lint": "eslint --ext ts",
26
+ "prepare": "npm run build",
27
+ "test": "jest"
28
+ },
29
+ "bugs": {
30
+ "url": "https://github.com/Rian8337/osu-droid-module/issues"
31
+ },
32
+ "dependencies": {
33
+ "@rian8337/osu-base": "^3.0.0-beta.19",
34
+ "@rian8337/osu-droid-replay-analyzer": "^3.0.0-beta.20"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "gitHead": "3c931705c74b1f7132a6fb8eb647bfcc7b39df1c"
44
40
  }
@@ -1,202 +1,208 @@
1
1
  import { Accuracy, Mod, IModApplicableToDroid } from '@rian8337/osu-base';
2
2
  import { ReplayAnalyzer } from '@rian8337/osu-droid-replay-analyzer';
3
3
 
4
- interface ScoreInformation {
5
- /**
6
- * The uid of the player.
7
- */
8
- uid?: number;
9
- /**
10
- * The ID of the score.
11
- */
12
- scoreID?: number;
13
- /**
14
- * The player's name.
15
- */
16
- username: string;
17
- /**
18
- * The title of the beatmap.
19
- */
20
- title: string;
21
- /**
22
- * The maximum combo achieved in the play.
23
- */
24
- combo: number;
25
- /**
26
- * The score achieved in the play.
27
- */
28
- score: number;
29
- /**
30
- * The rank achieved in the play.
31
- */
32
- rank: string;
33
- /**
34
- * The date of which the play was set.
35
- */
36
- date: Date | number;
37
- /**
38
- * The accuracy achieved in the play.
39
- */
40
- accuracy: Accuracy;
41
- /**
42
- * Enabled modifications in the score, including force AR and custom speed multiplier.
43
- */
44
- mods: string;
45
- /**
46
- * MD5 hash of the play.
47
- */
48
- hash: string;
49
- }
50
- /**
51
- * Represents an osu!droid score.
52
- */
53
- declare class Score {
54
- /**
55
- * The uid of the player.
56
- */
57
- uid: number;
58
- /**
59
- * The ID of the score.
60
- */
61
- scoreID: number;
62
- /**
63
- * The player's name.
64
- */
65
- username: string;
66
- /**
67
- * The title of the beatmap.
68
- */
69
- title: string;
70
- /**
71
- * The maximum combo achieved in the play.
72
- */
73
- combo: number;
74
- /**
75
- * The score achieved in the play.
76
- */
77
- score: number;
78
- /**
79
- * The rank achieved in the play.
80
- */
81
- rank: string;
82
- /**
83
- * The date of which the play was set.
84
- */
85
- date: Date;
86
- /**
87
- * The accuracy achieved in the play.
88
- */
89
- accuracy: Accuracy;
90
- /**
91
- * Enabled modifications in the score.
92
- */
93
- mods: (Mod & IModApplicableToDroid)[];
94
- /**
95
- * MD5 hash of the play.
96
- */
97
- hash: string;
98
- /**
99
- * The speed multiplier of the play.
100
- */
101
- speedMultiplier: number;
102
- /**
103
- * The forced AR of the play.
104
- */
105
- forcedAR?: number;
106
- /**
107
- * The replay of the score.
108
- */
109
- replay?: ReplayAnalyzer;
110
- constructor(values?: ScoreInformation);
111
- /**
112
- * Retrieves score information on a beatmap from a player.
113
- *
114
- * @param uid The uid of the player.
115
- * @param hash The MD5 hash of the beatmap.
116
- * @returns The score, `null` if the score is not found.
117
- */
118
- static getFromHash(uid: number, hash: string): Promise<Score | null>;
119
- /**
120
- * Fills this instance with score information.
121
- *
122
- * @param info The score information from API response to fill with.
123
- */
124
- fillInformation(info: string): Score;
125
- /**
126
- * Returns the complete mod string of this score (mods, speed multiplier, and force AR combined).
127
- */
128
- getCompleteModString(): string;
129
- /**
130
- * Downloads the replay of this score.
131
- */
132
- downloadReplay(): Promise<void>;
133
- /**
134
- * Returns a string representative of the class.
135
- */
136
- toString(): string;
4
+ interface ScoreInformation {
5
+ /**
6
+ * The uid of the player.
7
+ */
8
+ uid?: number;
9
+ /**
10
+ * The ID of the score.
11
+ */
12
+ scoreID?: number;
13
+ /**
14
+ * The player's name.
15
+ */
16
+ username: string;
17
+ /**
18
+ * The title of the beatmap.
19
+ */
20
+ title: string;
21
+ /**
22
+ * The maximum combo achieved in the play.
23
+ */
24
+ combo: number;
25
+ /**
26
+ * The score achieved in the play.
27
+ */
28
+ score: number;
29
+ /**
30
+ * The rank achieved in the play.
31
+ */
32
+ rank: string;
33
+ /**
34
+ * The date of which the play was set.
35
+ */
36
+ date: Date | number;
37
+ /**
38
+ * The accuracy achieved in the play.
39
+ */
40
+ accuracy: Accuracy;
41
+ /**
42
+ * Enabled modifications in the score, including force AR and custom speed multiplier.
43
+ */
44
+ mods: string;
45
+ /**
46
+ * MD5 hash of the play.
47
+ */
48
+ hash: string;
49
+ }
50
+ /**
51
+ * Represents an osu!droid score.
52
+ */
53
+ declare class Score {
54
+ /**
55
+ * The uid of the player.
56
+ */
57
+ uid: number;
58
+ /**
59
+ * The ID of the score.
60
+ */
61
+ scoreID: number;
62
+ /**
63
+ * The player's name.
64
+ */
65
+ username: string;
66
+ /**
67
+ * The title of the beatmap.
68
+ */
69
+ title: string;
70
+ /**
71
+ * The maximum combo achieved in the play.
72
+ */
73
+ combo: number;
74
+ /**
75
+ * The score achieved in the play.
76
+ */
77
+ score: number;
78
+ /**
79
+ * The rank achieved in the play.
80
+ */
81
+ rank: string;
82
+ /**
83
+ * The date of which the play was set.
84
+ */
85
+ date: Date;
86
+ /**
87
+ * The accuracy achieved in the play.
88
+ */
89
+ accuracy: Accuracy;
90
+ /**
91
+ * Enabled modifications in the score.
92
+ */
93
+ mods: (Mod & IModApplicableToDroid)[];
94
+ /**
95
+ * MD5 hash of the play.
96
+ */
97
+ hash: string;
98
+ /**
99
+ * The speed multiplier of the play.
100
+ */
101
+ speedMultiplier: number;
102
+ /**
103
+ * Whether to use old statistics for this score when calculating with `MapStats`.
104
+ *
105
+ * Otherwise, this denotes whether the score was set in version 1.6.7 or lower.
106
+ */
107
+ oldStatistics: boolean;
108
+ /**
109
+ * The forced AR of the play.
110
+ */
111
+ forcedAR?: number;
112
+ /**
113
+ * The replay of the score.
114
+ */
115
+ replay?: ReplayAnalyzer;
116
+ constructor(values?: ScoreInformation);
117
+ /**
118
+ * Retrieves score information on a beatmap from a player.
119
+ *
120
+ * @param uid The uid of the player.
121
+ * @param hash The MD5 hash of the beatmap.
122
+ * @returns The score, `null` if the score is not found.
123
+ */
124
+ static getFromHash(uid: number, hash: string): Promise<Score | null>;
125
+ /**
126
+ * Fills this instance with score information.
127
+ *
128
+ * @param info The score information from API response to fill with.
129
+ */
130
+ fillInformation(info: string): Score;
131
+ /**
132
+ * Returns the complete mod string of this score (mods, speed multiplier, and force AR combined).
133
+ */
134
+ getCompleteModString(): string;
135
+ /**
136
+ * Downloads the replay of this score.
137
+ */
138
+ downloadReplay(): Promise<void>;
139
+ /**
140
+ * Returns a string representative of the class.
141
+ */
142
+ toString(): string;
137
143
  }
138
144
 
139
- /**
140
- * Represents an osu!droid player.
141
- */
142
- declare class Player {
143
- /**
144
- * The uid of the player.
145
- */
146
- uid: number;
147
- /**
148
- * The username of the player.
149
- */
150
- username: string;
151
- /**
152
- * The avatar URL of the player.
153
- */
154
- avatarURL: string;
155
- /**
156
- * The location of the player based on ISO 3166-1 country codes. See {@link https://en.wikipedia.org/wiki/ISO_3166-1 this} Wikipedia page for more information.
157
- */
158
- location: string;
159
- /**
160
- * The email that is attached to the player's account.
161
- */
162
- email: string;
163
- /**
164
- * The overall rank of the player.
165
- */
166
- rank: number;
167
- /**
168
- * The total score of the player.
169
- */
170
- score: number;
171
- /**
172
- * The overall accuracy of the player.
173
- */
174
- accuracy: number;
175
- /**
176
- * The amount of times the player has played.
177
- */
178
- playCount: number;
179
- /**
180
- * Recent plays of the player.
181
- */
182
- readonly recentPlays: Score[];
183
- /**
184
- * Retrieves a player's info based on their username.
185
- *
186
- * @param uidOrUsername The uid or username of the player.
187
- * @returns The player, `null` if the player is not found.
188
- */
189
- static getInformation(uidOrUsername: string | number): Promise<Player | null>;
190
- /**
191
- * Fills this instance with player information.
192
- *
193
- * @param info The player information from API response to fill with.
194
- */
195
- fillInformation(info: string): Player;
196
- /**
197
- * Returns a string representative of the class.
198
- */
199
- toString(): string;
145
+ /**
146
+ * Represents an osu!droid player.
147
+ */
148
+ declare class Player {
149
+ /**
150
+ * The uid of the player.
151
+ */
152
+ uid: number;
153
+ /**
154
+ * The username of the player.
155
+ */
156
+ username: string;
157
+ /**
158
+ * The avatar URL of the player.
159
+ */
160
+ avatarURL: string;
161
+ /**
162
+ * The location of the player based on ISO 3166-1 country codes. See {@link https://en.wikipedia.org/wiki/ISO_3166-1 this} Wikipedia page for more information.
163
+ */
164
+ location: string;
165
+ /**
166
+ * The email that is attached to the player's account.
167
+ */
168
+ email: string;
169
+ /**
170
+ * The overall rank of the player.
171
+ */
172
+ rank: number;
173
+ /**
174
+ * The total score of the player.
175
+ */
176
+ score: number;
177
+ /**
178
+ * The overall accuracy of the player.
179
+ */
180
+ accuracy: number;
181
+ /**
182
+ * The amount of times the player has played.
183
+ */
184
+ playCount: number;
185
+ /**
186
+ * Recent plays of the player.
187
+ */
188
+ readonly recentPlays: Score[];
189
+ /**
190
+ * Retrieves a player's info based on their username.
191
+ *
192
+ * @param uidOrUsername The uid or username of the player.
193
+ * @returns The player, `null` if the player is not found.
194
+ */
195
+ static getInformation(uidOrUsername: string | number): Promise<Player | null>;
196
+ /**
197
+ * Fills this instance with player information.
198
+ *
199
+ * @param info The player information from API response to fill with.
200
+ */
201
+ fillInformation(info: string): Player;
202
+ /**
203
+ * Returns a string representative of the class.
204
+ */
205
+ toString(): string;
200
206
  }
201
207
 
202
208
  export { Player, Score };