public async Task ListPlaylists(CommandContext ctx) { Console.WriteLine("Getting list of playlists..."); Dictionary <String, int> listOfPlaylists = await PasteBin.listPlaylistsAsync(); Console.WriteLine("Got the playlists!"); if (listOfPlaylists.Count == 0) { await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":no_entry:")} There are no playlists currently saved"); return; } Console.WriteLine("Getting the interactivity module..."); var interactivity = ctx.Client.GetInteractivity(); Console.WriteLine("Got the module!"); string playlistInfo = string.Join('\n', listOfPlaylists.Select(x => $"{Formatter.Bold(x.Key)} - {Formatter.Bold(x.Value.ToString())} tracks")); try { await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":musical_note:")} Here is the list of playlists currently saved: \nUse {Formatter.InlineCode("!save <playlist>")} to save the current queue and {Formatter.InlineCode("!load <playlist>")} to load a saved playlist. \n\n"); var queuePages = interactivity.GeneratePagesInEmbed(playlistInfo, SplitType.Line); await interactivity.SendPaginatedMessageAsync(ctx.Channel, ctx.User, queuePages, null, PaginationBehaviour.WrapAround); } catch (ArgumentException ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.InnerException); } }
public async Task ImportAsync(CommandContext ctx, [RemainingText, Description("Playlist name to load")] string playlistName) { // If the user inputs no playlist name in discord if (playlistName == null) { await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":no_entry:")} Please specify the playlist name you want to load!"); return; } IEnumerable <String> trackStrings = await PasteBin.loadTracksAsync(playlistName); // Check if there is actually a match in playlist name if (trackStrings != null) { int trackCount = trackStrings.Count(); try { IEnumerable <LavalinkTrack> tracks = await Lavalink.lavaRest.DecodeTracksAsync(trackStrings.ToArray()); foreach (var track in tracks) { MusicData.QueueTrack(new TrackItem(track, ctx.Member)); } await this.MusicData.CreatePlayerAsync(ctx.Member.VoiceState.Channel).ConfigureAwait(false); var trackNowPlaying = MusicData.NowPlaying; await MusicData.Play(); await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":musical_note:")} Loaded playlist {Formatter.Bold(playlistName)} with {Formatter.Bold(trackCount.ToString())} tracks"); // Player wasn't playing anything at the time of loading the playlist if (trackNowPlaying.Track == null || trackNowPlaying.Track.TrackString == null) { await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":musical_note:")} Now playing: {Formatter.Bold($"{tracks.First().Title}")} by {Formatter.Bold($"{tracks.First().Author}")} - ({Time_Convert.CompressLavalinkTime(tracks.First().Length)})").ConfigureAwait(false); } return; } catch (Exception e) { Console.Error.WriteLine($"Exception {e} when decoding tracks"); await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":no_entry:")} There was an error loading the playlist"); } } await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":no_entry:")} Playlist name {Formatter.Bold(playlistName)} does not exist!"); }
public async Task DeletePlaylist(CommandContext ctx, [RemainingText, Description("Playlist name to delete")] string playlistName) { var interactive = ctx.Client.GetInteractivity(); if (playlistName == null) { await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":no_entry:")} Please specify the playlist name you want to delete!"); return; } if (await PasteBin.playlistExists(playlistName)) { string deleteConfirm = $"{DiscordEmoji.FromName(ctx.Client, ":warning:")} Are you sure you want to delete the playlist {Formatter.Bold(playlistName)}?"; PlaylistResult deleteResult = await MusicCommandHelpers.DeletePlaylistHelperAsync(ctx, deleteConfirm, playlistName, PasteBin); switch (deleteResult) { case PlaylistResult.Cancelled: await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":warning:")} Deletion cancelled"); break; case PlaylistResult.Failed: await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":no_entry:")} There was a problem deleting the playlist"); break; case PlaylistResult.Successful: await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":musical_note:")} Deleted the playlist {Formatter.Bold(playlistName)}"); break; default: await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":REEE:")} You done goofed"); break; } } else { await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":no_entry:")} Playlist {Formatter.Bold(playlistName)} doesn't exist!"); } }
public async Task ExportAsync(CommandContext ctx, [RemainingText, Description("Name of the Playlist")] string playlistName) { var interactive = ctx.Client.GetInteractivity(); List <string> trackQueue = new List <string>(); //Check if queue is empty and there's nothing playing if (MusicData.PublicQueue.Count == 0 && MusicData.NowPlaying.Track == null) { await ctx.RespondAsync($"{ DiscordEmoji.FromName(ctx.Client, ":no_entry:")} There's nothing in the queue or playing right now to save!").ConfigureAwait(false); return; } if (String.IsNullOrWhiteSpace(playlistName)) { await ctx.RespondAsync($"{ DiscordEmoji.FromName(ctx.Client, ":no_entry:")} Playlist name is empty!").ConfigureAwait(false); return; } // If there's a song playing currently add it to the queue if (MusicData.NowPlaying.Track != null || MusicData.NowPlaying.Track.TrackString != null) { trackQueue.Add(MusicData.NowPlaying.Track.TrackString); } // Add each song in the queue foreach (var track in MusicData.PublicQueue) { trackQueue.Add(track.Track.TrackString); } // Check if playlist name already exists if (await PasteBin.playlistExists(playlistName)) { string overwriteConfirm = $"{DiscordEmoji.FromName(ctx.Client, ":warning:")} There's already a playlist with the name {Formatter.Bold(playlistName)}. Would you like to overwrite it?"; PlaylistResult deleteResult = await MusicCommandHelpers.DeletePlaylistHelperAsync(ctx, overwriteConfirm, playlistName, PasteBin); switch (deleteResult) { case PlaylistResult.Cancelled: await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":warning:")} Overwrite cancelled"); return; case PlaylistResult.Failed: await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":no_entry:")} There was a problem deleting the playlist"); return; case PlaylistResult.Successful: // Don't say anything if delete goes through - delete is just an intermediate step to overwriting break; default: await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":REEE:")} You done goofed"); return; } } // Save the playlist var saveResult = await PasteBin.saveTracksAsync(trackQueue, playlistName); if (saveResult == PlaylistResult.Successful) { await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":musical_note:")} Playlist {Formatter.Bold(playlistName)} saved!"); } else { await ctx.RespondAsync($"{DiscordEmoji.FromName(ctx.Client, ":no_entry:")} There was a problem saving the playlist {Formatter.Bold(playlistName)}."); } }