/skip: Add queue skipping feature
Signed-off-by: mctaylors <cantsendmails@mctaylors.ru>
This commit is contained in:
parent
4eba6f3b96
commit
6c88ad59e5
1 changed files with 31 additions and 6 deletions
|
@ -167,10 +167,12 @@ public sealed class ControlsCommandGroup(
|
||||||
}
|
}
|
||||||
|
|
||||||
[Command("skip")]
|
[Command("skip")]
|
||||||
[Description("Skips the current track")]
|
[Description("Skips the current track or track from queue")]
|
||||||
[DiscordDefaultDMPermission(false)]
|
[DiscordDefaultDMPermission(false)]
|
||||||
[UsedImplicitly]
|
[UsedImplicitly]
|
||||||
public async Task<Result> SkipCommandAsync()
|
public async Task<Result> SkipCommandAsync(
|
||||||
|
[Description("Track number in queue to skip")] [MinValue(1)]
|
||||||
|
int? index = null)
|
||||||
{
|
{
|
||||||
var player = await LavalinkPlayer.GetPlayerAsync(
|
var player = await LavalinkPlayer.GetPlayerAsync(
|
||||||
commandContext, audioService, feedbackService);
|
commandContext, audioService, feedbackService);
|
||||||
|
@ -179,18 +181,41 @@ public sealed class ControlsCommandGroup(
|
||||||
return Result.FromSuccess();
|
return Result.FromSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player.CurrentTrack is null)
|
if (index is not null)
|
||||||
|
{
|
||||||
|
var queue = player.Queue;
|
||||||
|
if (index > queue.Count)
|
||||||
|
{
|
||||||
|
return await feedbackService.SendContextualMessageResult(
|
||||||
|
"There's no track with that index.",
|
||||||
|
feedbackService.Theme.FaultOrDanger);
|
||||||
|
}
|
||||||
|
|
||||||
|
var queueItem = queue[(int)index - 1];
|
||||||
|
var track = queueItem.Track;
|
||||||
|
|
||||||
|
await player.Queue.RemoveAsync(queueItem);
|
||||||
|
|
||||||
|
if (track is null)
|
||||||
|
{
|
||||||
|
return Result.FromSuccess(); // how
|
||||||
|
}
|
||||||
|
|
||||||
|
return await feedbackService.SendContextualMessageResult(
|
||||||
|
$"Removed {track.Display()} from queue", feedbackService.Theme.Success);
|
||||||
|
}
|
||||||
|
|
||||||
|
var currentTrack = player.CurrentTrack;
|
||||||
|
if (currentTrack is null)
|
||||||
{
|
{
|
||||||
return await feedbackService.SendContextualMessageResult(
|
return await feedbackService.SendContextualMessageResult(
|
||||||
"There's nothing playing right now.",
|
"There's nothing playing right now.",
|
||||||
feedbackService.Theme.FaultOrDanger);
|
feedbackService.Theme.FaultOrDanger);
|
||||||
}
|
}
|
||||||
|
|
||||||
var track = player.CurrentTrack;
|
|
||||||
|
|
||||||
await player.SkipAsync();
|
await player.SkipAsync();
|
||||||
|
|
||||||
return await feedbackService.SendContextualMessageResult(
|
return await feedbackService.SendContextualMessageResult(
|
||||||
$"Skipped {track.Display()}", feedbackService.Theme.Success);
|
$"Skipped {currentTrack.Display()}", feedbackService.Theme.Success);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue