magmastream 2.7.0 → 2.7.2

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
@@ -1261,7 +1261,14 @@ interface UnresolvedQuery {
1261
1261
  duration?: number;
1262
1262
  }
1263
1263
  type Sizes = "0" | "1" | "2" | "3" | "default" | "mqdefault" | "hqdefault" | "maxresdefault";
1264
- type LoadType = "track" | "playlist" | "search" | "empty" | "error";
1264
+ declare enum LoadTypes {
1265
+ Track = "track",
1266
+ Playlist = "playlist",
1267
+ Search = "search",
1268
+ Empty = "empty",
1269
+ Error = "error"
1270
+ }
1271
+ type LoadType = keyof typeof LoadTypes;
1265
1272
  type State = "CONNECTED" | "CONNECTING" | "DISCONNECTED" | "DISCONNECTING" | "DESTROYING";
1266
1273
  type SponsorBlockSegmentEvents = SponsorBlockSegmentSkipped | SponsorBlockSegmentsLoaded | SponsorBlockChapterStarted | SponsorBlockChaptersLoaded;
1267
1274
  type SponsorBlockSegmentEventType = "SegmentSkipped" | "SegmentsLoaded" | "ChapterStarted" | "ChaptersLoaded";
@@ -1672,16 +1679,16 @@ declare enum SearchPlatform {
1672
1679
  Bandcamp = "bcsearch"
1673
1680
  }
1674
1681
  declare enum PlayerStateEventTypes {
1675
- AUTOPLAY_CHANGE = "playerAutoplay",
1676
- CONNECTION_CHANGE = "playerConnection",
1677
- REPEAT_CHANGE = "playerRepeat",
1678
- PAUSE_CHANGE = "playerPause",
1679
- PLAYER_CREATE = "playerCreate",
1680
- PLAYER_DESTROY = "playerDestroy",
1681
- QUEUE_CHANGE = "queueChange",
1682
- TRACK_CHANGE = "trackChange",
1683
- VOLUME_CHANGE = "volumeChange",
1684
- CHANNEL_CHANGE = "channelChange"
1682
+ AutoPlayChange = "playerAutoplay",
1683
+ ConnectionChange = "playerConnection",
1684
+ RepeatChange = "playerRepeat",
1685
+ PauseChange = "playerPause",
1686
+ QueueChange = "queueChange",
1687
+ TrackChange = "trackChange",
1688
+ VolumeChange = "volumeChange",
1689
+ ChannelChange = "channelChange",
1690
+ PlayerCreate = "playerCreate",
1691
+ PlayerDestroy = "playerDestroy"
1685
1692
  }
1686
1693
  interface PlayerStateUpdateEvent {
1687
1694
  changeType: PlayerStateEventTypes;
@@ -1731,12 +1738,12 @@ interface SearchQuery {
1731
1738
  query: string;
1732
1739
  }
1733
1740
  interface LavalinkResponse {
1734
- loadType: LoadType;
1741
+ loadType: LoadTypes;
1735
1742
  data: TrackData[] | PlaylistRawData;
1736
1743
  }
1737
1744
  interface SearchResult {
1738
1745
  /** The load type of the result. */
1739
- loadType: LoadType;
1746
+ loadType: LoadTypes;
1740
1747
  /** The array of tracks from the result. */
1741
1748
  tracks: Track[];
1742
1749
  /** The playlist info if the load type is 'playlist'. */
@@ -1776,33 +1783,61 @@ interface PlaylistData {
1776
1783
  /** The songs of the playlist. */
1777
1784
  tracks: Track[];
1778
1785
  }
1786
+ declare enum ManagerEventTypes {
1787
+ Debug = "debug",
1788
+ NodeCreate = "nodeCreate",
1789
+ NodeDestroy = "nodeDestroy",
1790
+ NodeConnect = "nodeConnect",
1791
+ NodeReconnect = "nodeReconnect",
1792
+ NodeDisconnect = "nodeDisconnect",
1793
+ NodeError = "nodeError",
1794
+ NodeRaw = "nodeRaw",
1795
+ PlayerCreate = "playerCreate",
1796
+ PlayerDestroy = "playerDestroy",
1797
+ PlayerStateUpdate = "playerStateUpdate",
1798
+ PlayerMove = "playerMove",
1799
+ PlayerDisconnect = "playerDisconnect",
1800
+ QueueEnd = "queueEnd",
1801
+ SocketClosed = "socketClosed",
1802
+ TrackStart = "trackStart",
1803
+ TrackEnd = "trackEnd",
1804
+ TrackEndReason = "trackEndReason",
1805
+ TrackEndReasonRaw = "trackEndReasonRaw",
1806
+ TrackEndReasonData = "trackEndReasonData",
1807
+ TrackStuck = "trackStuck",
1808
+ TrackError = "trackError",
1809
+ SegmentsLoaded = "segmentsLoaded",
1810
+ SegmentSkipped = "segmentSkipped",
1811
+ ChapterStarted = "chapterStarted",
1812
+ ChaptersLoaded = "chaptersLoaded"
1813
+ }
1779
1814
  interface ManagerEvents {
1780
- debug: [info: string];
1781
- nodeCreate: [node: Node];
1782
- nodeDestroy: [node: Node];
1783
- nodeConnect: [node: Node];
1784
- nodeReconnect: [node: Node];
1785
- nodeDisconnect: [node: Node, reason: {
1815
+ [ManagerEventTypes.Debug]: [info: string];
1816
+ [ManagerEventTypes.NodeCreate]: [node: Node];
1817
+ [ManagerEventTypes.NodeDestroy]: [node: Node];
1818
+ [ManagerEventTypes.NodeConnect]: [node: Node];
1819
+ [ManagerEventTypes.NodeReconnect]: [node: Node];
1820
+ [ManagerEventTypes.NodeDisconnect]: [node: Node, reason: {
1786
1821
  code?: number;
1787
1822
  reason?: string;
1788
1823
  }];
1789
- nodeError: [node: Node, error: Error];
1790
- nodeRaw: [payload: unknown];
1791
- playerCreate: [player: Player];
1792
- playerDestroy: [player: Player];
1793
- playerStateUpdate: [oldPlayer: Player, newPlayer: Player, changeType: PlayerStateUpdateEvent];
1794
- playerMove: [player: Player, initChannel: string, newChannel: string];
1795
- playerDisconnect: [player: Player, oldChannel: string];
1796
- queueEnd: [player: Player, track: Track | UnresolvedTrack, payload: TrackEndEvent];
1797
- socketClosed: [player: Player, payload: WebSocketClosedEvent];
1798
- trackStart: [player: Player, track: Track, payload: TrackStartEvent];
1799
- trackEnd: [player: Player, track: Track, payload: TrackEndEvent];
1800
- trackStuck: [player: Player, track: Track, payload: TrackStuckEvent];
1801
- trackError: [player: Player, track: Track | UnresolvedTrack, payload: TrackExceptionEvent];
1802
- segmentsLoaded: [player: Player, track: Track | UnresolvedTrack, payload: SponsorBlockSegmentsLoaded];
1803
- segmentSkipped: [player: Player, track: Track | UnresolvedTrack, payload: SponsorBlockSegmentSkipped];
1804
- chapterStarted: [player: Player, track: Track | UnresolvedTrack, payload: SponsorBlockChapterStarted];
1805
- chaptersLoaded: [player: Player, track: Track | UnresolvedTrack, payload: SponsorBlockChaptersLoaded];
1824
+ [ManagerEventTypes.NodeError]: [node: Node, error: Error];
1825
+ [ManagerEventTypes.NodeRaw]: [payload: unknown];
1826
+ [ManagerEventTypes.PlayerCreate]: [player: Player];
1827
+ [ManagerEventTypes.PlayerDestroy]: [player: Player];
1828
+ [ManagerEventTypes.PlayerStateUpdate]: [oldPlayer: Player, newPlayer: Player, changeType: PlayerStateUpdateEvent];
1829
+ [ManagerEventTypes.PlayerMove]: [player: Player, initChannel: string, newChannel: string];
1830
+ [ManagerEventTypes.PlayerDisconnect]: [player: Player, oldChannel: string];
1831
+ [ManagerEventTypes.QueueEnd]: [player: Player, track: Track | UnresolvedTrack, payload: TrackEndEvent];
1832
+ [ManagerEventTypes.SocketClosed]: [player: Player, payload: WebSocketClosedEvent];
1833
+ [ManagerEventTypes.TrackStart]: [player: Player, track: Track, payload: TrackStartEvent];
1834
+ [ManagerEventTypes.TrackEnd]: [player: Player, track: Track, payload: TrackEndEvent];
1835
+ [ManagerEventTypes.TrackStuck]: [player: Player, track: Track, payload: TrackStuckEvent];
1836
+ [ManagerEventTypes.TrackError]: [player: Player, track: Track | UnresolvedTrack, payload: TrackExceptionEvent];
1837
+ [ManagerEventTypes.SegmentsLoaded]: [player: Player, track: Track | UnresolvedTrack, payload: SponsorBlockSegmentsLoaded];
1838
+ [ManagerEventTypes.SegmentSkipped]: [player: Player, track: Track | UnresolvedTrack, payload: SponsorBlockSegmentSkipped];
1839
+ [ManagerEventTypes.ChapterStarted]: [player: Player, track: Track | UnresolvedTrack, payload: SponsorBlockChapterStarted];
1840
+ [ManagerEventTypes.ChaptersLoaded]: [player: Player, track: Track | UnresolvedTrack, payload: SponsorBlockChaptersLoaded];
1806
1841
  }
1807
1842
 
1808
- export { type CPUStats, type EqualizerBand, type Exception, type Extendable, type FrameStats, type LavalinkInfo, type LavalinkResponse, type LoadType, Manager, type ManagerEvents, type ManagerOptions, type MemoryStats, Node, type NodeMessage, type NodeOptions, type NodeStats, type Payload, type PlayOptions, Player, type PlayerEvent, type PlayerEventType, type PlayerEvents, type PlayerOptions, PlayerStateEventTypes, type PlayerUpdate, type PlaylistData, type PlaylistInfoData, type PlaylistRawData, Plugin, Queue, SearchPlatform, type SearchQuery, type SearchResult, type Severity, type Sizes, type SponsorBlockChapterStarted, type SponsorBlockChaptersLoaded, type SponsorBlockSegment, type SponsorBlockSegmentEventType, type SponsorBlockSegmentEvents, type SponsorBlockSegmentSkipped, type SponsorBlockSegmentsLoaded, type State, Structure, type Track, type TrackData, type TrackDataInfo, type TrackEndEvent, type TrackEndReason, type TrackExceptionEvent, type TrackPluginInfo, type TrackSourceName, type TrackStartEvent, type TrackStuckEvent, TrackUtils, type UnresolvedQuery, type UnresolvedTrack, type UseNodeOption, UseNodeOptions, type VoicePacket, type VoiceServer, type VoiceState, type WebSocketClosedEvent, validSponsorBlocks };
1843
+ export { type CPUStats, type EqualizerBand, type Exception, type Extendable, type FrameStats, type LavalinkInfo, type LavalinkResponse, type LoadType, LoadTypes, Manager, ManagerEventTypes, type ManagerEvents, type ManagerOptions, type MemoryStats, Node, type NodeMessage, type NodeOptions, type NodeStats, type Payload, type PlayOptions, Player, type PlayerEvent, type PlayerEventType, type PlayerEvents, type PlayerOptions, PlayerStateEventTypes, type PlayerUpdate, type PlaylistData, type PlaylistInfoData, type PlaylistRawData, Plugin, Queue, SearchPlatform, type SearchQuery, type SearchResult, type Severity, type Sizes, type SponsorBlockChapterStarted, type SponsorBlockChaptersLoaded, type SponsorBlockSegment, type SponsorBlockSegmentEventType, type SponsorBlockSegmentEvents, type SponsorBlockSegmentSkipped, type SponsorBlockSegmentsLoaded, type State, Structure, type Track, type TrackData, type TrackDataInfo, type TrackEndEvent, type TrackEndReason, type TrackExceptionEvent, type TrackPluginInfo, type TrackSourceName, type TrackStartEvent, type TrackStuckEvent, TrackUtils, type UnresolvedQuery, type UnresolvedTrack, type UseNodeOption, UseNodeOptions, type VoicePacket, type VoiceServer, type VoiceState, type WebSocketClosedEvent, validSponsorBlocks };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PlayerStateEventTypes = exports.SearchPlatform = exports.UseNodeOptions = exports.Manager = void 0;
3
+ exports.ManagerEventTypes = exports.PlayerStateEventTypes = exports.SearchPlatform = exports.UseNodeOptions = exports.Manager = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  /* eslint-disable no-async-promise-executor */
6
6
  const Utils_1 = require("./Utils");
@@ -336,9 +336,9 @@ class Manager extends events_1.EventEmitter {
336
336
  // The events to listen for
337
337
  const events = [
338
338
  // The player state has been updated
339
- "playerStateUpdate",
339
+ ManagerEventTypes.PlayerStateUpdate,
340
340
  // The player has been destroyed
341
- "playerDestroy",
341
+ ManagerEventTypes.PlayerDestroy,
342
342
  ];
343
343
  // Register the events
344
344
  for (const event of events) {
@@ -500,19 +500,19 @@ class Manager extends events_1.EventEmitter {
500
500
  let searchData = [];
501
501
  let playlistData;
502
502
  switch (res.loadType) {
503
- case "search":
503
+ case Utils_1.LoadTypes.Search:
504
504
  searchData = res.data;
505
505
  break;
506
- case "track":
506
+ case Utils_1.LoadTypes.Track:
507
507
  searchData = [res.data];
508
508
  break;
509
- case "playlist":
509
+ case Utils_1.LoadTypes.Playlist:
510
510
  playlistData = res.data;
511
511
  break;
512
512
  }
513
513
  const tracks = searchData.map((track) => Utils_1.TrackUtils.build(track, requester));
514
514
  let playlist = null;
515
- if (res.loadType === "playlist") {
515
+ if (res.loadType === Utils_1.LoadTypes.Playlist) {
516
516
  playlist = {
517
517
  name: playlistData.info.name,
518
518
  playlistInfo: playlistData.pluginInfo,
@@ -536,7 +536,7 @@ class Manager extends events_1.EventEmitter {
536
536
  track.author = cleanAuthor;
537
537
  return track;
538
538
  };
539
- if (result.loadType === "playlist") {
539
+ if (result.loadType === Utils_1.LoadTypes.Playlist) {
540
540
  result.playlist.tracks = result.playlist.tracks.map(processTrack);
541
541
  }
542
542
  else {
@@ -642,26 +642,14 @@ class Manager extends events_1.EventEmitter {
642
642
  decodeTracks(tracks) {
643
643
  this.emit("debug", `[MANAGER] Decoding tracks: ${JSON.stringify(tracks)}`);
644
644
  return new Promise(async (resolve, reject) => {
645
- // Get the first available node for processing the decode request
646
645
  const node = this.nodes.first();
647
- if (!node) {
648
- // Reject the promise if no nodes are available
649
- return reject(new Error("No available nodes."));
650
- }
651
- try {
652
- // Send a POST request to the Lavalink API to decode tracks
653
- const res = await node.rest.post("/v4/decodetracks", JSON.stringify(tracks));
654
- // Check if a valid response is received
655
- if (!res) {
656
- return reject(new Error("No data returned from query."));
657
- }
658
- // Resolve the promise with the decoded track data
659
- resolve(res);
660
- }
661
- catch (err) {
662
- // Reject the promise if an error occurs during the API request
663
- reject(err);
646
+ if (!node)
647
+ throw new Error("No available nodes.");
648
+ const res = (await node.rest.post("/v4/decodetracks", JSON.stringify(tracks)).catch((err) => reject(err)));
649
+ if (!res) {
650
+ return reject(new Error("No data returned from query."));
664
651
  }
652
+ return resolve(res);
665
653
  });
666
654
  }
667
655
  /**
@@ -799,14 +787,43 @@ var SearchPlatform;
799
787
  })(SearchPlatform || (exports.SearchPlatform = SearchPlatform = {}));
800
788
  var PlayerStateEventTypes;
801
789
  (function (PlayerStateEventTypes) {
802
- PlayerStateEventTypes["AUTOPLAY_CHANGE"] = "playerAutoplay";
803
- PlayerStateEventTypes["CONNECTION_CHANGE"] = "playerConnection";
804
- PlayerStateEventTypes["REPEAT_CHANGE"] = "playerRepeat";
805
- PlayerStateEventTypes["PAUSE_CHANGE"] = "playerPause";
806
- PlayerStateEventTypes["PLAYER_CREATE"] = "playerCreate";
807
- PlayerStateEventTypes["PLAYER_DESTROY"] = "playerDestroy";
808
- PlayerStateEventTypes["QUEUE_CHANGE"] = "queueChange";
809
- PlayerStateEventTypes["TRACK_CHANGE"] = "trackChange";
810
- PlayerStateEventTypes["VOLUME_CHANGE"] = "volumeChange";
811
- PlayerStateEventTypes["CHANNEL_CHANGE"] = "channelChange";
790
+ PlayerStateEventTypes["AutoPlayChange"] = "playerAutoplay";
791
+ PlayerStateEventTypes["ConnectionChange"] = "playerConnection";
792
+ PlayerStateEventTypes["RepeatChange"] = "playerRepeat";
793
+ PlayerStateEventTypes["PauseChange"] = "playerPause";
794
+ PlayerStateEventTypes["QueueChange"] = "queueChange";
795
+ PlayerStateEventTypes["TrackChange"] = "trackChange";
796
+ PlayerStateEventTypes["VolumeChange"] = "volumeChange";
797
+ PlayerStateEventTypes["ChannelChange"] = "channelChange";
798
+ PlayerStateEventTypes["PlayerCreate"] = "playerCreate";
799
+ PlayerStateEventTypes["PlayerDestroy"] = "playerDestroy";
812
800
  })(PlayerStateEventTypes || (exports.PlayerStateEventTypes = PlayerStateEventTypes = {}));
801
+ var ManagerEventTypes;
802
+ (function (ManagerEventTypes) {
803
+ ManagerEventTypes["Debug"] = "debug";
804
+ ManagerEventTypes["NodeCreate"] = "nodeCreate";
805
+ ManagerEventTypes["NodeDestroy"] = "nodeDestroy";
806
+ ManagerEventTypes["NodeConnect"] = "nodeConnect";
807
+ ManagerEventTypes["NodeReconnect"] = "nodeReconnect";
808
+ ManagerEventTypes["NodeDisconnect"] = "nodeDisconnect";
809
+ ManagerEventTypes["NodeError"] = "nodeError";
810
+ ManagerEventTypes["NodeRaw"] = "nodeRaw";
811
+ ManagerEventTypes["PlayerCreate"] = "playerCreate";
812
+ ManagerEventTypes["PlayerDestroy"] = "playerDestroy";
813
+ ManagerEventTypes["PlayerStateUpdate"] = "playerStateUpdate";
814
+ ManagerEventTypes["PlayerMove"] = "playerMove";
815
+ ManagerEventTypes["PlayerDisconnect"] = "playerDisconnect";
816
+ ManagerEventTypes["QueueEnd"] = "queueEnd";
817
+ ManagerEventTypes["SocketClosed"] = "socketClosed";
818
+ ManagerEventTypes["TrackStart"] = "trackStart";
819
+ ManagerEventTypes["TrackEnd"] = "trackEnd";
820
+ ManagerEventTypes["TrackEndReason"] = "trackEndReason";
821
+ ManagerEventTypes["TrackEndReasonRaw"] = "trackEndReasonRaw";
822
+ ManagerEventTypes["TrackEndReasonData"] = "trackEndReasonData";
823
+ ManagerEventTypes["TrackStuck"] = "trackStuck";
824
+ ManagerEventTypes["TrackError"] = "trackError";
825
+ ManagerEventTypes["SegmentsLoaded"] = "segmentsLoaded";
826
+ ManagerEventTypes["SegmentSkipped"] = "segmentSkipped";
827
+ ManagerEventTypes["ChapterStarted"] = "chapterStarted";
828
+ ManagerEventTypes["ChaptersLoaded"] = "chaptersLoaded";
829
+ })(ManagerEventTypes || (exports.ManagerEventTypes = ManagerEventTypes = {}));
@@ -96,7 +96,7 @@ class Node {
96
96
  },
97
97
  };
98
98
  this.manager.nodes.set(this.options.identifier, this);
99
- this.manager.emit("nodeCreate", this);
99
+ this.manager.emit(Manager_1.ManagerEventTypes.NodeCreate, this);
100
100
  this.rest = new Rest_1.Rest(this, this.manager);
101
101
  this.createSessionIdsFile();
102
102
  this.loadSessionIds();
@@ -111,7 +111,7 @@ class Node {
111
111
  createSessionIdsFile() {
112
112
  // If the sessionIds.json file does not exist, create it
113
113
  if (!fs_1.default.existsSync(sessionIdsFilePath)) {
114
- this.manager.emit("debug", `[NODE] Creating sessionId file at: ${sessionIdsFilePath}`);
114
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[NODE] Creating sessionId file at: ${sessionIdsFilePath}`);
115
115
  // Create the file with an empty object as the content
116
116
  fs_1.default.writeFileSync(sessionIdsFilePath, JSON.stringify({}), "utf-8");
117
117
  }
@@ -124,7 +124,7 @@ class Node {
124
124
  // Check if the sessionIds.json file exists
125
125
  if (fs_1.default.existsSync(sessionIdsFilePath)) {
126
126
  // Emit a debug event indicating that session IDs are being loaded
127
- this.manager.emit("debug", `[NODE] Loading sessionIds from file: ${sessionIdsFilePath}`);
127
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[NODE] Loading sessionIds from file: ${sessionIdsFilePath}`);
128
128
  // Read the content of the sessionIds.json file as a string
129
129
  const sessionIdsData = fs_1.default.readFileSync(sessionIdsFilePath, "utf-8");
130
130
  // Parse the JSON string into an object and convert it into a Map
@@ -139,7 +139,7 @@ class Node {
139
139
  */
140
140
  updateSessionId() {
141
141
  // Emit a debug event indicating that the session IDs are being updated
142
- this.manager.emit("debug", `[NODE] Updating sessionIds to file: ${sessionIdsFilePath}`);
142
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[NODE] Updating sessionIds to file: ${sessionIdsFilePath}`);
143
143
  // Update the session IDs Map with the new session ID
144
144
  sessionIdsMap.set(this.options.identifier, this.sessionId);
145
145
  // Write the updated session IDs Map to the sessionIds.json file
@@ -185,7 +185,7 @@ class Node {
185
185
  identifier: this.options.identifier,
186
186
  },
187
187
  };
188
- this.manager.emit("debug", `[NODE] Connecting ${JSON.stringify(debugInfo)}`);
188
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[NODE] Connecting ${JSON.stringify(debugInfo)}`);
189
189
  }
190
190
  /**
191
191
  * Destroys the Node and all players connected with it.
@@ -210,7 +210,7 @@ class Node {
210
210
  sessionId: this.sessionId,
211
211
  playerCount: this.manager.players.filter((p) => p.node == this).size,
212
212
  };
213
- this.manager.emit("debug", `[NODE] Destroying node: ${JSON.stringify(debugInfo)}`);
213
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[NODE] Destroying node: ${JSON.stringify(debugInfo)}`);
214
214
  // Destroy all players connected to the node
215
215
  const players = this.manager.players.filter((p) => p.node == this);
216
216
  if (players.size)
@@ -223,7 +223,7 @@ class Node {
223
223
  this.reconnectAttempts = 1;
224
224
  clearTimeout(this.reconnectTimeout);
225
225
  // Emit a "nodeDestroy" event with the node as the argument
226
- this.manager.emit("nodeDestroy", this);
226
+ this.manager.emit(Manager_1.ManagerEventTypes.NodeDestroy, this);
227
227
  // Destroy the node from the manager
228
228
  this.manager.destroyNode(this.options.identifier);
229
229
  }
@@ -244,21 +244,21 @@ class Node {
244
244
  retryDelay: this.options.retryDelay,
245
245
  };
246
246
  // Emit a debug event indicating the node is attempting to reconnect
247
- this.manager.emit("debug", `[NODE] Reconnecting node: ${JSON.stringify(debugInfo)}`);
247
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[NODE] Reconnecting node: ${JSON.stringify(debugInfo)}`);
248
248
  // Schedule the reconnection attempt after the specified retry delay
249
249
  this.reconnectTimeout = setTimeout(() => {
250
250
  // Check if the maximum number of retry attempts has been reached
251
251
  if (this.reconnectAttempts >= this.options.retryAmount) {
252
252
  // Emit an error event and destroy the node if retries are exhausted
253
253
  const error = new Error(`Unable to connect after ${this.options.retryAmount} attempts.`);
254
- this.manager.emit("nodeError", this, error);
254
+ this.manager.emit(Manager_1.ManagerEventTypes.NodeError, this, error);
255
255
  return this.destroy();
256
256
  }
257
257
  // Remove all listeners from the current WebSocket and reset it
258
258
  this.socket?.removeAllListeners();
259
259
  this.socket = null;
260
260
  // Emit a nodeReconnect event and attempt to connect again
261
- this.manager.emit("nodeReconnect", this);
261
+ this.manager.emit(Manager_1.ManagerEventTypes.NodeReconnect, this);
262
262
  this.connect();
263
263
  // Increment the reconnect attempts counter
264
264
  this.reconnectAttempts++;
@@ -282,9 +282,9 @@ class Node {
282
282
  connected: this.connected,
283
283
  };
284
284
  // Emit a debug event indicating the node is connected
285
- this.manager.emit("debug", `[NODE] Connected node: ${JSON.stringify(debugInfo)}`);
285
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[NODE] Connected node: ${JSON.stringify(debugInfo)}`);
286
286
  // Emit a "nodeConnect" event with the node as the argument
287
- this.manager.emit("nodeConnect", this);
287
+ this.manager.emit(Manager_1.ManagerEventTypes.NodeConnect, this);
288
288
  }
289
289
  /**
290
290
  * Handles the "close" event emitted by the WebSocket connection.
@@ -305,9 +305,9 @@ class Node {
305
305
  reason,
306
306
  };
307
307
  // Emit a "nodeDisconnect" event with the node and the close event as arguments
308
- this.manager.emit("nodeDisconnect", this, { code, reason });
308
+ this.manager.emit(Manager_1.ManagerEventTypes.NodeDisconnect, this, { code, reason });
309
309
  // Emit a debug event indicating the node is disconnected
310
- this.manager.emit("debug", `[NODE] Disconnected node: ${JSON.stringify(debugInfo)}`);
310
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[NODE] Disconnected node: ${JSON.stringify(debugInfo)}`);
311
311
  // If the close event was not initiated by the user, attempt to reconnect
312
312
  if (code !== 1000 || reason !== "destroy")
313
313
  this.reconnect();
@@ -329,9 +329,9 @@ class Node {
329
329
  error: error.message,
330
330
  };
331
331
  // Emit a debug event indicating the error on the node
332
- this.manager.emit("debug", `[NODE] Error on node: ${JSON.stringify(debugInfo)}`);
332
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[NODE] Error on node: ${JSON.stringify(debugInfo)}`);
333
333
  // Emit a "nodeError" event with the node and the error as arguments
334
- this.manager.emit("nodeError", this, error);
334
+ this.manager.emit(Manager_1.ManagerEventTypes.NodeError, this, error);
335
335
  }
336
336
  /**
337
337
  * Handles an incoming message from the Lavalink node.
@@ -345,7 +345,7 @@ class Node {
345
345
  const payload = JSON.parse(d.toString());
346
346
  if (!payload.op)
347
347
  return;
348
- this.manager.emit("nodeRaw", payload);
348
+ this.manager.emit(Manager_1.ManagerEventTypes.NodeRaw, payload);
349
349
  let player;
350
350
  switch (payload.op) {
351
351
  case "stats":
@@ -358,11 +358,11 @@ class Node {
358
358
  player.position = payload.state.position || 0;
359
359
  break;
360
360
  case "event":
361
- this.manager.emit("debug", `[NODE] Node message: ${JSON.stringify(payload)}`);
361
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[NODE] Node message: ${JSON.stringify(payload)}`);
362
362
  this.handleEvent(payload);
363
363
  break;
364
364
  case "ready":
365
- this.manager.emit("debug", `[NODE] Node message: ${JSON.stringify(payload)}`);
365
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[NODE] Node message: ${JSON.stringify(payload)}`);
366
366
  this.rest.setSessionId(payload.sessionId);
367
367
  this.sessionId = payload.sessionId;
368
368
  this.updateSessionId(); // Call to update session ID
@@ -380,7 +380,7 @@ class Node {
380
380
  }
381
381
  break;
382
382
  default:
383
- this.manager.emit("nodeError", this, new Error(`Unexpected op "${payload.op}" with data: ${payload.message}`));
383
+ this.manager.emit(Manager_1.ManagerEventTypes.NodeError, this, new Error(`Unexpected op "${payload.op}" with data: ${payload.message}`));
384
384
  return;
385
385
  }
386
386
  }
@@ -432,7 +432,7 @@ class Node {
432
432
  break;
433
433
  default:
434
434
  error = new Error(`Node#event unknown event '${type}'.`);
435
- this.manager.emit("nodeError", this, error);
435
+ this.manager.emit(Manager_1.ManagerEventTypes.NodeError, this, error);
436
436
  break;
437
437
  }
438
438
  }
@@ -447,9 +447,9 @@ class Node {
447
447
  const oldPlayer = player;
448
448
  player.playing = true;
449
449
  player.paused = false;
450
- this.manager.emit("trackStart", player, track, payload);
451
- this.manager.emit("playerStateUpdate", oldPlayer, player, {
452
- changeType: Manager_1.PlayerStateEventTypes.TRACK_CHANGE,
450
+ this.manager.emit(Manager_1.ManagerEventTypes.TrackStart, player, track, payload);
451
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, player, {
452
+ changeType: Manager_1.PlayerStateEventTypes.TrackChange,
453
453
  details: {
454
454
  changeType: "start",
455
455
  track: track,
@@ -477,7 +477,7 @@ class Node {
477
477
  }
478
478
  // If the track was forcibly replaced
479
479
  else if (reason === "replaced") {
480
- this.manager.emit("trackEnd", player, track, payload);
480
+ this.manager.emit(Manager_1.ManagerEventTypes.TrackEnd, player, track, payload);
481
481
  player.queue.previous = player.queue.current;
482
482
  }
483
483
  // If the track ended and it's set to repeat (track or queue)
@@ -492,8 +492,8 @@ class Node {
492
492
  else {
493
493
  await this.queueEnd(player, track, payload);
494
494
  }
495
- this.manager.emit("playerStateUpdate", oldPlayer, player, {
496
- changeType: Manager_1.PlayerStateEventTypes.TRACK_CHANGE,
495
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, player, {
496
+ changeType: Manager_1.PlayerStateEventTypes.TrackChange,
497
497
  details: {
498
498
  changeType: "end",
499
499
  track: track,
@@ -552,7 +552,7 @@ class Node {
552
552
  searchURI = `https://www.youtube.com/watch?v=${videoID}&list=RD${videoID}&index=${randomIndex}`;
553
553
  } while (track.uri.includes(searchURI));
554
554
  const res = await player.search(searchURI, player.get("Internal_BotUser"));
555
- if (res.loadType === "empty" || res.loadType === "error")
555
+ if (res.loadType === Utils_1.LoadTypes.Empty || res.loadType === Utils_1.LoadTypes.Error)
556
556
  return false;
557
557
  const foundTrack = res.tracks.find((t) => t.uri !== track.uri && t.author !== track.author && t.title !== track.title);
558
558
  if (!foundTrack)
@@ -582,7 +582,7 @@ class Node {
582
582
  return false;
583
583
  const randomTrack = response.data.toptracks.track[Math.floor(Math.random() * response.data.toptracks.track.length)];
584
584
  const res = await player.search({ query: `${randomTrack.artist.name} - ${randomTrack.name}`, source: selectedSource }, player.get("Internal_BotUser"));
585
- if (res.loadType === "empty" || res.loadType === "error")
585
+ if (res.loadType === Utils_1.LoadTypes.Empty || res.loadType === Utils_1.LoadTypes.Error)
586
586
  return false;
587
587
  const foundTrack = res.tracks.find((t) => t.uri !== track.uri);
588
588
  if (!foundTrack)
@@ -600,7 +600,13 @@ class Node {
600
600
  }
601
601
  }
602
602
  const url = `https://ws.audioscrobbler.com/2.0/?method=track.getSimilar&artist=${artist}&track=${title}&limit=10&autocorrect=1&api_key=${apiKey}&format=json`;
603
- const response = await axios_1.default.get(url);
603
+ let response;
604
+ try {
605
+ response = await axios_1.default.get(url);
606
+ }
607
+ catch (error) {
608
+ return false;
609
+ }
604
610
  if (response.data.error || !response.data.similartracks?.track?.length) {
605
611
  const retryUrl = `https://ws.audioscrobbler.com/2.0/?method=artist.getTopTracks&artist=${artist}&autocorrect=1&api_key=${apiKey}&format=json`;
606
612
  const retryResponse = await axios_1.default.get(retryUrl);
@@ -608,7 +614,7 @@ class Node {
608
614
  return false;
609
615
  const randomTrack = retryResponse.data.toptracks.track[Math.floor(Math.random() * retryResponse.data.toptracks.track.length)];
610
616
  const res = await player.search({ query: `${randomTrack.artist.name} - ${randomTrack.name}`, source: selectedSource }, player.get("Internal_BotUser"));
611
- if (res.loadType === "empty" || res.loadType === "error")
617
+ if (res.loadType === Utils_1.LoadTypes.Empty || res.loadType === Utils_1.LoadTypes.Error)
612
618
  return false;
613
619
  const foundTrack = res.tracks.find((t) => t.uri !== track.uri);
614
620
  if (!foundTrack)
@@ -619,7 +625,7 @@ class Node {
619
625
  }
620
626
  const randomTrack = response.data.similartracks.track[Math.floor(Math.random() * response.data.similartracks.track.length)];
621
627
  const res = await player.search({ query: `${randomTrack.artist.name} - ${randomTrack.name}`, source: selectedSource }, player.get("Internal_BotUser"));
622
- if (res.loadType === "empty" || res.loadType === "error")
628
+ if (res.loadType === Utils_1.LoadTypes.Empty || res.loadType === Utils_1.LoadTypes.Error)
623
629
  return false;
624
630
  const foundTrack = res.tracks.find((t) => t.uri !== track.uri);
625
631
  if (!foundTrack)
@@ -636,7 +642,7 @@ class Node {
636
642
  this.queueEnd(player, track, payload);
637
643
  return;
638
644
  }
639
- this.manager.emit("trackEnd", player, track, payload);
645
+ this.manager.emit(Manager_1.ManagerEventTypes.TrackEnd, player, track, payload);
640
646
  if (this.manager.options.autoPlay)
641
647
  player.play();
642
648
  }
@@ -663,7 +669,7 @@ class Node {
663
669
  queue.previous = queue.current;
664
670
  queue.current = queue.shift();
665
671
  // Emit the track end event
666
- this.manager.emit("trackEnd", player, track, payload);
672
+ this.manager.emit(Manager_1.ManagerEventTypes.TrackEnd, player, track, payload);
667
673
  // If the track was stopped manually and there are no more tracks in the queue, end the queue
668
674
  if (payload.reason === "stopped" && !(queue.current = queue.shift())) {
669
675
  this.queueEnd(player, track, payload);
@@ -690,7 +696,7 @@ class Node {
690
696
  // Shift the queue to set the next track as current
691
697
  player.queue.current = player.queue.shift();
692
698
  // Emit the track end event
693
- this.manager.emit("trackEnd", player, track, payload);
699
+ this.manager.emit(Manager_1.ManagerEventTypes.TrackEnd, player, track, payload);
694
700
  // If autoplay is enabled, play the next track
695
701
  if (this.manager.options.autoPlay)
696
702
  player.play();
@@ -709,7 +715,7 @@ class Node {
709
715
  player.queue.current = null;
710
716
  if (!player.isAutoplay) {
711
717
  player.playing = false;
712
- this.manager.emit("queueEnd", player, track, payload);
718
+ this.manager.emit(Manager_1.ManagerEventTypes.QueueEnd, player, track, payload);
713
719
  return;
714
720
  }
715
721
  let attempts = 1;
@@ -723,7 +729,7 @@ class Node {
723
729
  // If all attempts fail, reset the player state and emit queueEnd
724
730
  player.queue.previous = null;
725
731
  player.playing = false;
726
- this.manager.emit("queueEnd", player, track, payload);
732
+ this.manager.emit(Manager_1.ManagerEventTypes.QueueEnd, player, track, payload);
727
733
  }
728
734
  /**
729
735
  * Handles the event when a track gets stuck during playback.
@@ -737,7 +743,7 @@ class Node {
737
743
  */
738
744
  trackStuck(player, track, payload) {
739
745
  player.stop();
740
- this.manager.emit("trackStuck", player, track, payload);
746
+ this.manager.emit(Manager_1.ManagerEventTypes.TrackStuck, player, track, payload);
741
747
  }
742
748
  /**
743
749
  * Handles the event when a track encounters an error during playback.
@@ -751,7 +757,7 @@ class Node {
751
757
  */
752
758
  trackError(player, track, payload) {
753
759
  player.stop();
754
- this.manager.emit("trackError", player, track, payload);
760
+ this.manager.emit(Manager_1.ManagerEventTypes.TrackError, player, track, payload);
755
761
  }
756
762
  /**
757
763
  * Emitted when the WebSocket connection for a player closes.
@@ -760,8 +766,8 @@ class Node {
760
766
  * @param {WebSocketClosedEvent} payload - The event payload containing additional data about the WebSocket close event.
761
767
  */
762
768
  socketClosed(player, payload) {
763
- this.manager.emit("socketClosed", player, payload);
764
- this.manager.emit("debug", `[NODE] Websocket closed for player: ${player.guild} with payload: ${JSON.stringify(payload)}`);
769
+ this.manager.emit(Manager_1.ManagerEventTypes.SocketClosed, player, payload);
770
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[NODE] Websocket closed for player: ${player.guild} with payload: ${JSON.stringify(payload)}`);
765
771
  }
766
772
  /**
767
773
  * Emitted when the segments for a track are loaded.
@@ -771,7 +777,7 @@ class Node {
771
777
  * @param {SponsorBlockSegmentsLoaded} payload - The event payload containing additional data about the segments loaded event.
772
778
  */
773
779
  sponsorBlockSegmentLoaded(player, track, payload) {
774
- return this.manager.emit("segmentsLoaded", player, track, payload);
780
+ return this.manager.emit(Manager_1.ManagerEventTypes.SegmentsLoaded, player, track, payload);
775
781
  }
776
782
  /**
777
783
  * Emitted when a segment of a track is skipped using the sponsorblock plugin.
@@ -781,7 +787,7 @@ class Node {
781
787
  * @param {SponsorBlockSegmentSkipped} payload - The event payload containing additional data about the segment skipped event.
782
788
  */
783
789
  sponsorBlockSegmentSkipped(player, track, payload) {
784
- return this.manager.emit("segmentSkipped", player, track, payload);
790
+ return this.manager.emit(Manager_1.ManagerEventTypes.SegmentSkipped, player, track, payload);
785
791
  }
786
792
  /**
787
793
  * Emitted when chapters for a track are loaded using the sponsorblock plugin.
@@ -791,7 +797,7 @@ class Node {
791
797
  * @param {SponsorBlockChaptersLoaded} payload - The event payload containing additional data about the chapters loaded event.
792
798
  */
793
799
  sponsorBlockChaptersLoaded(player, track, payload) {
794
- return this.manager.emit("chaptersLoaded", player, track, payload);
800
+ return this.manager.emit(Manager_1.ManagerEventTypes.ChaptersLoaded, player, track, payload);
795
801
  }
796
802
  /**
797
803
  * Emitted when a chapter of a track is started using the sponsorblock plugin.
@@ -801,7 +807,7 @@ class Node {
801
807
  * @param {SponsorBlockChapterStarted} payload - The event payload containing additional data about the chapter started event.
802
808
  */
803
809
  sponsorBlockChapterStarted(player, track, payload) {
804
- return this.manager.emit("chapterStarted", player, track, payload);
810
+ return this.manager.emit(Manager_1.ManagerEventTypes.ChapterStarted, player, track, payload);
805
811
  }
806
812
  /**
807
813
  * Fetches Lavalink node information.
@@ -868,7 +874,7 @@ class Node {
868
874
  const message = "Please do NOT delete the magmastream/ folder as it is used to store player data for autoresume etc.";
869
875
  if (!fs_1.default.existsSync(readmeFilePath)) {
870
876
  fs_1.default.writeFileSync(readmeFilePath, message, "utf-8");
871
- this.manager.emit("debug", `[NODE] Created README file at: ${readmeFilePath}`);
877
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[NODE] Created README file at: ${readmeFilePath}`);
872
878
  }
873
879
  }
874
880
  }
@@ -121,7 +121,7 @@ class Player {
121
121
  // Add the player to the manager's player collection.
122
122
  this.manager.players.set(options.guild, this);
123
123
  // Emit the playerCreate event.
124
- this.manager.emit("playerCreate", this);
124
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerCreate, this);
125
125
  // Set the initial volume.
126
126
  this.setVolume(options.volume ?? 100);
127
127
  // Initialize the filters.
@@ -158,8 +158,8 @@ class Player {
158
158
  // Set the player state to connected
159
159
  this.state = "CONNECTED";
160
160
  // Emit the player state update event
161
- this.manager.emit("playerStateUpdate", oldPlayer, this, {
162
- changeType: Manager_1.PlayerStateEventTypes.CONNECTION_CHANGE,
161
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this, {
162
+ changeType: Manager_1.PlayerStateEventTypes.ConnectionChange,
163
163
  details: {
164
164
  changeType: "connect",
165
165
  previousConnection: oldPlayer?.state === "CONNECTED",
@@ -174,9 +174,8 @@ class Player {
174
174
  * @throws {TypeError} If the player is not connected.
175
175
  */
176
176
  disconnect() {
177
- if (this.voiceChannel === null) {
178
- throw new TypeError("The player is not connected.");
179
- }
177
+ if (this.voiceChannel === null)
178
+ return this;
180
179
  this.state = "DISCONNECTING";
181
180
  const oldPlayer = this ? { ...this } : null;
182
181
  this.pause(true);
@@ -191,8 +190,8 @@ class Player {
191
190
  });
192
191
  this.voiceChannel = null;
193
192
  this.state = "DISCONNECTED";
194
- this.manager.emit("playerStateUpdate", oldPlayer, this, {
195
- changeType: Manager_1.PlayerStateEventTypes.CONNECTION_CHANGE,
193
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this, {
194
+ changeType: Manager_1.PlayerStateEventTypes.ConnectionChange,
196
195
  details: {
197
196
  changeType: "disconnect",
198
197
  previousConnection: oldPlayer.state === "CONNECTED",
@@ -210,18 +209,16 @@ class Player {
210
209
  * @emits {playerStateUpdate} - The old and new player states after the destruction.
211
210
  */
212
211
  destroy(disconnect = true) {
213
- if (typeof disconnect !== "boolean")
214
- throw new TypeError("Disconnect must be a boolean.");
215
212
  const oldPlayer = this ? { ...this } : null;
216
213
  this.state = "DESTROYING";
217
214
  if (disconnect) {
218
215
  this.disconnect();
219
216
  }
220
217
  this.node.rest.destroyPlayer(this.guild);
221
- this.manager.emit("playerDestroy", this);
218
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerDestroy, this);
222
219
  this.manager.players.delete(this.guild);
223
- this.manager.emit("playerStateUpdate", oldPlayer, this, {
224
- changeType: Manager_1.PlayerStateEventTypes.PLAYER_DESTROY,
220
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this, {
221
+ changeType: Manager_1.PlayerStateEventTypes.PlayerDestroy,
225
222
  });
226
223
  }
227
224
  /**
@@ -240,8 +237,8 @@ class Player {
240
237
  this.voiceChannel = channel;
241
238
  this.connect();
242
239
  // Emit a player state update event
243
- this.manager.emit("playerStateUpdate", oldPlayer, this, {
244
- changeType: Manager_1.PlayerStateEventTypes.CHANNEL_CHANGE,
240
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this, {
241
+ changeType: Manager_1.PlayerStateEventTypes.ChannelChange,
245
242
  details: {
246
243
  changeType: "voice",
247
244
  previousChannel: oldPlayer.voiceChannel || null,
@@ -269,8 +266,8 @@ class Player {
269
266
  // Update the text channel property
270
267
  this.textChannel = channel;
271
268
  // Emit a player state update event with channel change details
272
- this.manager.emit("playerStateUpdate", oldPlayer, this, {
273
- changeType: Manager_1.PlayerStateEventTypes.CHANNEL_CHANGE,
269
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this, {
270
+ changeType: Manager_1.PlayerStateEventTypes.ChannelChange,
274
271
  details: {
275
272
  changeType: "text",
276
273
  previousChannel: oldPlayer.textChannel || null,
@@ -311,7 +308,7 @@ class Player {
311
308
  this.queue.current = await Utils_1.TrackUtils.getClosestTrack(this.queue.current);
312
309
  }
313
310
  catch (error) {
314
- this.manager.emit("trackError", this, this.queue.current, error);
311
+ this.manager.emit(Manager_1.ManagerEventTypes.TrackError, this, this.queue.current, error);
315
312
  if (this.queue[0])
316
313
  return this.play(this.queue[0]);
317
314
  return;
@@ -352,8 +349,8 @@ class Player {
352
349
  this.isAutoplay = autoplayState;
353
350
  this.autoplayTries = tries;
354
351
  this.set("Internal_BotUser", botUser);
355
- this.manager.emit("playerStateUpdate", oldPlayer, this, {
356
- changeType: Manager_1.PlayerStateEventTypes.AUTOPLAY_CHANGE,
352
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this, {
353
+ changeType: Manager_1.PlayerStateEventTypes.AutoPlayChange,
357
354
  details: {
358
355
  previousAutoplay: oldPlayer.isAutoplay,
359
356
  currentAutoplay: this.isAutoplay,
@@ -421,10 +418,10 @@ class Player {
421
418
  }
422
419
  const searchURI = `https://www.youtube.com/watch?v=${videoID}&list=RD${videoID}`;
423
420
  const res = await this.manager.search(searchURI);
424
- if (res.loadType === "empty" || res.loadType === "error")
421
+ if (res.loadType === Utils_1.LoadTypes.Empty || res.loadType === Utils_1.LoadTypes.Error)
425
422
  return;
426
423
  let tracks = res.tracks;
427
- if (res.loadType === "playlist") {
424
+ if (res.loadType === Utils_1.LoadTypes.Playlist) {
428
425
  tracks = res.playlist.tracks;
429
426
  }
430
427
  const filteredTracks = tracks.filter((track) => track.uri !== `https://www.youtube.com/watch?v=${videoID}`);
@@ -449,8 +446,6 @@ class Player {
449
446
  setVolume(volume) {
450
447
  if (isNaN(volume))
451
448
  throw new TypeError("Volume must be a number.");
452
- if (volume < 0 || volume > 100)
453
- throw new RangeError("Volume must be between 0 and 100.");
454
449
  const oldPlayer = this ? { ...this } : null;
455
450
  this.node.rest.updatePlayer({
456
451
  guildId: this.options.guild,
@@ -459,8 +454,8 @@ class Player {
459
454
  },
460
455
  });
461
456
  this.volume = volume;
462
- this.manager.emit("playerStateUpdate", oldPlayer, this, {
463
- changeType: Manager_1.PlayerStateEventTypes.VOLUME_CHANGE,
457
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this, {
458
+ changeType: Manager_1.PlayerStateEventTypes.VolumeChange,
464
459
  details: { previousVolume: oldPlayer.volume || null, currentVolume: this.volume },
465
460
  });
466
461
  return this;
@@ -515,8 +510,8 @@ class Player {
515
510
  this.dynamicRepeat = false;
516
511
  }
517
512
  // Emit an event indicating the repeat mode has changed
518
- this.manager.emit("playerStateUpdate", oldPlayer, this, {
519
- changeType: Manager_1.PlayerStateEventTypes.REPEAT_CHANGE,
513
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this, {
514
+ changeType: Manager_1.PlayerStateEventTypes.RepeatChange,
520
515
  detail: {
521
516
  changeType: "track",
522
517
  previousRepeat: this.getRepeatState(oldPlayer),
@@ -549,8 +544,8 @@ class Player {
549
544
  this.dynamicRepeat = false;
550
545
  }
551
546
  // Emit the player state update event
552
- this.manager.emit("playerStateUpdate", oldPlayer, this, {
553
- changeType: Manager_1.PlayerStateEventTypes.REPEAT_CHANGE,
547
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this, {
548
+ changeType: Manager_1.PlayerStateEventTypes.RepeatChange,
554
549
  detail: {
555
550
  changeType: "queue",
556
551
  previousRepeat: this.getRepeatState(oldPlayer),
@@ -604,8 +599,8 @@ class Player {
604
599
  this.dynamicRepeat = false;
605
600
  }
606
601
  // Emit a player state update event
607
- this.manager.emit("playerStateUpdate", oldPlayer, this, {
608
- changeType: Manager_1.PlayerStateEventTypes.REPEAT_CHANGE,
602
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this, {
603
+ changeType: Manager_1.PlayerStateEventTypes.RepeatChange,
609
604
  detail: {
610
605
  changeType: "dynamic",
611
606
  previousRepeat: this.getRepeatState(oldPlayer),
@@ -664,8 +659,8 @@ class Player {
664
659
  encodedTrack: null,
665
660
  },
666
661
  });
667
- this.manager.emit("playerStateUpdate", oldPlayer, this, {
668
- changeType: Manager_1.PlayerStateEventTypes.QUEUE_CHANGE,
662
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this, {
663
+ changeType: Manager_1.PlayerStateEventTypes.QueueChange,
669
664
  details: {
670
665
  changeType: "remove",
671
666
  tracks: removedTracks,
@@ -698,8 +693,8 @@ class Player {
698
693
  },
699
694
  });
700
695
  // Emit an event indicating the pause state has changed.
701
- this.manager.emit("playerStateUpdate", oldPlayer, this, {
702
- changeType: Manager_1.PlayerStateEventTypes.PAUSE_CHANGE,
696
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this, {
697
+ changeType: Manager_1.PlayerStateEventTypes.PauseChange,
703
698
  details: {
704
699
  previousPause: oldPlayer.paused,
705
700
  currentPause: this.paused,
@@ -719,8 +714,8 @@ class Player {
719
714
  // Stop the current track to allow playing the previous track.
720
715
  this.stop();
721
716
  // Emit a player state update event indicating the track change to previous.
722
- this.manager.emit("playerStateUpdate", oldPlayer, this, {
723
- changeType: Manager_1.PlayerStateEventTypes.TRACK_CHANGE,
717
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this, {
718
+ changeType: Manager_1.PlayerStateEventTypes.TrackChange,
724
719
  details: {
725
720
  changeType: "previous",
726
721
  track: this.queue.previous,
@@ -758,8 +753,8 @@ class Player {
758
753
  },
759
754
  });
760
755
  // Emit an event to notify the manager of the track change.
761
- this.manager.emit("playerStateUpdate", oldPlayer, this, {
762
- changeType: Manager_1.PlayerStateEventTypes.TRACK_CHANGE,
756
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this, {
757
+ changeType: Manager_1.PlayerStateEventTypes.TrackChange,
763
758
  details: {
764
759
  changeType: "timeUpdate",
765
760
  previousTime: oldPlayer.position,
@@ -62,7 +62,7 @@ class Queue extends Array {
62
62
  // Get the track info as a string
63
63
  const trackInfo = Array.isArray(track) ? track.map((t) => JSON.stringify(t, null, 2)).join(", ") : JSON.stringify(track, null, 2);
64
64
  // Emit a debug message
65
- this.manager.emit("debug", `[QUEUE] Added ${Array.isArray(track) ? track.length : 1} track(s) to queue: ${trackInfo}`);
65
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[QUEUE] Added ${Array.isArray(track) ? track.length : 1} track(s) to queue: ${trackInfo}`);
66
66
  const oldPlayer = this.manager.players.get(this.guild) ? { ...this.manager.players.get(this.guild) } : null;
67
67
  // Validate the track
68
68
  if (!Utils_1.TrackUtils.validate(track)) {
@@ -111,8 +111,8 @@ class Queue extends Array {
111
111
  }
112
112
  }
113
113
  // Emit a player state update event with the added track(s)
114
- this.manager.emit("playerStateUpdate", oldPlayer, this.manager.players.get(this.guild), {
115
- changeType: Manager_1.PlayerStateEventTypes.QUEUE_CHANGE,
114
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this.manager.players.get(this.guild), {
115
+ changeType: Manager_1.PlayerStateEventTypes.QueueChange,
116
116
  details: {
117
117
  changeType: "add",
118
118
  tracks: Array.isArray(track) ? track : [track],
@@ -130,9 +130,9 @@ class Queue extends Array {
130
130
  throw new RangeError("Invalid range: start should be less than end and within queue length.");
131
131
  }
132
132
  const removedTracks = this.splice(startOrPosition, end - startOrPosition);
133
- this.manager.emit("debug", `[QUEUE] Removed ${removedTracks.length} track(s) from player: ${this.guild} from position ${startOrPosition} to ${end}.`);
134
- this.manager.emit("playerStateUpdate", oldPlayer, this.manager.players.get(this.guild), {
135
- changeType: Manager_1.PlayerStateEventTypes.QUEUE_CHANGE,
133
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[QUEUE] Removed ${removedTracks.length} track(s) from player: ${this.guild} from position ${startOrPosition} to ${end}.`);
134
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this.manager.players.get(this.guild), {
135
+ changeType: Manager_1.PlayerStateEventTypes.QueueChange,
136
136
  details: {
137
137
  changeType: "remove",
138
138
  tracks: removedTracks,
@@ -142,11 +142,11 @@ class Queue extends Array {
142
142
  }
143
143
  // Single item removal when no end specified
144
144
  const removedTrack = this.splice(startOrPosition, 1);
145
- this.manager.emit("debug", `[QUEUE] Removed 1 track from player: ${this.guild} from position ${startOrPosition}: ${JSON.stringify(removedTrack[0], null, 2)}`);
145
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[QUEUE] Removed 1 track from player: ${this.guild} from position ${startOrPosition}: ${JSON.stringify(removedTrack[0], null, 2)}`);
146
146
  // Ensure removedTrack is an array for consistency
147
147
  const tracksToEmit = removedTrack.length > 0 ? removedTrack : [];
148
- this.manager.emit("playerStateUpdate", oldPlayer, this.manager.players.get(this.guild), {
149
- changeType: Manager_1.PlayerStateEventTypes.QUEUE_CHANGE,
148
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this.manager.players.get(this.guild), {
149
+ changeType: Manager_1.PlayerStateEventTypes.QueueChange,
150
150
  details: {
151
151
  changeType: "remove",
152
152
  tracks: tracksToEmit,
@@ -164,15 +164,15 @@ class Queue extends Array {
164
164
  // Remove all items from the queue.
165
165
  this.splice(0);
166
166
  // Emit an event to update the player state indicating the queue has been cleared.
167
- this.manager.emit("playerStateUpdate", oldPlayer, this.manager.players.get(this.guild), {
168
- changeType: Manager_1.PlayerStateEventTypes.QUEUE_CHANGE,
167
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this.manager.players.get(this.guild), {
168
+ changeType: Manager_1.PlayerStateEventTypes.QueueChange,
169
169
  details: {
170
170
  changeType: "clear",
171
171
  tracks: [], // No tracks are left after clearing
172
172
  },
173
173
  });
174
174
  // Emit a debug message indicating the queue has been cleared for a specific guild.
175
- this.manager.emit("debug", `[QUEUE] Cleared the queue for: ${this.guild}`);
175
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[QUEUE] Cleared the queue for: ${this.guild}`);
176
176
  }
177
177
  /**
178
178
  * Shuffles the queue.
@@ -187,14 +187,14 @@ class Queue extends Array {
187
187
  [this[i], this[j]] = [this[j], this[i]];
188
188
  }
189
189
  // Emit an event to update the player state indicating the queue has been shuffled.
190
- this.manager.emit("playerStateUpdate", oldPlayer, this.manager.players.get(this.guild), {
191
- changeType: Manager_1.PlayerStateEventTypes.QUEUE_CHANGE,
190
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this.manager.players.get(this.guild), {
191
+ changeType: Manager_1.PlayerStateEventTypes.QueueChange,
192
192
  details: {
193
193
  changeType: "shuffle",
194
194
  },
195
195
  });
196
196
  // Emit a debug message indicating the queue has been shuffled for a specific guild.
197
- this.manager.emit("debug", `[QUEUE] Shuffled the queue for: ${this.guild}`);
197
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[QUEUE] Shuffled the queue for: ${this.guild}`);
198
198
  }
199
199
  /**
200
200
  * Shuffles the queue to play tracks requested by each user one block at a time.
@@ -227,14 +227,14 @@ class Queue extends Array {
227
227
  this.splice(0);
228
228
  this.add(shuffledQueue);
229
229
  // Emit an event to update the player state indicating the queue has been shuffled.
230
- this.manager.emit("playerStateUpdate", oldPlayer, this.manager.players.get(this.guild), {
231
- changeType: Manager_1.PlayerStateEventTypes.QUEUE_CHANGE,
230
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this.manager.players.get(this.guild), {
231
+ changeType: Manager_1.PlayerStateEventTypes.QueueChange,
232
232
  details: {
233
233
  changeType: "userBlock",
234
234
  },
235
235
  });
236
236
  // Emit a debug message indicating the queue has been shuffled for a specific guild.
237
- this.manager.emit("debug", `[QUEUE] userBlockShuffled the queue for: ${this.guild}`);
237
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[QUEUE] userBlockShuffled the queue for: ${this.guild}`);
238
238
  }
239
239
  /**
240
240
  * Shuffles the queue to play tracks requested by each user one by one.
@@ -275,14 +275,14 @@ class Queue extends Array {
275
275
  this.splice(0);
276
276
  this.add(shuffledQueue);
277
277
  // Emit an event to update the player state indicating the queue has been shuffled.
278
- this.manager.emit("playerStateUpdate", oldPlayer, this.manager.players.get(this.guild), {
279
- changeType: Manager_1.PlayerStateEventTypes.QUEUE_CHANGE,
278
+ this.manager.emit(Manager_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this.manager.players.get(this.guild), {
279
+ changeType: Manager_1.PlayerStateEventTypes.QueueChange,
280
280
  details: {
281
281
  changeType: "roundRobin",
282
282
  },
283
283
  });
284
284
  // Emit a debug message indicating the queue has been shuffled for a specific guild.
285
- this.manager.emit("debug", `[QUEUE] roundRobinShuffled the queue for: ${this.guild}`);
285
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[QUEUE] roundRobinShuffled the queue for: ${this.guild}`);
286
286
  }
287
287
  }
288
288
  exports.Queue = Queue;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Rest = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const axios_1 = tslib_1.__importDefault(require("axios"));
6
+ const Manager_1 = require("./Manager");
6
7
  /** Handles the requests sent to the Lavalink REST API. */
7
8
  class Rest {
8
9
  /** The Node that this Rest instance is connected to. */
@@ -40,7 +41,7 @@ class Rest {
40
41
  // Send a GET request to the Lavalink Node to retrieve all the players.
41
42
  const result = await this.get(`/v4/sessions/${this.sessionId}/players`);
42
43
  // Log the result of the request.
43
- this.manager.emit("debug", `[REST] Getting all players on node: ${this.node.options.identifier} : ${JSON.stringify(result)}`);
44
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[REST] Getting all players on node: ${this.node.options.identifier} : ${JSON.stringify(result)}`);
44
45
  // Return the result of the request.
45
46
  return result;
46
47
  }
@@ -51,7 +52,7 @@ class Rest {
51
52
  */
52
53
  async updatePlayer(options) {
53
54
  // Log the request.
54
- this.manager.emit("debug", `[REST] Updating player: ${options.guildId}: ${JSON.stringify(options)}`);
55
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[REST] Updating player: ${options.guildId}: ${JSON.stringify(options)}`);
55
56
  // Send the PATCH request.
56
57
  return await this.patch(`/v4/sessions/${this.sessionId}/players/${options.guildId}?noReplace=false`, options.data);
57
58
  }
@@ -62,7 +63,7 @@ class Rest {
62
63
  */
63
64
  async destroyPlayer(guildId) {
64
65
  // Log the request.
65
- this.manager.emit("debug", `[REST] Destroying player: ${guildId}`);
66
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[REST] Destroying player: ${guildId}`);
66
67
  // Send the DELETE request.
67
68
  return await this.delete(`/v4/sessions/${this.sessionId}/players/${guildId}`);
68
69
  }
@@ -76,7 +77,7 @@ class Rest {
76
77
  */
77
78
  async updateSession(resuming, timeout) {
78
79
  // Emit a debug event with information about the session being updated
79
- this.manager.emit("debug", `[REST] Updating session: ${this.sessionId}`);
80
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[REST] Updating session: ${this.sessionId}`);
80
81
  // Send a PATCH request to update the session with the provided resuming status and timeout
81
82
  return await this.patch(`/v4/sessions/${this.sessionId}`, { resuming, timeout });
82
83
  }
@@ -88,7 +89,7 @@ class Rest {
88
89
  * @returns {Promise<unknown>} The response data of the request.
89
90
  */
90
91
  async request(method, endpoint, body) {
91
- this.manager.emit("debug", `[REST] ${method} api call for endpoint: ${endpoint} with data: ${JSON.stringify(body)}`);
92
+ this.manager.emit(Manager_1.ManagerEventTypes.Debug, `[REST] ${method} api call for endpoint: ${endpoint} with data: ${JSON.stringify(body)}`);
92
93
  const config = {
93
94
  method,
94
95
  url: this.url + endpoint,
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Plugin = exports.Structure = exports.TrackUtils = void 0;
3
+ exports.LoadTypes = exports.Plugin = exports.Structure = exports.TrackUtils = void 0;
4
4
  /** @hidden */
5
5
  const TRACK_SYMBOL = Symbol("track"),
6
6
  /** @hidden */
@@ -263,3 +263,11 @@ const structures = {
263
263
  Queue: require("./Queue").Queue,
264
264
  Node: require("./Node").Node,
265
265
  };
266
+ var LoadTypes;
267
+ (function (LoadTypes) {
268
+ LoadTypes["Track"] = "track";
269
+ LoadTypes["Playlist"] = "playlist";
270
+ LoadTypes["Search"] = "search";
271
+ LoadTypes["Empty"] = "empty";
272
+ LoadTypes["Error"] = "error";
273
+ })(LoadTypes || (exports.LoadTypes = LoadTypes = {}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "magmastream",
3
- "version": "2.7.0",
3
+ "version": "2.7.2",
4
4
  "description": "A user-friendly Lavalink client designed for NodeJS.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",