magmastream 2.9.0-dev.43 → 2.9.0-dev.45
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.d.ts
CHANGED
|
@@ -2441,13 +2441,6 @@ declare class Manager extends EventEmitter {
|
|
|
2441
2441
|
* @returns The player if it exists, undefined otherwise.
|
|
2442
2442
|
*/
|
|
2443
2443
|
getPlayer(guildId: string): Player | undefined;
|
|
2444
|
-
/**
|
|
2445
|
-
* @deprecated - Will be removed with v2.10.0 use {@link getPlayer} instead
|
|
2446
|
-
* Returns a player or undefined if it does not exist.
|
|
2447
|
-
* @param guildId The guild ID of the player to retrieve.
|
|
2448
|
-
* @returns The player if it exists, undefined otherwise.
|
|
2449
|
-
*/
|
|
2450
|
-
get(guildId: string): Promise<Player | undefined>;
|
|
2451
2444
|
/**
|
|
2452
2445
|
* Creates a player or returns one if it already exists.
|
|
2453
2446
|
* @param options The options to create the player with.
|
|
@@ -49,6 +49,7 @@ class Manager extends events_1.EventEmitter {
|
|
|
49
49
|
// Initialize structures
|
|
50
50
|
Utils_1.Structure.get("Player").init(this);
|
|
51
51
|
Utils_1.TrackUtils.init(this);
|
|
52
|
+
Utils_1.PlayerUtils.init(this);
|
|
52
53
|
if (options.trackPartial) {
|
|
53
54
|
Utils_1.TrackUtils.setTrackPartial(options.trackPartial);
|
|
54
55
|
delete options.trackPartial;
|
|
@@ -264,15 +265,6 @@ class Manager extends events_1.EventEmitter {
|
|
|
264
265
|
getPlayer(guildId) {
|
|
265
266
|
return this.players.get(guildId);
|
|
266
267
|
}
|
|
267
|
-
/**
|
|
268
|
-
* @deprecated - Will be removed with v2.10.0 use {@link getPlayer} instead
|
|
269
|
-
* Returns a player or undefined if it does not exist.
|
|
270
|
-
* @param guildId The guild ID of the player to retrieve.
|
|
271
|
-
* @returns The player if it exists, undefined otherwise.
|
|
272
|
-
*/
|
|
273
|
-
async get(guildId) {
|
|
274
|
-
return this.players.get(guildId);
|
|
275
|
-
}
|
|
276
268
|
/**
|
|
277
269
|
* Creates a player or returns one if it already exists.
|
|
278
270
|
* @param options The options to create the player with.
|
|
@@ -373,7 +365,7 @@ class Manager extends events_1.EventEmitter {
|
|
|
373
365
|
* @returns A promise that resolves to an array of TrackData objects.
|
|
374
366
|
* @throws Will throw an error if no nodes are available or if the API request fails.
|
|
375
367
|
*/
|
|
376
|
-
decodeTracks(tracks) {
|
|
368
|
+
async decodeTracks(tracks) {
|
|
377
369
|
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Decoding tracks: ${JSON.stringify(tracks)}`);
|
|
378
370
|
return new Promise(async (resolve, reject) => {
|
|
379
371
|
const node = this.nodes.first();
|
|
@@ -414,6 +406,7 @@ class Manager extends events_1.EventEmitter {
|
|
|
414
406
|
return;
|
|
415
407
|
}
|
|
416
408
|
const serializedPlayer = await Utils_1.PlayerUtils.serializePlayer(player);
|
|
409
|
+
await promises_1.default.mkdir(path_1.default.dirname(playerStateFilePath), { recursive: true });
|
|
417
410
|
await promises_1.default.writeFile(playerStateFilePath, JSON.stringify(serializedPlayer, null, 2), "utf-8");
|
|
418
411
|
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Player state saved: ${guildId}`);
|
|
419
412
|
}
|
|
@@ -466,6 +459,7 @@ class Manager extends events_1.EventEmitter {
|
|
|
466
459
|
throw new Error(`Could not find node: ${nodeId}`);
|
|
467
460
|
const info = (await node.rest.getAllPlayers());
|
|
468
461
|
switch (this.options.stateStorage.type) {
|
|
462
|
+
case Enums_1.StateStorageType.Memory:
|
|
469
463
|
case Enums_1.StateStorageType.JSON:
|
|
470
464
|
{
|
|
471
465
|
const playersBaseDir = Utils_1.PlayerUtils.getPlayersBaseDir();
|
|
@@ -652,8 +646,7 @@ class Manager extends events_1.EventEmitter {
|
|
|
652
646
|
const data = await promises_1.default.readFile(stateFilePath, "utf-8");
|
|
653
647
|
const state = JSON.parse(data);
|
|
654
648
|
if (state && typeof state === "object" && state.node?.options?.identifier === nodeId) {
|
|
655
|
-
|
|
656
|
-
await promises_1.default.rm(Utils_1.PlayerUtils.getGuildDir(guildId), { recursive: true, force: true });
|
|
649
|
+
await promises_1.default.rm(Utils_1.PlayerUtils.getPlayerStatePath(guildId), { force: true });
|
|
657
650
|
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Deleted player state folder for guild ${guildId}`);
|
|
658
651
|
}
|
|
659
652
|
}
|
package/dist/structures/Node.js
CHANGED
|
@@ -90,6 +90,7 @@ class Node {
|
|
|
90
90
|
this.manager.emit(Enums_1.ManagerEventTypes.NodeCreate, this);
|
|
91
91
|
this.rest = new Rest_1.Rest(this, this.manager);
|
|
92
92
|
switch (this.manager.options.stateStorage.type) {
|
|
93
|
+
case Enums_1.StateStorageType.Memory:
|
|
93
94
|
case Enums_1.StateStorageType.JSON:
|
|
94
95
|
this.sessionIdsFilePath = path_1.default.join(process.cwd(), "magmastream", "sessionData", "sessionIds.json");
|
|
95
96
|
const configDir = path_1.default.dirname(this.sessionIdsFilePath);
|
|
@@ -140,6 +141,7 @@ class Node {
|
|
|
140
141
|
*/
|
|
141
142
|
async loadSessionIds() {
|
|
142
143
|
switch (this.manager.options.stateStorage.type) {
|
|
144
|
+
case Enums_1.StateStorageType.Memory:
|
|
143
145
|
case Enums_1.StateStorageType.JSON: {
|
|
144
146
|
if (fs_1.default.existsSync(this.sessionIdsFilePath)) {
|
|
145
147
|
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Loading sessionIds from file: ${this.sessionIdsFilePath}`);
|
|
@@ -195,11 +197,42 @@ class Node {
|
|
|
195
197
|
*/
|
|
196
198
|
async updateSessionId() {
|
|
197
199
|
switch (this.manager.options.stateStorage.type) {
|
|
200
|
+
case Enums_1.StateStorageType.Memory:
|
|
198
201
|
case Enums_1.StateStorageType.JSON: {
|
|
199
202
|
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Updating sessionIds to file: ${this.sessionIdsFilePath}`);
|
|
200
203
|
const compositeKey = `${this.options.identifier}::${this.manager.options.clusterId}`;
|
|
201
|
-
|
|
202
|
-
|
|
204
|
+
const filePath = this.sessionIdsFilePath;
|
|
205
|
+
let updated = false;
|
|
206
|
+
let retries = 3;
|
|
207
|
+
while (!updated && retries > 0) {
|
|
208
|
+
try {
|
|
209
|
+
let fileData = {};
|
|
210
|
+
if (fs_1.default.existsSync(filePath)) {
|
|
211
|
+
try {
|
|
212
|
+
const raw = fs_1.default.readFileSync(filePath, "utf-8");
|
|
213
|
+
fileData = raw.trim() ? JSON.parse(raw) : {};
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Failed to read/parse sessionIds.json: ${err.message}`);
|
|
217
|
+
fileData = {};
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
fileData[compositeKey] = this.sessionId;
|
|
221
|
+
const tmpPath = `${filePath}.tmp`;
|
|
222
|
+
fs_1.default.writeFileSync(tmpPath, JSON.stringify(fileData, null, 2), "utf-8");
|
|
223
|
+
fs_1.default.renameSync(tmpPath, filePath);
|
|
224
|
+
this.sessionIdsMap = new Map(Object.entries(fileData));
|
|
225
|
+
updated = true;
|
|
226
|
+
}
|
|
227
|
+
catch (err) {
|
|
228
|
+
retries--;
|
|
229
|
+
if (retries === 0) {
|
|
230
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Failed to update sessionIds after retries: ${err.message}`);
|
|
231
|
+
throw err;
|
|
232
|
+
}
|
|
233
|
+
await new Promise((r) => setTimeout(r, 50));
|
|
234
|
+
}
|
|
235
|
+
}
|
|
203
236
|
break;
|
|
204
237
|
}
|
|
205
238
|
case Enums_1.StateStorageType.Redis: {
|