distube 5.2.0 → 5.2.1

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.mts CHANGED
@@ -1016,7 +1016,13 @@ declare class Queue extends DisTubeBase {
1016
1016
  * @param time - Time in seconds
1017
1017
  * @returns The guild queue
1018
1018
  */
1019
- seek(time: number): Queue;
1019
+ seek(time: number): Promise<Queue>;
1020
+ /**
1021
+ * Internal implementation of addRelatedSong without task queue protection.
1022
+ * Used by methods that already hold the task queue lock.
1023
+ * @internal
1024
+ */
1025
+ _addRelatedSong(song?: Song): Promise<Song>;
1020
1026
  /**
1021
1027
  * Add a related song of the playing song to the queue
1022
1028
  * @param song - The song to get related songs from. Defaults to the current playing song.
@@ -1282,7 +1288,7 @@ declare class DisTube extends TypedEmitter<TypedDisTubeEvents> {
1282
1288
  * @returns Seeked queue
1283
1289
  * @deprecated Use `distube.getQueue(guild).seek(time)` instead. Will be removed in v6.0.
1284
1290
  */
1285
- seek(guild: GuildIdResolvable, time: number): Queue;
1291
+ seek(guild: GuildIdResolvable, time: number): Promise<Queue>;
1286
1292
  /**
1287
1293
  * Emit error event
1288
1294
  * @param error - error
package/dist/index.d.ts CHANGED
@@ -1016,7 +1016,13 @@ declare class Queue extends DisTubeBase {
1016
1016
  * @param time - Time in seconds
1017
1017
  * @returns The guild queue
1018
1018
  */
1019
- seek(time: number): Queue;
1019
+ seek(time: number): Promise<Queue>;
1020
+ /**
1021
+ * Internal implementation of addRelatedSong without task queue protection.
1022
+ * Used by methods that already hold the task queue lock.
1023
+ * @internal
1024
+ */
1025
+ _addRelatedSong(song?: Song): Promise<Song>;
1020
1026
  /**
1021
1027
  * Add a related song of the playing song to the queue
1022
1028
  * @param song - The song to get related songs from. Defaults to the current playing song.
@@ -1282,7 +1288,7 @@ declare class DisTube extends TypedEmitter<TypedDisTubeEvents> {
1282
1288
  * @returns Seeked queue
1283
1289
  * @deprecated Use `distube.getQueue(guild).seek(time)` instead. Will be removed in v6.0.
1284
1290
  */
1285
- seek(guild: GuildIdResolvable, time: number): Queue;
1291
+ seek(guild: GuildIdResolvable, time: number): Promise<Queue>;
1286
1292
  /**
1287
1293
  * Emit error event
1288
1294
  * @param error - error
package/dist/index.js CHANGED
@@ -91,7 +91,7 @@ __export(index_exports, {
91
91
  module.exports = __toCommonJS(index_exports);
92
92
 
93
93
  // src/constant.ts
94
- var version = "5.2.0";
94
+ var version = "5.2.1";
95
95
  var AUDIO_SAMPLE_RATE = 48e3;
96
96
  var AUDIO_CHANNELS = 2;
97
97
  var DEFAULT_VOLUME = 50;
@@ -1053,7 +1053,7 @@ var Queue = class extends DisTubeBase {
1053
1053
  if (position > 0) {
1054
1054
  if (position >= this.songs.length) {
1055
1055
  if (this.autoplay) {
1056
- await this.addRelatedSong();
1056
+ await this._addRelatedSong();
1057
1057
  } else {
1058
1058
  throw new DisTubeError("NO_UP_NEXT");
1059
1059
  }
@@ -1096,12 +1096,17 @@ var Queue = class extends DisTubeBase {
1096
1096
  * @param time - Time in seconds
1097
1097
  * @returns The guild queue
1098
1098
  */
1099
- seek(time) {
1100
- if (typeof time !== "number") throw new DisTubeError("INVALID_TYPE", "number", time, "time");
1101
- if (Number.isNaN(time) || time < 0) throw new DisTubeError("NUMBER_COMPARE", "time", "bigger or equal to", 0);
1102
- this._beginTime = time;
1103
- this.play(false);
1104
- return this;
1099
+ async seek(time) {
1100
+ await this._taskQueue.queuing();
1101
+ try {
1102
+ if (typeof time !== "number") throw new DisTubeError("INVALID_TYPE", "number", time, "time");
1103
+ if (Number.isNaN(time) || time < 0) throw new DisTubeError("NUMBER_COMPARE", "time", "bigger or equal to", 0);
1104
+ this._beginTime = time;
1105
+ await this.play(false);
1106
+ return this;
1107
+ } finally {
1108
+ this._taskQueue.resolve();
1109
+ }
1105
1110
  }
1106
1111
  async #getRelatedSong(current) {
1107
1112
  const plugin = await this.handler._getPluginFromSong(current);
@@ -1109,11 +1114,11 @@ var Queue = class extends DisTubeBase {
1109
1114
  return [];
1110
1115
  }
1111
1116
  /**
1112
- * Add a related song of the playing song to the queue
1113
- * @param song - The song to get related songs from. Defaults to the current playing song.
1114
- * @returns The added song
1117
+ * Internal implementation of addRelatedSong without task queue protection.
1118
+ * Used by methods that already hold the task queue lock.
1119
+ * @internal
1115
1120
  */
1116
- async addRelatedSong(song) {
1121
+ async _addRelatedSong(song) {
1117
1122
  const current = song ?? this.songs?.[0];
1118
1123
  if (!current) throw new DisTubeError("NO_PLAYING_SONG");
1119
1124
  const prevIds = this.previousSongs.map((p) => p.id);
@@ -1131,6 +1136,19 @@ var Queue = class extends DisTubeBase {
1131
1136
  this.addToQueue(nextSong);
1132
1137
  return nextSong;
1133
1138
  }
1139
+ /**
1140
+ * Add a related song of the playing song to the queue
1141
+ * @param song - The song to get related songs from. Defaults to the current playing song.
1142
+ * @returns The added song
1143
+ */
1144
+ async addRelatedSong(song) {
1145
+ await this._taskQueue.queuing();
1146
+ try {
1147
+ return await this._addRelatedSong(song);
1148
+ } finally {
1149
+ this._taskQueue.resolve();
1150
+ }
1151
+ }
1134
1152
  /**
1135
1153
  * Stop the guild stream and delete the queue
1136
1154
  */
@@ -2041,7 +2059,7 @@ var QueueManager = class extends GuildIdManager {
2041
2059
  if (queue.songs.length === 0 && queue.autoplay) {
2042
2060
  try {
2043
2061
  this.debug(`[QueueManager] Adding related song: ${queue.id}`);
2044
- await queue.addRelatedSong(song);
2062
+ await queue._addRelatedSong(song);
2045
2063
  } catch (e) {
2046
2064
  const errorMessage = e instanceof Error ? e.message : String(e);
2047
2065
  this.debug(`[${queue.id}] Add related song error: ${errorMessage}`);
@@ -2321,16 +2339,16 @@ var DisTube = class extends import_tiny_typed_emitter3.TypedEmitter {
2321
2339
  if (!resolved.songs.length) throw new DisTubeError("EMPTY_PLAYLIST");
2322
2340
  this.debug(`[${queue.id}] Adding playlist to queue: ${resolved.songs.length} songs`);
2323
2341
  queue.addToQueue(resolved.songs, position);
2324
- if (queue.playing || this.options.emitAddListWhenCreatingQueue) this.emit("addList" /* ADD_LIST */, queue, resolved);
2342
+ if (!queue.stopped || this.options.emitAddListWhenCreatingQueue) this.emit("addList" /* ADD_LIST */, queue, resolved);
2325
2343
  } else {
2326
2344
  if (!this.options.nsfw && resolved.ageRestricted && !isNsfwChannel(queue?.textChannel || textChannel)) {
2327
2345
  throw new DisTubeError("NON_NSFW");
2328
2346
  }
2329
2347
  this.debug(`[${queue.id}] Adding song to queue: ${resolved.name || resolved.url || resolved.id || resolved}`);
2330
2348
  queue.addToQueue(resolved, position);
2331
- if (queue.playing || this.options.emitAddSongWhenCreatingQueue) this.emit("addSong" /* ADD_SONG */, queue, resolved);
2349
+ if (!queue.stopped || this.options.emitAddSongWhenCreatingQueue) this.emit("addSong" /* ADD_SONG */, queue, resolved);
2332
2350
  }
2333
- if (!queue.playing) await queue.play();
2351
+ if (queue.stopped) await queue.play();
2334
2352
  else if (skip) await queue.skip();
2335
2353
  } catch (e) {
2336
2354
  if (!(e instanceof DisTubeError)) {