/// <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); } }
/// <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); } }
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()); } }
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()); }
/// <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); } }