예제 #1
0
        /// <summary>
        /// Inserts an IEnumerable of Song objects randomly into SongList
        /// </summary>
        /// <param name="songsToAdd">The songs to insert randomly</param>
        public void ShuffleSongsInto(IEnumerable <Song> songsToAdd)
        {
            Random r = new Random();

            foreach (Song s in songsToAdd)
            {
                SongList.Insert(r.Next(SongList.Count()), s);
            }
        }
예제 #2
0
 /// <summary>
 /// Removes and returns the first song in the playlist
 /// </summary>
 /// <returns>The first song in the playlist, or null if there are no new songs</returns>
 public Song PopNextSong()
 {
     if (SongList.Count() <= 0)
     {
         return(null);
     }
     else
     {
         Song popped = SongList.First();
         SongList.RemoveAt(0);
         return(popped);
     }
 }
예제 #3
0
        public async Task PlayCmd([Remainder] string keyword)
        {
            EmbedBuilder embedBuilder = new EmbedBuilder();
            IGuild       guild        = Context.Guild;
            var          player       = audioService.GetPlayer <LavalinkPlayer>(guild.Id);

            if (player == null)
            {
                embedBuilder.WithTitle(LanguageHolder.GetTranslation("ERROR")).WithDescription(LanguageHolder.GetTranslation("AUDIO_CMD_FAIL")).WithColor(Color.Red);
                await ReplyAsync("", false, embedBuilder.Build());

                return;
            }
            var track = await audioService.GetTrackAsync(keyword, SearchMode.YouTube);

            if (track == null)
            {
                embedBuilder.WithTitle(LanguageHolder.GetTranslation("ERROR")).WithDescription(LanguageHolder.GetTranslation("NO_SONG_PLAY")).WithColor(Color.Red);
                await ReplyAsync("", false, embedBuilder.Build());

                return;
            }
            if (player.State != PlayerState.Playing)
            {
                await player.PlayAsync(track);

                embedBuilder.WithTitle(LanguageHolder.GetTranslation("BOT_TITLE")).WithDescription(LanguageHolder.GetTranslation("START_PLAYING", track.Title, track.Duration)).WithColor(Color.Blue);
                await ReplyAsync("", false, embedBuilder.Build());
            }
            else
            {
                SongList.Add(new SongTrack()
                {
                    Guild = guild, Track = track
                });
                ITextChannel text = Context.Channel as ITextChannel;
                if (SongList.Count(c => c.Guild.Id == guild.Id) == 1) //Player control thread cannot duplicate run
                {
                    await Task.Run(() => AudioManager.PlayerControl(guild.Id, text));
                }

                embedBuilder.WithTitle(LanguageHolder.GetTranslation("BOT_TITLE")).WithDescription(LanguageHolder.GetTranslation("SONG_QUEUE_UP", track.Title)).WithColor(Color.Blue);
                await ReplyAsync("", false, embedBuilder.Build());
            }
        }
예제 #4
0
        public async Task ListCmd()
        {
            EmbedBuilder embedBuilder = new EmbedBuilder();
            IGuild       guild        = Context.Guild;
            var          player       = audioService.GetPlayer <LavalinkPlayer>(guild.Id);

            if (player == null)
            {
                embedBuilder.WithTitle(LanguageHolder.GetTranslation("ERROR")).WithDescription(LanguageHolder.GetTranslation("AUDIO_CMD_FAIL")).WithColor(Color.Red);
                await ReplyAsync("", false, embedBuilder.Build());

                return;
            }
            string context = string.Empty;
            var    track   = player.CurrentTrack;

            if (track != null)
            {
                context += LanguageHolder.GetTranslation("LIST_NOW_PLAYING", track.Title, player.TrackPosition.ToString("hh\\:mm\\:ss"), track.Duration) + Environment.NewLine;
            }
            else
            {
                embedBuilder.WithTitle(LanguageHolder.GetTranslation("ERROR")).WithDescription(LanguageHolder.GetTranslation("LIST_NULL")).WithColor(Color.Red);
                await ReplyAsync("", false, embedBuilder.Build());

                return;
            }
            int count = SongList.Count(c => c.Guild.Id == guild.Id);

            if (count > 0)
            {
                for (int i = 0; i < (count > 15 ? 15 : count); i++)
                {
                    var songtrack = SongList.Where(w => w.Guild.Id == guild.Id).ToArray()[i];
                    context += string.Format("{0} [{1}]\r\n", songtrack.Track.Title, songtrack.Track.Duration);
                }
                if (count > 15)
                {
                    context += LanguageHolder.GetTranslation("LIST_MORE");
                }
            }
            embedBuilder.WithTitle(LanguageHolder.GetTranslation("BOT_TITLE")).AddField(LanguageHolder.GetTranslation("LIST_TITLE"), context).WithColor(Color.Blue);
            await ReplyAsync("", false, embedBuilder.Build());
        }
예제 #5
0
        /// <summary>
        /// Randomizes the order of songs in SongList
        /// </summary>
        public void Shuffle()
        {
            Random r = new Random();
            ObservableCollection <Song> newSongList = new ObservableCollection <Song>();

            while (SongList.Count() > 0)
            {
                // randomly get via index, remove and add to a new list
                int  randIndex = r.Next(SongList.Count());
                Song rand      = SongList[randIndex];
                SongList.RemoveAt(randIndex);
                newSongList.Add(rand);
            }
            // neewSongList is now in a new random order, so readd to SongList and its shuffled
            foreach (Song s in newSongList)
            {
                SongList.Add(s);
            }
        }