Exemplo n.º 1
0
        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);
            }
        }