diff --git a/TomatenMusicCore/Music/GuildPlayer.cs b/TomatenMusicCore/Music/GuildPlayer.cs index 9687114..d2db34a 100644 --- a/TomatenMusicCore/Music/GuildPlayer.cs +++ b/TomatenMusicCore/Music/GuildPlayer.cs @@ -89,17 +89,12 @@ namespace TomatenMusic.Music MusicActionResponse response; try { - response = PlayerQueue.NextTrack(true); + response = PlayerQueue.NextTrack(true, Autoplay); }catch (Exception ex) { if (Autoplay) { - YoutubeService youtube = TomatenMusicBot.ServiceProvider.GetRequiredService(); - LavalinkTrack newTrack = await youtube.GetRelatedTrackAsync(CurrentTrack.TrackIdentifier, PlayerQueue.PlayedTracks.Take(5).ToList().ConvertAll(x => x.TrackIdentifier)); - - _logger.LogInformation($"Skipped Track {CurrentTrack.Title} for Autoplayed Track {newTrack.Title}"); - await PlayAsync(newTrack); - QueuePrompt.UpdateFor(GuildId); + _ = OnAutoPlay(CurrentTrack); return; } throw ex; @@ -164,10 +159,16 @@ namespace TomatenMusic.Music if (channel.Type == ChannelType.Stage) { - DiscordStageInstance stageInstance = await channel.GetStageInstanceAsync(); + DiscordStageInstance stageInstance; + try + { + stageInstance = await channel.GetStageInstanceAsync(); - if (stageInstance == null) + }catch (Exception ex) + { stageInstance = await channel.CreateStageInstanceAsync("Music"); + } + await stageInstance.Channel.UpdateCurrentUserVoiceStateAsync(false); } @@ -239,13 +240,13 @@ namespace TomatenMusic.Music YoutubeService youtube = TomatenMusicBot.ServiceProvider.GetRequiredService(); TomatenMusicTrack newTrack; - if (oldTrack.Source != "YouTube" ) - newTrack = await youtube.GetRelatedTrackAsync(PlayerQueue.PlayedTracks.First(x => x.Source == "YouTube").TrackIdentifier, PlayerQueue.PlayedTracks.Take(5).ToList().ConvertAll(x => x.TrackIdentifier)); + if (oldTrack.Provider != StreamProvider.YouTube) + newTrack = await youtube.GetRelatedTrackAsync(PlayerQueue.PlayedTracks.First(x => x.Provider == StreamProvider.YouTube).TrackIdentifier, PlayerQueue.PlayedTracks.Take(5).ToList().ConvertAll(x => x.TrackIdentifier)); else newTrack = await youtube.GetRelatedTrackAsync(oldTrack.TrackIdentifier, PlayerQueue.PlayedTracks.Take(5).ToList().ConvertAll(x => x.TrackIdentifier)); _logger.LogInformation($"Autoplaying for track {oldTrack.TrackIdentifier} with Track {newTrack.TrackIdentifier}"); PlayerQueue.LastTrack = newTrack; - await newTrack.Play(this); + await newTrack.PlayNow(this, withoutQueuePrepend: true); QueuePrompt.UpdateFor(GuildId); } diff --git a/TomatenMusicCore/Music/PlayerQueue.cs b/TomatenMusicCore/Music/PlayerQueue.cs index b3802f8..0a3d646 100644 --- a/TomatenMusicCore/Music/PlayerQueue.cs +++ b/TomatenMusicCore/Music/PlayerQueue.cs @@ -92,10 +92,11 @@ namespace TomatenMusic.Music } - public MusicActionResponse NextTrack(bool ignoreLoop = false) + public MusicActionResponse NextTrack(bool ignoreLoop = false, bool autoplay = false) { if (LastTrack != null) - PlayedTracks = new Queue(PlayedTracks.Prepend(new TomatenMusicTrack(LastTrack.WithPosition(TimeSpan.Zero)))); + if (LoopType != LoopType.NONE && Queue.Count == 0 || autoplay) + PlayedTracks = new Queue(PlayedTracks.Prepend(new TomatenMusicTrack(LastTrack.WithPosition(TimeSpan.Zero)))); switch (LoopType) { diff --git a/TomatenMusicCore/Prompt/Implementation/QueuePrompt.cs b/TomatenMusicCore/Prompt/Implementation/QueuePrompt.cs index fb087d8..0677813 100644 --- a/TomatenMusicCore/Prompt/Implementation/QueuePrompt.cs +++ b/TomatenMusicCore/Prompt/Implementation/QueuePrompt.cs @@ -98,7 +98,10 @@ namespace TomatenMusic.Prompt.Implementation await Player.RewindAsync(); }catch (Exception ex) { - + _ = args.Interaction.CreateResponseAsync( + DSharpPlus.InteractionResponseType.ChannelMessageWithSource, + new DiscordInteractionResponseBuilder() + .WithContent($"An Error occurred during this Interaction {ex.Message}")); } } } @@ -131,8 +134,18 @@ namespace TomatenMusic.Prompt.Implementation _ = args.Interaction.EditOriginalResponseAsync(new DiscordWebhookBuilder().WithContent("Please connect to the bots Channel to use this Interaction")); return; } + try + { + await Player.SkipAsync(); - await Player.SkipAsync(); + } + catch (Exception ex) + { + _ = args.Interaction.CreateResponseAsync( + DSharpPlus.InteractionResponseType.ChannelMessageWithSource, + new DiscordInteractionResponseBuilder() + .WithContent($"An Error occurred during this Interaction {ex.Message}")); + } System.Timers.Timer timer = new System.Timers.Timer(800); timer.Elapsed += (s, args) =>