diff --git a/src/Player.js b/src/Player.js index 6094a79..41b9abf 100644 --- a/src/Player.js +++ b/src/Player.js @@ -508,6 +508,20 @@ class Player extends EventEmitter { return queue.repeatMode } + /** + * Set loop mode, to play the queue again and again + * @param {Discord.Message} message + */ + async setLoopMode (message, enabled) { + // Get guild queue + const queue = this.queues.get(message.guild.id) + if (!queue) return this.emit('error', 'NotPlaying', message) + // Enable/Disable loop mode + queue.loopMode = enabled + // Return the repeat mode + return queue.loopMode + } + /** * Shuffle the queue of the server. * @param {Discord.Message} message @@ -697,7 +711,10 @@ class Player extends EventEmitter { return this.emit('queueEnd', queue.firstMessage, queue) } // if the track needs to be the next one - if (!queue.repeatMode && !firstPlay) queue.tracks.shift() + if (!queue.repeatMode && !firstPlay) { + const oldTrack = queue.tracks.shift() + if (queue.loopMode) queue.tracks.push(oldTrack) // add the track at the end of the queue + } const track = queue.playing // Reset lastSkipped state queue.lastSkipped = false diff --git a/src/Queue.js b/src/Queue.js index 10136cb..c707166 100644 --- a/src/Queue.js +++ b/src/Queue.js @@ -60,6 +60,11 @@ class Queue extends EventEmitter { * @type {boolean} */ this.repeatMode = false + /** + * Whether the loop mode is enabled. + * @type {boolean} + */ + this.loopMode = false /** * Filters status * @type {Filters} diff --git a/typings/index.d.ts b/typings/index.d.ts index 398dc9b..ce100f2 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -35,6 +35,7 @@ declare module 'discord-player' { public skip(message: Message): void; public nowPlaying(message: Message): Track; public setRepeatMode(message: Message): boolean; + public setLoopMode(message: Message, enabled: boolean): boolean public shuffle(message: Message): Queue; public remove(message: Message, trackOrPosition: Track|number): Track; public createProgressBar(message: Message, progressBarOptions: ProgressBarOptions): string; @@ -94,6 +95,7 @@ declare module 'discord-player' { public volume: number; public paused: boolean; public repeatMode: boolean; + public loopMode: boolean; public filters: FiltersStatuses; public firstMessage: Message; private additionalStreamTime: number;