Esempio n. 1
0
        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);
                }
            }
        }
Esempio n. 2
0
        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();
        }