private async void AutoPlayNextSong() { string path = string.Empty; try { WebClient client = new WebClient(); using (MemoryStream musicTrackListXml = new MemoryStream(client.DownloadData("ftp://localhost/Tracks/TrackList.xml"))) { TrackList trackList = new TrackList(); musicTrackListXml.Seek(0, SeekOrigin.Begin); using (XmlReader reader = XmlReader.Create(musicTrackListXml)) { trackList.Load(reader); } string selectedTrackName = trackList.Entries[Globals.Random.Next(0, trackList.Entries.Count - 1)].TrackName; if (this.blackListSongs.Any(blackListSong => selectedTrackName.ToLower().Contains(blackListSong))) { this.AutoPlayNextSong(); return; } if (!File.Exists(Path.Combine(Program.AppPath, "Tracks", selectedTrackName))) { WebClient songClient = new WebClient(); using (MemoryStream musicDownload = new MemoryStream(songClient.DownloadData($"ftp://localhost/Tracks/{selectedTrackName}"))) { File.WriteAllBytes(Path.Combine(PathsHelper.CreateIfDoesNotExist(Program.AppPath, "Tracks"), selectedTrackName), musicDownload.ToArray()); path = Path.Combine(Program.AppPath, "Tracks", selectedTrackName); } } string trackInfoBuilder = string.Empty; selectedTrackName = selectedTrackName.Replace(".ogg", string.Empty); int firstParenthase = selectedTrackName.Contains(")") ? selectedTrackName.IndexOf(")") : 0; if (firstParenthase > 0) { trackInfoBuilder += "```\nTrack:\n"; trackInfoBuilder += $"{selectedTrackName.Substring(firstParenthase + 1)}\n\n"; trackInfoBuilder += "Origin (probably abbreviated):\n"; trackInfoBuilder += $" {selectedTrackName.Split(')')[0]}\n\n"; trackInfoBuilder += "```"; } else { trackInfoBuilder += "```\nTrack:\n"; trackInfoBuilder += $"{selectedTrackName}\n```"; } await(await this.Context.Guild.GetTextChannelAsync(335897183754911744)).SendMessageAsync(trackInfoBuilder); } if (this.ffmpeg != null && !this.ffmpeg.HasExited) { this.ffmpeg.Close(); } this.ffmpeg = this.CreateStream(path); Stream output = this.ffmpeg.StandardOutput.BaseStream; AudioOutStream discord = this.currentAudioClient.CreatePCMStream(AudioApplication.Mixed, 98304); await output.CopyToAsync(discord); await discord.FlushAsync(); this.AutoPlayNextSong(); } catch (WebException e) { Console.Out.WriteLine(e); await this.Context.Channel.SendMessageAsync("Our music server is offline, sorry about that! Playing from local storage instead..."); this.AutoPlayNextSongLocal(); } catch (Exception e) { Console.Out.WriteLine(e); } }