magmastream 2.9.3-dev.2 → 2.9.3-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 CHANGED
@@ -170,7 +170,9 @@ declare enum TrackPartial {
170
170
  /** The plugin info of the track */
171
171
  PluginInfo = "pluginInfo",
172
172
  /** The custom data of the track */
173
- CustomData = "customData"
173
+ CustomData = "customData",
174
+ /** Whether the track got autoplayed */
175
+ IsAutoPlay = "isAutoplay"
174
176
  }
175
177
  /**
176
178
  * Manager Event Types Enum
@@ -1189,6 +1191,8 @@ interface Track {
1189
1191
  pluginInfo: TrackPluginInfo;
1190
1192
  /** Add your own data to the track. */
1191
1193
  customData: Record<string, unknown>;
1194
+ /** If the track got added by autoplay. */
1195
+ readonly isAutoplay: boolean;
1192
1196
  }
1193
1197
  /**
1194
1198
  * Track Plugin Info
@@ -3471,9 +3475,10 @@ declare abstract class TrackUtils {
3471
3475
  * Builds a Track from the raw data from Lavalink and a optional requester.
3472
3476
  * @param data The raw data from Lavalink to build the Track from.
3473
3477
  * @param requester The user who requested the track, if any.
3478
+ * @param isAutoPlay Whether the track is autoplayed. Defaults to false.
3474
3479
  * @returns The built Track.
3475
3480
  */
3476
- static build<T = AnyUser>(data: TrackData, requester?: T): Track;
3481
+ static build<T = AnyUser>(data: TrackData, requester?: T, isAutoplay?: boolean): Track;
3477
3482
  /**
3478
3483
  * Validates a search result.
3479
3484
  * @param result The search result to validate.
@@ -56,8 +56,7 @@ class JsonQueue {
56
56
  this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[JSONQUEUE] Added ${tracks.length} track(s) to queue`);
57
57
  if (this.manager.players.has(this.guildId) && this.manager.players.get(this.guildId).isAutoplay) {
58
58
  if (!isArray) {
59
- const AutoplayUser = (await this.manager.players.get(this.guildId).get("Internal_AutoplayUser"));
60
- if (AutoplayUser && AutoplayUser.id === track.requester.id) {
59
+ if (track.isAutoplay) {
61
60
  this.manager.emit(Enums_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this.manager.players.get(this.guildId), {
62
61
  changeType: Enums_1.PlayerStateEventTypes.QueueChange,
63
62
  details: {
@@ -84,8 +84,7 @@ class MemoryQueue extends Array {
84
84
  }
85
85
  if (this.manager.players.has(this.guildId) && this.manager.players.get(this.guildId).isAutoplay) {
86
86
  if (!isArray) {
87
- const AutoplayUser = this.manager.players.get(this.guildId).get("Internal_AutoplayUser");
88
- if (AutoplayUser && AutoplayUser.id === track.requester.id) {
87
+ if (track.isAutoplay) {
89
88
  this.manager.emit(Enums_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this.manager.players.get(this.guildId), {
90
89
  changeType: Enums_1.PlayerStateEventTypes.QueueChange,
91
90
  details: {
@@ -81,8 +81,7 @@ class RedisQueue {
81
81
  // Autoplay logic
82
82
  if (this.manager.players.has(this.guildId) && this.manager.players.get(this.guildId).isAutoplay) {
83
83
  if (!Array.isArray(track)) {
84
- const AutoplayUser = (await this.manager.players.get(this.guildId).get("Internal_AutoplayUser"));
85
- if (AutoplayUser && AutoplayUser.id === track.requester.id) {
84
+ if (track.isAutoplay) {
86
85
  this.manager.emit(Enums_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, this.manager.players.get(this.guildId), {
87
86
  changeType: Enums_1.PlayerStateEventTypes.QueueChange,
88
87
  details: {
@@ -163,6 +163,8 @@ var TrackPartial;
163
163
  TrackPartial["PluginInfo"] = "pluginInfo";
164
164
  /** The custom data of the track */
165
165
  TrackPartial["CustomData"] = "customData";
166
+ /** Whether the track got autoplayed */
167
+ TrackPartial["IsAutoPlay"] = "isAutoplay";
166
168
  })(TrackPartial || (exports.TrackPartial = TrackPartial = {}));
167
169
  /**
168
170
  * Manager Event Types Enum
@@ -579,7 +579,7 @@ class Manager extends events_1.EventEmitter {
579
579
  if (lavaPlayer.track) {
580
580
  await player.queue.clear();
581
581
  if (currentTrack) {
582
- await player.queue.add(Utils_1.TrackUtils.build(lavaPlayer.track, currentTrack.requester));
582
+ await player.queue.add(Utils_1.TrackUtils.build(lavaPlayer.track, currentTrack.requester, currentTrack.isAutoplay));
583
583
  }
584
584
  const remainingQueue = queueTracks.filter((t) => t.uri !== lavaPlayer.track.info.uri);
585
585
  if (remainingQueue.length > 0) {
@@ -774,7 +774,7 @@ class Manager extends events_1.EventEmitter {
774
774
  if (lavaPlayer.track) {
775
775
  await player.queue.clear();
776
776
  if (currentTrack) {
777
- await player.queue.add(Utils_1.TrackUtils.build(lavaPlayer.track, currentTrack.requester));
777
+ await player.queue.add(Utils_1.TrackUtils.build(lavaPlayer.track, currentTrack.requester, currentTrack.isAutoplay));
778
778
  }
779
779
  const remainingQueue = queueTracks.filter((t) => t.uri !== lavaPlayer.track.info.uri);
780
780
  if (remainingQueue.length > 0) {
@@ -1107,6 +1107,7 @@ class Manager extends events_1.EventEmitter {
1107
1107
  }
1108
1108
  this.emit(Enums_1.ManagerEventTypes.PlayerDisconnect, player, player.voiceChannelId);
1109
1109
  player.voiceChannelId = null;
1110
+ player.state = Enums_1.StateTypes.Disconnected;
1110
1111
  player.voiceState = Object.assign({});
1111
1112
  if (player.options.pauseOnDisconnect) {
1112
1113
  await player.pause(true);
@@ -632,12 +632,7 @@ class Node {
632
632
  player.playing = true;
633
633
  player.paused = false;
634
634
  this.manager.emit(Enums_1.ManagerEventTypes.TrackStart, player, track, payload);
635
- const AutoplayUser = player.get("Internal_AutoplayUser");
636
- if (!track.requester || !track.requester.id) {
637
- console.log(track);
638
- console.warn(`[WARN] Track requester missing for guild ${player.guildId}`, track);
639
- }
640
- if (AutoplayUser && track.requester && AutoplayUser.id === track.requester.id) {
635
+ if (track.isAutoplay) {
641
636
  this.manager.emit(Enums_1.ManagerEventTypes.PlayerStateUpdate, oldPlayer, player, {
642
637
  changeType: Enums_1.PlayerStateEventTypes.TrackChange,
643
638
  details: {
@@ -260,6 +260,9 @@ class Player {
260
260
  */
261
261
  async destroy(disconnect = true) {
262
262
  this.state = Enums_1.StateTypes.Destroying;
263
+ await this.queue.clear();
264
+ await this.queue.clearPrevious();
265
+ await this.queue.setCurrent(null);
263
266
  if (disconnect) {
264
267
  await this.disconnect().catch((err) => {
265
268
  console.warn(`[Player#destroy] Failed to disconnect player ${this.guildId}:`, err);
@@ -268,9 +271,6 @@ class Player {
268
271
  await this.node.rest.destroyPlayer(this.guildId).catch((err) => {
269
272
  console.warn(`[Player#destroy] REST failed to destroy player ${this.guildId}:`, err);
270
273
  });
271
- await this.queue.clear();
272
- await this.queue.clearPrevious();
273
- await this.queue.setCurrent(null);
274
274
  this.manager.emit(Enums_1.ManagerEventTypes.PlayerDestroy, this);
275
275
  const deleted = this.manager.players.delete(this.guildId);
276
276
  if (this.manager.options.stateStorage.deleteInactivePlayers)
@@ -1005,6 +1005,7 @@ class Player {
1005
1005
  nowPlayingMessage: this.nowPlayingMessage,
1006
1006
  isAutoplay: this.isAutoplay,
1007
1007
  applyVolumeAsFilter: this.options.applyVolumeAsFilter,
1008
+ pauseOnDisconnect: this.options.pauseOnDisconnect,
1008
1009
  };
1009
1010
  // If force is true, destroy the existing player for the new guild
1010
1011
  if (force && newPlayer) {
@@ -1015,6 +1016,7 @@ class Player {
1015
1016
  newOptions.selfMute = newOptions.selfMute ?? oldPlayerProperties.selfMute;
1016
1017
  newOptions.volume = newOptions.volume ?? oldPlayerProperties.volume;
1017
1018
  newOptions.applyVolumeAsFilter = newOptions.applyVolumeAsFilter ?? oldPlayerProperties.applyVolumeAsFilter;
1019
+ newOptions.pauseOnDisconnect = newOptions.pauseOnDisconnect ?? oldPlayerProperties.pauseOnDisconnect;
1018
1020
  // Deep clone the current player
1019
1021
  const clonedPlayer = this.manager.create(newOptions);
1020
1022
  // Connect the cloned player to the new voice channel
@@ -85,9 +85,10 @@ class TrackUtils {
85
85
  * Builds a Track from the raw data from Lavalink and a optional requester.
86
86
  * @param data The raw data from Lavalink to build the Track from.
87
87
  * @param requester The user who requested the track, if any.
88
+ * @param isAutoPlay Whether the track is autoplayed. Defaults to false.
88
89
  * @returns The built Track.
89
90
  */
90
- static build(data, requester) {
91
+ static build(data, requester, isAutoplay = false) {
91
92
  if (typeof data === "undefined") {
92
93
  throw new MagmastreamError_1.MagmaStreamError({
93
94
  code: Enums_1.MagmaStreamErrorCode.UTILS_TRACK_BUILD_FAILED,
@@ -138,6 +139,7 @@ class TrackUtils {
138
139
  requester: requester,
139
140
  pluginInfo: data.pluginInfo,
140
141
  customData: {},
142
+ isAutoplay: isAutoplay,
141
143
  };
142
144
  track.displayThumbnail = track.displayThumbnail.bind(track);
143
145
  if (this.trackPartial) {
@@ -560,7 +562,7 @@ class AutoPlayUtils {
560
562
  context: { recommendedResult },
561
563
  });
562
564
  }
563
- return [TrackUtils.build(data, requester)];
565
+ return [TrackUtils.build(data, requester, true)];
564
566
  }
565
567
  case Enums_1.LoadTypes.Short:
566
568
  case Enums_1.LoadTypes.Search: {
@@ -572,7 +574,7 @@ class AutoPlayUtils {
572
574
  context: { recommendedResult },
573
575
  });
574
576
  }
575
- return data.map((d) => TrackUtils.build(d, requester));
577
+ return data.map((d) => TrackUtils.build(d, requester, true));
576
578
  }
577
579
  case Enums_1.LoadTypes.Album:
578
580
  case Enums_1.LoadTypes.Artist:
@@ -582,7 +584,7 @@ class AutoPlayUtils {
582
584
  case Enums_1.LoadTypes.Playlist: {
583
585
  const data = recommendedResult.data;
584
586
  if (this.isPlaylistRawData(data)) {
585
- return data.tracks.map((d) => TrackUtils.build(d, requester));
587
+ return data.tracks.map((d) => TrackUtils.build(d, requester, true));
586
588
  }
587
589
  throw new MagmastreamError_1.MagmaStreamError({
588
590
  code: Enums_1.MagmaStreamErrorCode.UTILS_AUTOPLAY_BUILD_FAILED,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "magmastream",
3
- "version": "2.9.3-dev.2",
3
+ "version": "2.9.3-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",