Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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!");
        }
Beispiel #3
0
        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!");
            }
        }
Beispiel #4
0
        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)}.");
            }
        }