magmastream 2.9.1-dev.3 → 2.9.1-dev.4
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 +4 -1
- package/dist/statestorage/JsonQueue.js +2 -1
- package/dist/statestorage/MemoryQueue.js +3 -2
- package/dist/statestorage/RedisQueue.js +2 -1
- package/dist/structures/Manager.js +9 -9
- package/dist/structures/Node.js +14 -14
- package/dist/structures/Player.js +3 -3
- package/dist/structures/Rest.js +4 -3
- package/dist/structures/Utils.js +34 -36
- package/package.json +2 -1
package/dist/index.d.ts
CHANGED
|
@@ -3499,6 +3499,9 @@ declare abstract class Structure {
|
|
|
3499
3499
|
*/
|
|
3500
3500
|
static get<K extends keyof Extendable>(name: K): Extendable[K];
|
|
3501
3501
|
}
|
|
3502
|
+
declare abstract class JSONUtils {
|
|
3503
|
+
static safe<T>(obj: T, space?: number): string;
|
|
3504
|
+
}
|
|
3502
3505
|
|
|
3503
3506
|
/**
|
|
3504
3507
|
* Discord.js wrapper for Magmastream.
|
|
@@ -3572,5 +3575,5 @@ declare class SeyfertManager extends Manager {
|
|
|
3572
3575
|
resolveUser(user: PortableUser | string): Promise<User$3 | PortableUser>;
|
|
3573
3576
|
}
|
|
3574
3577
|
|
|
3575
|
-
export { AutoPlayPlatform, AutoPlayUtils, AvailableFilters, DetritusManager, DiscordJSManager, ErisManager, Filters, JsonQueue, LoadTypes, Manager, ManagerEventTypes, MemoryQueue, Node, OceanicManager, Player, PlayerStateEventTypes, PlayerUtils, Plugin, RedisQueue, Rest, SearchPlatform, SeverityTypes, SeyfertManager, SponsorBlockSegment, StateStorageType, StateTypes, Structure, TrackEndReasonTypes, TrackPartial, TrackSourceTypes, TrackUtils, UseNodeOptions };
|
|
3578
|
+
export { AutoPlayPlatform, AutoPlayUtils, AvailableFilters, DetritusManager, DiscordJSManager, ErisManager, Filters, JSONUtils, JsonQueue, LoadTypes, Manager, ManagerEventTypes, MemoryQueue, Node, OceanicManager, Player, PlayerStateEventTypes, PlayerUtils, Plugin, RedisQueue, Rest, SearchPlatform, SeverityTypes, SeyfertManager, SponsorBlockSegment, StateStorageType, StateTypes, Structure, TrackEndReasonTypes, TrackPartial, TrackSourceTypes, TrackUtils, UseNodeOptions };
|
|
3576
3579
|
export type { AlbumSearchResult, ArtistSearchResult, CPUStats, DiscordPacket, DistortionOptions, EndSpeakingEventVoiceReceiver, EndSpeakingEventVoiceReceiverData, EqualizerBand, ErrorOrEmptySearchResult, Exception, Extendable, FrameStats, IQueue, JsonConfig, KaraokeOptions, LavaPlayer, LavalinkInfo, LavalinkResponse, LoadType, Lyrics, LyricsEvent, LyricsEventType, LyricsFoundEvent, LyricsLine, LyricsLineEvent, LyricsNotFoundEvent, ManagerEvents, ManagerInitOptions, ManagerOptions, MemoryStats, NodeLinkGetLyrics, NodeLinkGetLyricsEmpty, NodeLinkGetLyricsError, NodeLinkGetLyricsMultiple, NodeLinkGetLyricsSingle, NodeMessage, NodeOptions, NodeStats, PlayOptions, PlayerEvent, PlayerEventType, PlayerEvents, PlayerOptions, PlayerStateUpdateEvent, PlayerUpdateVoiceState, PlaylistData, PlaylistInfoData, PlaylistRawData, PlaylistSearchResult, PodcastSearchResult, PortableUser, RedisConfig, RestPlayOptions, ReverbOptions, RotationOptions, SearchQuery, SearchResult, SearchSearchResult, Severity, ShortSearchResult, ShowSearchResult, Sizes, SponsorBlockChapterStarted, SponsorBlockChaptersLoaded, SponsorBlockSegmentEventType, SponsorBlockSegmentEvents, SponsorBlockSegmentSkipped, SponsorBlockSegmentsLoaded, StartSpeakingEventVoiceReceiver, StartSpeakingEventVoiceReceiverData, StateStorageOptions, StationSearchResult, TimescaleOptions, Track, TrackData, TrackDataInfo, TrackEndEvent, TrackEndReason, TrackExceptionEvent, TrackPluginInfo, TrackSearchResult, TrackSourceName, TrackStartEvent, TrackStuckEvent, UseNodeOption, VibratoOptions, VoicePacket, VoiceReceiverEvent, VoiceServer, VoiceServerUpdate, VoiceState, WebSocketClosedEvent };
|
|
@@ -5,6 +5,7 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const Enums_1 = require("../structures/Enums");
|
|
6
6
|
const path_1 = tslib_1.__importDefault(require("path"));
|
|
7
7
|
const fs_1 = require("fs");
|
|
8
|
+
const Utils_1 = require("../structures/Utils");
|
|
8
9
|
/**
|
|
9
10
|
* The player's queue, the `current` property is the currently playing track, think of the rest as the up-coming tracks.
|
|
10
11
|
*/
|
|
@@ -437,7 +438,7 @@ class JsonQueue {
|
|
|
437
438
|
*/
|
|
438
439
|
async writeJSON(filePath, data) {
|
|
439
440
|
await this.ensureDir();
|
|
440
|
-
await fs_1.promises.writeFile(filePath,
|
|
441
|
+
await fs_1.promises.writeFile(filePath, Utils_1.JSONUtils.safe(data, 2), "utf-8");
|
|
441
442
|
}
|
|
442
443
|
}
|
|
443
444
|
exports.JsonQueue = JsonQueue;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MemoryQueue = void 0;
|
|
4
4
|
const Enums_1 = require("../structures/Enums");
|
|
5
|
+
const Utils_1 = require("../structures/Utils");
|
|
5
6
|
/**
|
|
6
7
|
* The player's queue, the `current` property is the currently playing track, think of the rest as the up-coming tracks.
|
|
7
8
|
*/
|
|
@@ -36,7 +37,7 @@ class MemoryQueue extends Array {
|
|
|
36
37
|
const isArray = Array.isArray(track);
|
|
37
38
|
const tracks = isArray ? [...track] : [track];
|
|
38
39
|
// Get the track info as a string
|
|
39
|
-
const trackInfo = isArray ? tracks.map((t) =>
|
|
40
|
+
const trackInfo = isArray ? tracks.map((t) => Utils_1.JSONUtils.safe(t, 2)).join(", ") : Utils_1.JSONUtils.safe(track, 2);
|
|
40
41
|
// Emit a debug message
|
|
41
42
|
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[QUEUE] Added ${tracks.length} track(s) to queue: ${trackInfo}`);
|
|
42
43
|
const oldPlayer = this.manager.players.get(this.guildId) ? { ...this.manager.players.get(this.guildId) } : null;
|
|
@@ -262,7 +263,7 @@ class MemoryQueue extends Array {
|
|
|
262
263
|
}
|
|
263
264
|
// Single item removal when no end specified
|
|
264
265
|
const removedTrack = this.splice(startOrPosition, 1);
|
|
265
|
-
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[QUEUE] Removed 1 track from player: ${this.guildId} from position ${startOrPosition}: ${
|
|
266
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[QUEUE] Removed 1 track from player: ${this.guildId} from position ${startOrPosition}: ${Utils_1.JSONUtils.safe(removedTrack[0], 2)}`);
|
|
266
267
|
// Ensure removedTrack is an array for consistency
|
|
267
268
|
const tracksToEmit = removedTrack.length > 0 ? removedTrack : [];
|
|
268
269
|
this.manager.emit(Enums_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this.manager.players.get(this.guildId), {
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RedisQueue = void 0;
|
|
4
4
|
const Enums_1 = require("../structures/Enums");
|
|
5
|
+
const Utils_1 = require("../structures/Utils");
|
|
5
6
|
/**
|
|
6
7
|
* The player's queue, the `current` property is the currently playing track, think of the rest as the up-coming tracks.
|
|
7
8
|
*/
|
|
@@ -441,7 +442,7 @@ class RedisQueue {
|
|
|
441
442
|
* Helper to serialize/deserialize Track
|
|
442
443
|
*/
|
|
443
444
|
serialize(track) {
|
|
444
|
-
return
|
|
445
|
+
return Utils_1.JSONUtils.safe(track, 2);
|
|
445
446
|
}
|
|
446
447
|
}
|
|
447
448
|
exports.RedisQueue = RedisQueue;
|
|
@@ -241,7 +241,7 @@ class Manager extends events_1.EventEmitter {
|
|
|
241
241
|
const summary = "tracks" in result
|
|
242
242
|
? result.tracks.map((t) => Object.fromEntries(Object.entries(t).filter(([key]) => key !== "requester")))
|
|
243
243
|
: [];
|
|
244
|
-
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Result search for ${_query.query}: ${
|
|
244
|
+
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Result search for ${_query.query}: ${Utils_1.JSONUtils.safe(summary, 2)}`);
|
|
245
245
|
return result;
|
|
246
246
|
}
|
|
247
247
|
catch (err) {
|
|
@@ -266,7 +266,7 @@ class Manager extends events_1.EventEmitter {
|
|
|
266
266
|
return this.players.get(options.guildId);
|
|
267
267
|
}
|
|
268
268
|
// Create a new player with the given options
|
|
269
|
-
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Creating new player with options: ${
|
|
269
|
+
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Creating new player with options: ${Utils_1.JSONUtils.safe(options, 2)}`);
|
|
270
270
|
return new (Utils_1.Structure.get("Player"))(options);
|
|
271
271
|
}
|
|
272
272
|
/**
|
|
@@ -297,7 +297,7 @@ class Manager extends events_1.EventEmitter {
|
|
|
297
297
|
// Set the node in the manager's collection
|
|
298
298
|
this.nodes.set(key, node);
|
|
299
299
|
// Emit a debug event for node creation
|
|
300
|
-
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Creating new node with options: ${
|
|
300
|
+
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Creating new node with options: ${Utils_1.JSONUtils.safe(options, 2)}`);
|
|
301
301
|
// Return the created node
|
|
302
302
|
return node;
|
|
303
303
|
}
|
|
@@ -341,7 +341,7 @@ class Manager extends events_1.EventEmitter {
|
|
|
341
341
|
const player = this.getPlayer(update.guild_id);
|
|
342
342
|
if (!player)
|
|
343
343
|
return;
|
|
344
|
-
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Updating voice state: ${
|
|
344
|
+
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Updating voice state: ${Utils_1.JSONUtils.safe(update, 2)}`);
|
|
345
345
|
if ("token" in update) {
|
|
346
346
|
return await this.handleVoiceServerUpdate(player, update);
|
|
347
347
|
}
|
|
@@ -357,12 +357,12 @@ class Manager extends events_1.EventEmitter {
|
|
|
357
357
|
* @throws Will throw an error if no nodes are available or if the API request fails.
|
|
358
358
|
*/
|
|
359
359
|
async decodeTracks(tracks) {
|
|
360
|
-
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Decoding tracks: ${
|
|
360
|
+
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Decoding tracks: ${Utils_1.JSONUtils.safe(tracks, 2)}`);
|
|
361
361
|
return new Promise(async (resolve, reject) => {
|
|
362
362
|
const node = this.nodes.first();
|
|
363
363
|
if (!node)
|
|
364
364
|
throw new Error("No available nodes.");
|
|
365
|
-
const res = (await node.rest.post("/v4/decodetracks",
|
|
365
|
+
const res = (await node.rest.post("/v4/decodetracks", Utils_1.JSONUtils.safe(tracks, 2)).catch((err) => reject(err)));
|
|
366
366
|
if (!res) {
|
|
367
367
|
return reject(new Error("No data returned from query."));
|
|
368
368
|
}
|
|
@@ -398,7 +398,7 @@ class Manager extends events_1.EventEmitter {
|
|
|
398
398
|
}
|
|
399
399
|
const serializedPlayer = await Utils_1.PlayerUtils.serializePlayer(player);
|
|
400
400
|
await promises_1.default.mkdir(path_1.default.dirname(playerStateFilePath), { recursive: true });
|
|
401
|
-
await promises_1.default.writeFile(playerStateFilePath,
|
|
401
|
+
await promises_1.default.writeFile(playerStateFilePath, Utils_1.JSONUtils.safe(serializedPlayer, 2), "utf-8");
|
|
402
402
|
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Player state saved: ${guildId}`);
|
|
403
403
|
}
|
|
404
404
|
catch (error) {
|
|
@@ -418,7 +418,7 @@ class Manager extends events_1.EventEmitter {
|
|
|
418
418
|
const redisKey = `${this.options.stateStorage.redisConfig.prefix?.endsWith(":")
|
|
419
419
|
? this.options.stateStorage.redisConfig.prefix
|
|
420
420
|
: this.options.stateStorage.redisConfig.prefix ?? "magmastream:"}playerstore:${guildId}`;
|
|
421
|
-
await this.redis.set(redisKey,
|
|
421
|
+
await this.redis.set(redisKey, Utils_1.JSONUtils.safe(serializedPlayer, 2));
|
|
422
422
|
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Player state saved to Redis: ${guildId}`);
|
|
423
423
|
}
|
|
424
424
|
catch (error) {
|
|
@@ -488,7 +488,7 @@ class Manager extends events_1.EventEmitter {
|
|
|
488
488
|
volume: lavaPlayer.volume || state.options.volume,
|
|
489
489
|
nodeIdentifier: nodeId,
|
|
490
490
|
};
|
|
491
|
-
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Recreating player: ${state.guildId} from saved file: ${
|
|
491
|
+
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Recreating player: ${state.guildId} from saved file: ${Utils_1.JSONUtils.safe(state.options, 2)}`);
|
|
492
492
|
const player = this.create(playerOptions);
|
|
493
493
|
await player.node.rest.updatePlayer({
|
|
494
494
|
guildId: state.options.guildId,
|
package/dist/structures/Node.js
CHANGED
|
@@ -128,7 +128,7 @@ class Node {
|
|
|
128
128
|
createSessionIdsFile() {
|
|
129
129
|
if (!fs_1.default.existsSync(this.sessionIdsFilePath)) {
|
|
130
130
|
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Creating sessionId file at: ${this.sessionIdsFilePath}`);
|
|
131
|
-
fs_1.default.writeFileSync(this.sessionIdsFilePath,
|
|
131
|
+
fs_1.default.writeFileSync(this.sessionIdsFilePath, Utils_1.JSONUtils.safe({}), "utf-8");
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
134
|
/**
|
|
@@ -178,7 +178,7 @@ class Node {
|
|
|
178
178
|
}
|
|
179
179
|
else {
|
|
180
180
|
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] No sessionIds found in Redis — creating new key.`);
|
|
181
|
-
await this.manager.redis.set(key,
|
|
181
|
+
await this.manager.redis.set(key, Utils_1.JSONUtils.safe({}));
|
|
182
182
|
this.sessionIdsMap = new Map();
|
|
183
183
|
}
|
|
184
184
|
break;
|
|
@@ -219,7 +219,7 @@ class Node {
|
|
|
219
219
|
}
|
|
220
220
|
fileData[compositeKey] = this.sessionId;
|
|
221
221
|
const tmpPath = `${filePath}.tmp`;
|
|
222
|
-
fs_1.default.writeFileSync(tmpPath,
|
|
222
|
+
fs_1.default.writeFileSync(tmpPath, Utils_1.JSONUtils.safe(fileData, 2), "utf-8");
|
|
223
223
|
fs_1.default.renameSync(tmpPath, filePath);
|
|
224
224
|
this.sessionIdsMap = new Map(Object.entries(fileData));
|
|
225
225
|
updated = true;
|
|
@@ -259,7 +259,7 @@ class Node {
|
|
|
259
259
|
}
|
|
260
260
|
sessionIds[compositeKey] = this.sessionId;
|
|
261
261
|
this.sessionIdsMap = new Map(Object.entries(sessionIds));
|
|
262
|
-
await this.manager.redis.set(key,
|
|
262
|
+
await this.manager.redis.set(key, Utils_1.JSONUtils.safe(sessionIds));
|
|
263
263
|
break;
|
|
264
264
|
}
|
|
265
265
|
}
|
|
@@ -307,7 +307,7 @@ class Node {
|
|
|
307
307
|
identifier: this.options.identifier,
|
|
308
308
|
},
|
|
309
309
|
};
|
|
310
|
-
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Connecting ${
|
|
310
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Connecting ${Utils_1.JSONUtils.safe(debugInfo, 2)}`);
|
|
311
311
|
}
|
|
312
312
|
/**
|
|
313
313
|
* Destroys the node and cleans up associated resources.
|
|
@@ -329,7 +329,7 @@ class Node {
|
|
|
329
329
|
sessionId: this.sessionId,
|
|
330
330
|
playerCount: this.manager.players.filter((p) => p.node == this).size,
|
|
331
331
|
};
|
|
332
|
-
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Destroying node: ${
|
|
332
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Destroying node: ${Utils_1.JSONUtils.safe(debugInfo, 2)}`);
|
|
333
333
|
// Automove all players connected to that node
|
|
334
334
|
const players = this.manager.players.filter((p) => p.node == this);
|
|
335
335
|
if (players.size) {
|
|
@@ -368,7 +368,7 @@ class Node {
|
|
|
368
368
|
maxRetryAttempts: this.options.maxRetryAttempts,
|
|
369
369
|
retryDelayMs: this.options.retryDelayMs,
|
|
370
370
|
};
|
|
371
|
-
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Reconnecting node: ${
|
|
371
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Reconnecting node: ${Utils_1.JSONUtils.safe(debugInfo, 2)}`);
|
|
372
372
|
this.reconnectTimeout = setTimeout(async () => {
|
|
373
373
|
if (this.reconnectAttempts >= this.options.maxRetryAttempts) {
|
|
374
374
|
const error = new Error(`Unable to connect after ${this.options.maxRetryAttempts} attempts.`);
|
|
@@ -405,7 +405,7 @@ class Node {
|
|
|
405
405
|
identifier: this.options.identifier,
|
|
406
406
|
connected: this.connected,
|
|
407
407
|
};
|
|
408
|
-
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Connected node: ${
|
|
408
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Connected node: ${Utils_1.JSONUtils.safe(debugInfo, 2)}`);
|
|
409
409
|
this.manager.emit(Enums_1.ManagerEventTypes.NodeConnect, this);
|
|
410
410
|
const playersOnBackupNode = this.manager.players.filter((p) => p.node.options.isBackup);
|
|
411
411
|
if (playersOnBackupNode.size) {
|
|
@@ -432,7 +432,7 @@ class Node {
|
|
|
432
432
|
reason,
|
|
433
433
|
};
|
|
434
434
|
this.manager.emit(Enums_1.ManagerEventTypes.NodeDisconnect, this, { code, reason });
|
|
435
|
-
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Disconnected node: ${
|
|
435
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Disconnected node: ${Utils_1.JSONUtils.safe(debugInfo, 2)}`);
|
|
436
436
|
if (this.manager.useableNode) {
|
|
437
437
|
const players = this.manager.players.filter((p) => p.node.options.identifier == this.options.identifier);
|
|
438
438
|
if (players.size) {
|
|
@@ -464,7 +464,7 @@ class Node {
|
|
|
464
464
|
identifier: this.options.identifier,
|
|
465
465
|
error: error.message,
|
|
466
466
|
};
|
|
467
|
-
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Error on node: ${
|
|
467
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Error on node: ${Utils_1.JSONUtils.safe(debugInfo, 2)}`);
|
|
468
468
|
this.manager.emit(Enums_1.ManagerEventTypes.NodeError, this, error);
|
|
469
469
|
}
|
|
470
470
|
/**
|
|
@@ -504,11 +504,11 @@ class Node {
|
|
|
504
504
|
if (player && player.node.options.identifier !== this.options.identifier) {
|
|
505
505
|
return;
|
|
506
506
|
}
|
|
507
|
-
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Node message: ${
|
|
507
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Node message: ${Utils_1.JSONUtils.safe(payload, 2)}`);
|
|
508
508
|
await this.handleEvent(payload);
|
|
509
509
|
break;
|
|
510
510
|
case "ready":
|
|
511
|
-
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Node message: ${
|
|
511
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Node message: ${Utils_1.JSONUtils.safe(payload, 2)}`);
|
|
512
512
|
this.rest.setSessionId(payload.sessionId);
|
|
513
513
|
this.sessionId = payload.sessionId;
|
|
514
514
|
await this.updateSessionId();
|
|
@@ -934,7 +934,7 @@ class Node {
|
|
|
934
934
|
*/
|
|
935
935
|
socketClosed(player, payload) {
|
|
936
936
|
this.manager.emit(Enums_1.ManagerEventTypes.SocketClosed, player, payload);
|
|
937
|
-
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Websocket closed for player: ${player.guildId} with payload: ${
|
|
937
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Websocket closed for player: ${player.guildId} with payload: ${Utils_1.JSONUtils.safe(payload, 2)}`);
|
|
938
938
|
}
|
|
939
939
|
/**
|
|
940
940
|
* Emitted when the segments for a track are loaded.
|
|
@@ -1045,7 +1045,7 @@ class Node {
|
|
|
1045
1045
|
throw new RangeError("No Segments provided. Did you mean to use 'deleteSponsorBlock'?");
|
|
1046
1046
|
if (segments.some((v) => !validSponsorBlocks.includes(v.toLowerCase())))
|
|
1047
1047
|
throw new SyntaxError(`You provided a sponsorblock which isn't valid, valid ones are: ${validSponsorBlocks.map((v) => `'${v}'`).join(", ")}`);
|
|
1048
|
-
await this.rest.put(`/v4/sessions/${this.sessionId}/players/${player.guildId}/sponsorblock/categories`,
|
|
1048
|
+
await this.rest.put(`/v4/sessions/${this.sessionId}/players/${player.guildId}/sponsorblock/categories`, Utils_1.JSONUtils.safe(segments.map((v) => v.toLowerCase()), 2));
|
|
1049
1049
|
return;
|
|
1050
1050
|
}
|
|
1051
1051
|
/**
|
|
@@ -903,7 +903,7 @@ class Player {
|
|
|
903
903
|
queueSize: clonedPlayer.queue.size,
|
|
904
904
|
},
|
|
905
905
|
};
|
|
906
|
-
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[PLAYER] Transferred player to a new server: ${
|
|
906
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[PLAYER] Transferred player to a new server: ${Utils_1.JSONUtils.safe(debugInfo, 2)}.`);
|
|
907
907
|
// Return the cloned player
|
|
908
908
|
return clonedPlayer;
|
|
909
909
|
}
|
|
@@ -1032,7 +1032,7 @@ class Player {
|
|
|
1032
1032
|
const packet = JSON.parse(payload);
|
|
1033
1033
|
if (!packet?.op)
|
|
1034
1034
|
return;
|
|
1035
|
-
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `VoiceReceiver recieved a payload: ${
|
|
1035
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `VoiceReceiver recieved a payload: ${Utils_1.JSONUtils.safe(payload, 2)}`);
|
|
1036
1036
|
switch (packet.type) {
|
|
1037
1037
|
case "startSpeakingEvent": {
|
|
1038
1038
|
this.manager.emit(Enums_1.ManagerEventTypes.VoiceReceiverStartSpeaking, this, packet.data);
|
|
@@ -1047,7 +1047,7 @@ class Player {
|
|
|
1047
1047
|
break;
|
|
1048
1048
|
}
|
|
1049
1049
|
default: {
|
|
1050
|
-
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `VoiceReceiver recieved an unknown payload: ${
|
|
1050
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `VoiceReceiver recieved an unknown payload: ${Utils_1.JSONUtils.safe(payload, 2)}`);
|
|
1051
1051
|
break;
|
|
1052
1052
|
}
|
|
1053
1053
|
}
|
package/dist/structures/Rest.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.Rest = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const axios_1 = tslib_1.__importDefault(require("axios"));
|
|
6
6
|
const Enums_1 = require("./Enums");
|
|
7
|
+
const Utils_1 = require("./Utils");
|
|
7
8
|
/** Handles the requests sent to the Lavalink REST API. */
|
|
8
9
|
class Rest {
|
|
9
10
|
/** The Node that this Rest instance is connected to. */
|
|
@@ -44,7 +45,7 @@ class Rest {
|
|
|
44
45
|
// Send a GET request to the Lavalink Node to retrieve all the players.
|
|
45
46
|
const result = await this.get(`/v4/sessions/${this.sessionId}/players`);
|
|
46
47
|
// Log the result of the request.
|
|
47
|
-
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[REST] Getting all players on node: ${this.node.options.identifier} : ${
|
|
48
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[REST] Getting all players on node: ${this.node.options.identifier} : ${Utils_1.JSONUtils.safe(result, 2)}`);
|
|
48
49
|
// Return the result of the request.
|
|
49
50
|
return result;
|
|
50
51
|
}
|
|
@@ -55,7 +56,7 @@ class Rest {
|
|
|
55
56
|
*/
|
|
56
57
|
async updatePlayer(options) {
|
|
57
58
|
// Log the request.
|
|
58
|
-
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[REST] Updating player: ${options.guildId}: ${
|
|
59
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[REST] Updating player: ${options.guildId}: ${Utils_1.JSONUtils.safe(options, 2)}`);
|
|
59
60
|
// Send the PATCH request.
|
|
60
61
|
return await this.patch(`/v4/sessions/${this.sessionId}/players/${options.guildId}?noReplace=false`, options.data);
|
|
61
62
|
}
|
|
@@ -92,7 +93,7 @@ class Rest {
|
|
|
92
93
|
* @returns {Promise<unknown>} The response data of the request.
|
|
93
94
|
*/
|
|
94
95
|
async request(method, endpoint, body) {
|
|
95
|
-
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[REST] ${method} api call for endpoint: ${endpoint} with data: ${
|
|
96
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[REST] ${method} api call for endpoint: ${endpoint} with data: ${Utils_1.JSONUtils.safe(body, 2)}`);
|
|
96
97
|
const config = {
|
|
97
98
|
method,
|
|
98
99
|
url: this.url + endpoint,
|
package/dist/structures/Utils.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Structure = exports.PlayerUtils = exports.AutoPlayUtils = exports.TrackUtils = void 0;
|
|
3
|
+
exports.JSONUtils = exports.Structure = exports.PlayerUtils = exports.AutoPlayUtils = exports.TrackUtils = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
6
6
|
const axios_1 = tslib_1.__importDefault(require("axios"));
|
|
7
7
|
const jsdom_1 = require("jsdom");
|
|
8
8
|
const Enums_1 = require("./Enums");
|
|
9
9
|
const path_1 = tslib_1.__importDefault(require("path"));
|
|
10
|
+
const safe_stable_stringify_1 = tslib_1.__importDefault(require("safe-stable-stringify"));
|
|
10
11
|
// import playwright from "playwright";
|
|
11
12
|
/** @hidden */
|
|
12
13
|
const SIZES = ["0", "1", "2", "3", "default", "mqdefault", "hqdefault", "maxresdefault"];
|
|
@@ -601,61 +602,52 @@ class PlayerUtils {
|
|
|
601
602
|
* @returns The serialized Player instance
|
|
602
603
|
*/
|
|
603
604
|
static async serializePlayer(player) {
|
|
604
|
-
const seen = new WeakSet();
|
|
605
|
-
// Fetch async queue data once before serializing
|
|
606
605
|
const current = await player.queue.getCurrent();
|
|
607
606
|
const tracks = Array.isArray(await player.queue.getTracks()) ? await player.queue.getTracks() : [];
|
|
608
607
|
const previous = Array.isArray(await player.queue.getPrevious()) ? await player.queue.getPrevious() : [];
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
const serialize = (obj) => {
|
|
615
|
-
if (obj && typeof obj === "object") {
|
|
616
|
-
if (seen.has(obj))
|
|
608
|
+
const seen = new WeakSet();
|
|
609
|
+
// The replacer function
|
|
610
|
+
const replacer = (key, value) => {
|
|
611
|
+
if (value && typeof value === "object") {
|
|
612
|
+
if (seen.has(value))
|
|
617
613
|
return;
|
|
618
|
-
seen.add(
|
|
614
|
+
seen.add(value);
|
|
619
615
|
}
|
|
620
|
-
|
|
621
|
-
};
|
|
622
|
-
return JSON.parse(JSON.stringify(player, (key, value) => {
|
|
623
|
-
if (key === "manager") {
|
|
616
|
+
if (key === "manager")
|
|
624
617
|
return null;
|
|
625
|
-
}
|
|
626
618
|
if (key === "filters") {
|
|
627
619
|
if (!value || typeof value !== "object")
|
|
628
620
|
return null;
|
|
621
|
+
const filters = value;
|
|
629
622
|
return {
|
|
630
|
-
distortion:
|
|
631
|
-
equalizer:
|
|
632
|
-
karaoke:
|
|
633
|
-
rotation:
|
|
634
|
-
timescale:
|
|
635
|
-
vibrato:
|
|
636
|
-
reverb:
|
|
637
|
-
volume:
|
|
638
|
-
bassBoostlevel:
|
|
639
|
-
filterStatus:
|
|
623
|
+
distortion: filters.distortion ?? null,
|
|
624
|
+
equalizer: filters.equalizer ?? [],
|
|
625
|
+
karaoke: filters.karaoke ?? null,
|
|
626
|
+
rotation: filters.rotation ?? null,
|
|
627
|
+
timescale: filters.timescale ?? null,
|
|
628
|
+
vibrato: filters.vibrato ?? null,
|
|
629
|
+
reverb: filters.reverb ?? null,
|
|
630
|
+
volume: filters.volume ?? 1.0,
|
|
631
|
+
bassBoostlevel: filters.bassBoostlevel ?? null,
|
|
632
|
+
filterStatus: filters.filtersStatus ? { ...filters.filtersStatus } : {},
|
|
640
633
|
};
|
|
641
634
|
}
|
|
642
635
|
if (key === "queue") {
|
|
643
|
-
return {
|
|
644
|
-
current,
|
|
645
|
-
tracks,
|
|
646
|
-
previous,
|
|
647
|
-
};
|
|
636
|
+
return { current, tracks, previous };
|
|
648
637
|
}
|
|
649
638
|
if (key === "data") {
|
|
650
|
-
const
|
|
639
|
+
const data = value;
|
|
640
|
+
const AutoplayUser = data?.Internal_AutoplayUser;
|
|
651
641
|
const serializedUser = AutoplayUser ? { id: AutoplayUser.id, username: AutoplayUser.username } : null;
|
|
652
642
|
return {
|
|
653
643
|
clientUser: serializedUser,
|
|
654
|
-
autoplayTries:
|
|
644
|
+
autoplayTries: data?.autoplayTries ?? null,
|
|
655
645
|
};
|
|
656
646
|
}
|
|
657
|
-
return
|
|
658
|
-
}
|
|
647
|
+
return value;
|
|
648
|
+
};
|
|
649
|
+
const jsonString = (0, safe_stable_stringify_1.default)(player, replacer, 2);
|
|
650
|
+
return JSON.parse(jsonString);
|
|
659
651
|
}
|
|
660
652
|
/**
|
|
661
653
|
* Gets the base directory for player data.
|
|
@@ -721,6 +713,12 @@ class Structure {
|
|
|
721
713
|
}
|
|
722
714
|
}
|
|
723
715
|
exports.Structure = Structure;
|
|
716
|
+
class JSONUtils {
|
|
717
|
+
static safe(obj, space) {
|
|
718
|
+
return (0, safe_stable_stringify_1.default)(obj, null, space);
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
exports.JSONUtils = JSONUtils;
|
|
724
722
|
const structures = {
|
|
725
723
|
Player: require("./Player").Player,
|
|
726
724
|
Queue: require("../statestorage/MemoryQueue").MemoryQueue,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "magmastream",
|
|
3
|
-
"version": "2.9.1-dev.
|
|
3
|
+
"version": "2.9.1-dev.4",
|
|
4
4
|
"description": "A user-friendly Lavalink client designed for NodeJS.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"ioredis": "^5.6.1",
|
|
36
36
|
"jsdom": "^26.1.0",
|
|
37
37
|
"lodash": "^4.17.21",
|
|
38
|
+
"safe-stable-stringify": "^2.5.0",
|
|
38
39
|
"tslib": "^2.8.1",
|
|
39
40
|
"ws": "^8.18.3"
|
|
40
41
|
},
|