From d7261260a3eb6bbe8f5af50dda215ef7b501a8ab Mon Sep 17 00:00:00 2001 From: MintyFreshers Date: Thu, 18 Jul 2024 05:47:01 +0100 Subject: [PATCH] Added skip currently playing track option into the /play options. (#1046) Co-authored-by: Max Isom --- CHANGELOG.md | 3 +++ src/commands/favorites.ts | 6 +++++- src/commands/play.ts | 6 +++++- src/services/add-query-to-queue.ts | 14 ++++++++++++-- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0071efd..37e6e32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added +- A `skip` option to the `/play` command + ### Fixed - Fixed playback issue - Audioplayer not stopping properly diff --git a/src/commands/favorites.ts b/src/commands/favorites.ts index f00c96f..d635826 100644 --- a/src/commands/favorites.ts +++ b/src/commands/favorites.ts @@ -28,7 +28,10 @@ export default class implements Command { .setDescription('shuffle the input if you\'re adding multiple tracks')) .addBooleanOption(option => option .setName('split') - .setDescription('if a track has chapters, split it'))) + .setDescription('if a track has chapters, split it')) + .addBooleanOption(option => option + .setName('skip') + .setDescription('skip the currently playing track'))) .addSubcommand(subcommand => subcommand .setName('list') .setDescription('list all favorites')) @@ -124,6 +127,7 @@ export default class implements Command { shuffleAdditions: interaction.options.getBoolean('shuffle') ?? false, addToFrontOfQueue: interaction.options.getBoolean('immediate') ?? false, shouldSplitChapters: interaction.options.getBoolean('split') ?? false, + skipCurrentTrack: interaction.options.getBoolean('skip') ?? false, }); } diff --git a/src/commands/play.ts b/src/commands/play.ts index 65f28d4..25aef1c 100644 --- a/src/commands/play.ts +++ b/src/commands/play.ts @@ -29,7 +29,10 @@ export default class implements Command { .setDescription('shuffle the input if you\'re adding multiple tracks')) .addBooleanOption(option => option .setName('split') - .setDescription('if a track has chapters, split it')); + .setDescription('if a track has chapters, split it')) + .addBooleanOption(option => option + .setName('skip') + .setDescription('skip the currently playing track')); public requiresVC = true; @@ -52,6 +55,7 @@ export default class implements Command { addToFrontOfQueue: interaction.options.getBoolean('immediate') ?? false, shuffleAdditions: interaction.options.getBoolean('shuffle') ?? false, shouldSplitChapters: interaction.options.getBoolean('split') ?? false, + skipCurrentTrack: interaction.options.getBoolean('skip') ?? false, }); } diff --git a/src/services/add-query-to-queue.ts b/src/services/add-query-to-queue.ts index 2b84b63..401ad90 100644 --- a/src/services/add-query-to-queue.ts +++ b/src/services/add-query-to-queue.ts @@ -38,12 +38,14 @@ export default class AddQueryToQueue { addToFrontOfQueue, shuffleAdditions, shouldSplitChapters, + skipCurrentTrack, interaction, }: { query: string; addToFrontOfQueue: boolean; shuffleAdditions: boolean; shouldSplitChapters: boolean; + skipCurrentTrack: boolean; interaction: ChatInputCommandInteraction; }): Promise { const guildId = interaction.guild!.id; @@ -169,6 +171,14 @@ export default class AddQueryToQueue { await player.play(); } + if (skipCurrentTrack) { + try { + await player.forward(1); + } catch (_: unknown) { + throw new Error('no song to skip to'); + } + } + // Build response message if (statusMsg !== '') { if (extraMsg === '') { @@ -183,9 +193,9 @@ export default class AddQueryToQueue { } if (newSongs.length === 1) { - await interaction.editReply(`u betcha, **${firstSong.title}** added to the${addToFrontOfQueue ? ' front of the' : ''} queue${extraMsg}`); + await interaction.editReply(`u betcha, **${firstSong.title}** added to the${addToFrontOfQueue ? ' front of the' : ''} queue${skipCurrentTrack ? 'and current track skipped' : ''}${extraMsg}`); } else { - await interaction.editReply(`u betcha, **${firstSong.title}** and ${newSongs.length - 1} other songs were added to the queue${extraMsg}`); + await interaction.editReply(`u betcha, **${firstSong.title}** and ${newSongs.length - 1} other songs were added to the queue${skipCurrentTrack ? 'and current track skipped' : ''}${extraMsg}`); } }