diff --git a/TomatenMusicCore/Commands/PlayCommandGroup.cs b/TomatenMusicCore/Commands/PlayCommandGroup.cs index 389dff6..bf8799f 100644 --- a/TomatenMusicCore/Commands/PlayCommandGroup.cs +++ b/TomatenMusicCore/Commands/PlayCommandGroup.cs @@ -206,14 +206,14 @@ namespace TomatenMusic.Commands } } - try + try { if (response.isPlaylist) { LavalinkPlaylist playlist = response.Playlist; await player.PlayPlaylistAsync(playlist); - _ = ctx.EditResponseAsync(new DiscordWebhookBuilder().WithContent("Now Playing:").AddEmbed( + await ctx.EditResponseAsync(new DiscordWebhookBuilder().WithContent("Now Playing:").AddEmbed( Common.AsEmbed(playlist) )); @@ -231,7 +231,7 @@ namespace TomatenMusic.Commands catch (Exception ex) { await ctx.EditResponseAsync(new DiscordWebhookBuilder() - .WithContent($"❌ An error occured while playing your Track: ``{ex.Message}``") + .WithContent($"❌ An error occured while playing your Track: ``{ex.Message}``, ```{ex.StackTrace}```") ); return; } diff --git a/TomatenMusicCore/Music/PlayerQueue.cs b/TomatenMusicCore/Music/PlayerQueue.cs index ce90a26..9ab8453 100644 --- a/TomatenMusicCore/Music/PlayerQueue.cs +++ b/TomatenMusicCore/Music/PlayerQueue.cs @@ -40,8 +40,10 @@ namespace TomatenMusic.Music { return Task.Run(() => { - if (CurrentPlaylist == null) + if (CurrentPlaylist == null && Queue.Count == 0) CurrentPlaylist = playlist; + else + CurrentPlaylist = null; _logger.LogInformation("Queued Playlist {0}", playlist.Name); foreach (LavalinkTrack track in playlist.Tracks) diff --git a/TomatenMusicCore/Services/SpotifyService.cs b/TomatenMusicCore/Services/SpotifyService.cs index 9fff28d..fe36a3e 100644 --- a/TomatenMusicCore/Services/SpotifyService.cs +++ b/TomatenMusicCore/Services/SpotifyService.cs @@ -70,7 +70,7 @@ namespace TomatenMusic.Services if (track == null) throw new ArgumentException("This Spotify Track was not found on Youtube"); - tracks.Add(await FullTrackContext.PopulateAsync(track, sTrack.Uri)); + tracks.Add(await FullTrackContext.PopulateAsync(track, sTrack.Uri.Replace("spotify:track:", ""))); } Uri uri; Uri.TryCreate(url, UriKind.Absolute, out uri); @@ -98,7 +98,7 @@ namespace TomatenMusic.Services if (track == null) throw new ArgumentException("This Spotify Track was not found on Youtube"); - tracks.Add(await FullTrackContext.PopulateAsync(track, fullTrack.Uri)); + tracks.Add(await FullTrackContext.PopulateAsync(track, fullTrack.Uri.Replace("spotify:track:", ""))); } } @@ -115,23 +115,35 @@ namespace TomatenMusic.Services public async Task PopulateSpotifyPlaylistAsync(SpotifyPlaylist playlist) { var list = await this.Playlists.Get(playlist.Identifier); - playlist.Description = list.Description; - playlist.AuthorUri = new Uri(list.Owner.Uri); + string desc = list.Description; + + playlist.Description = desc.Substring(0, Math.Min(desc.Length, 1024)) + (desc.Length > 1020 ? "..." : " "); + if (playlist.Description.Length < 2) + playlist.Description = "None"; + + playlist.AuthorUri = new Uri($"https://open.spotify.com/user/{list.Owner.Id}"); playlist.AuthorName = list.Owner.DisplayName; playlist.Followers = list.Followers.Total; - playlist.Url = new Uri(list.Uri); - playlist.AuthorThumbnail = new Uri(list.Owner.Images.First().Url); + playlist.Url = new Uri($"https://open.spotify.com/playlist/{playlist.Identifier}"); + try + { + playlist.AuthorThumbnail = new Uri(list.Owner.Images.First().Url); + } + catch (Exception ex) { } + return playlist; } public async Task PopulateSpotifyAlbumAsync(SpotifyPlaylist playlist) { var list = await this.Albums.Get(playlist.Identifier); - playlist.Description = list.Label; - playlist.AuthorUri = new Uri(list.Artists.First().Uri); + string desc = list.Label; + + playlist.Description = desc.Substring(0, Math.Min(desc.Length, 1024)) + (desc.Length > 1020 ? "..." : " "); + playlist.AuthorUri = new Uri($"https://open.spotify.com/user/{list.Artists.First().Uri}"); playlist.AuthorName = list.Artists.First().Name; playlist.Followers = list.Popularity; - playlist.Url = new Uri(list.Uri); + playlist.Url = new Uri($"https://open.spotify.com/album/{playlist.Identifier}"); return playlist; } @@ -147,7 +159,7 @@ namespace TomatenMusic.Services context.SpotifyAlbum = spotifyTrack.Album; context.SpotifyArtists = spotifyTrack.Artists; context.SpotifyPopularity = spotifyTrack.Popularity; - context.SpotifyUri = new Uri(spotifyTrack.Uri); + context.SpotifyUri = new Uri($"https://open.spotify.com/track/{context.SpotifyIdentifier}"); track.Context = context; return track; diff --git a/TomatenMusicCore/Services/YoutubeService.cs b/TomatenMusicCore/Services/YoutubeService.cs index 12bf269..1adfd6a 100644 --- a/TomatenMusicCore/Services/YoutubeService.cs +++ b/TomatenMusicCore/Services/YoutubeService.cs @@ -39,7 +39,9 @@ namespace TomatenMusic.Services context.YoutubeAuthorSubs = (ulong) channel.Statistics.SubscriberCount; context.YoutubeAuthorThumbnail = new Uri(channel.Snippet.Thumbnails.High.Url); context.YoutubeAuthorUri = new Uri($"https://www.youtube.com/channel/{channel.Id}"); - context.YoutubeDescription = video.Snippet.Description; + string desc = video.Snippet.Description; + + context.YoutubeDescription = desc.Substring(0, Math.Min(desc.Length, 1024)) + (desc.Length > 1020 ? "..." : " "); if (video.Statistics.LikeCount != null) context.YoutubeLikes = (ulong) video.Statistics.LikeCount; context.YoutubeTags = video.Snippet.Tags; @@ -66,7 +68,10 @@ namespace TomatenMusic.Services string desc = list.Snippet.Description; - playlist.Description = desc.Substring(0, Math.Min(desc.Length, 4092)) + (desc.Length > 4092 ? "..." : " "); + playlist.Description = desc.Substring(0, Math.Min(desc.Length, 1024)) + (desc.Length > 1020 ? "..." : " "); + if (playlist.Description == "") + playlist.Description = "None"; + playlist.Thumbnail = new Uri(list.Snippet.Thumbnails.High.Url); playlist.CreationTime = (DateTime)list.Snippet.PublishedAt; playlist.YoutubeItem = list; diff --git a/TomatenMusicCore/TomatenMusicBot.cs b/TomatenMusicCore/TomatenMusicBot.cs index ab3b9b0..c460998 100644 --- a/TomatenMusicCore/TomatenMusicBot.cs +++ b/TomatenMusicCore/TomatenMusicBot.cs @@ -186,7 +186,7 @@ namespace TomatenMusic if (e.Exception is NotFoundException) logger.LogDebug($"{ ((NotFoundException)e.Exception).JsonMessage }"); if (e.Exception is BadRequestException) - logger.LogDebug($"{ ((BadRequestException)e.Exception).JsonMessage }"); + logger.LogInformation($"{ ((BadRequestException)e.Exception).Errors }"); return Task.CompletedTask; } diff --git a/TomatenMusicCore/Util/Common.cs b/TomatenMusicCore/Util/Common.cs index 193e26d..8fbcdd3 100644 --- a/TomatenMusicCore/Util/Common.cs +++ b/TomatenMusicCore/Util/Common.cs @@ -104,9 +104,9 @@ namespace TomatenMusic.Util .WithAuthor(playlist.AuthorName, playlist.AuthorUri.ToString(), youtubePlaylist.AuthorThumbnail.ToString()) .WithTitle(playlist.Name) .WithUrl(playlist.Url) - .WithDescription(playlist.Description) + .WithDescription(TrackListString(playlist.Tracks)) .WithImageUrl(youtubePlaylist.Thumbnail) - .AddField("Tracks", TrackListString(playlist.Tracks), false) + .AddField("Description", playlist.Description, false) .AddField("Track Count", $"{playlist.Tracks.Count()} Tracks", true) .AddField("Length", $"{Common.GetTimestamp(playlist.GetLength())}", true) .AddField("Create Date", $"{youtubePlaylist.CreationTime:dd. MMMM, yyyy}", true); @@ -115,17 +115,21 @@ namespace TomatenMusic.Util { SpotifyPlaylist spotifyPlaylist = (SpotifyPlaylist)playlist; builder - .WithAuthor(playlist.AuthorName, playlist.AuthorUri.ToString(), spotifyPlaylist.AuthorThumbnail.ToString()) .WithTitle(playlist.Name) .WithUrl(playlist.Url) - .WithDescription(playlist.Description) - .AddField("Tracks", TrackListString(playlist.Tracks), false) + .WithDescription(TrackListString(playlist.Tracks)) + .AddField("Description", playlist.Description, false) .AddField("Track Count", $"{playlist.Tracks.Count()} Tracks", true) .AddField("Length", $"{Common.GetTimestamp(playlist.GetLength())}", true) .AddField("Spotify Followers", $"{spotifyPlaylist.Followers:N0}", true); + if (spotifyPlaylist.AuthorThumbnail != null) + { + builder.WithAuthor(playlist.AuthorName, playlist.AuthorUri.ToString(), spotifyPlaylist.AuthorThumbnail.ToString()); + }else + builder.WithAuthor(playlist.AuthorName, playlist.AuthorUri.ToString()); } - return builder; + return builder.Build(); } public static DiscordEmbed GetQueueEmbed(GuildPlayer player) @@ -161,9 +165,9 @@ namespace TomatenMusic.Util foreach (LavalinkTrack track in tracks) { FullTrackContext context = (FullTrackContext)track.Context; - if (count > 15) + if (count > 10) { - builder.Append(String.Format("***And {0} more...***", tracks.Count() - 15)); + builder.Append(String.Format("***And {0} more...***", tracks.Count() - 10)); break; }