public async Task AddRadio(params string[] words) { Utilities.CheckAvailability(Context.Guild.Id, Program.Module.Radio); await p.DoAction(Context.User, Context.Guild.Id, Program.Module.Radio); if (p.youtubeService == null) { await ReplyAsync(Base.Sentences.NoApiKey(Context.Guild.Id)); } else if (words.Length == 0) { await ReplyAsync(Sentences.RadioNeedArg(Context.Guild.Id)); } else if (p.radios.Any(x => x.m_guildId == Context.Guild.Id) && !p.radios.Find(x => x.m_guildId == Context.Guild.Id).CanAddMusic()) { await ReplyAsync(Sentences.RadioTooMany(Context.Guild.Id)); } else { if (!p.radios.Any(x => x.m_guildId == Context.Guild.Id)) { if (!await StartRadio(Context.Channel)) { return; } } var result = await Features.Entertainment.YouTube.SearchYouTube(words, Program.p.youtubeService); if (result.error == Features.Entertainment.Error.YouTube.None) { RadioChannel radio = p.radios.Find(x => x.m_guildId == Context.Guild.Id); if (radio.ContainMusic(result.answer.url)) { await ReplyAsync(Sentences.RadioAlreadyInList(Context.Guild.Id)); return; } await ReplyAsync(Sentences.SongAdded(Context.Guild.Id, result.answer.name)); string fileName = "Saves/Radio/" + radio.m_guildId + "/" + Utilities.CleanWord(result.answer.name) + ".mp3"; radio.AddMusic(fileName, result.answer.name, result.answer.url, result.answer.imageUrl, Context.User.ToString()); ProcessStartInfo youtubeDownload = new ProcessStartInfo() { FileName = "youtube-dl", Arguments = $"-x --audio-format mp3 -o " + fileName + " " + result.answer.url, CreateNoWindow = true }; youtubeDownload.WindowStyle = ProcessWindowStyle.Hidden; Process.Start(youtubeDownload).WaitForExit(); radio.StopDownloading(result.answer.url); await radio.Play(); } else { await ReplyAsync("YouTube error: " + result.error); } } }
private void DownloadAudio(YouTubeVideo video, RadioChannel radio, string url, string title) { File.WriteAllBytes("Saves/Radio/" + radio.m_guildId + "/" + title + "." + video.FileExtension, video.GetBytes()); MediaFile inputFile = new MediaFile { Filename = "Saves/Radio/" + radio.m_guildId + "/" + title + "." + video.FileExtension }; MediaFile outputFile = new MediaFile { Filename = "Saves/Radio/" + radio.m_guildId + "/" + title + ".mp3" }; using (Engine engine = new Engine()) { engine.Convert(inputFile, outputFile); } radio.StopDownloading(url); File.Delete("Saves/Radio/" + radio.m_guildId + "/" + title + "." + video.FileExtension); radio.Play(); }