/// <summary> /// Adiciona novas músicas à playlist utilizando a API do YouTube para realizar a busca. /// </summary> /// <param name="numberOfTracksToGrab"> How many songs to search for. </param> /// <returns></returns> public static async Task AddSongs(short numberOfTracksToGrab) { LavalinkGuildConnection guildConnection = LavalinkNode.GetGuildConnection(await Lavalink.Client.GetGuildAsync(configJson.ServerId).ConfigureAwait(false)); for (int i = 0; i < numberOfTracksToGrab; i++) { WordsGenerator _wordsGenerator = new WordsGenerator(_randomNumber); List <string> wordList = _wordsGenerator.GenerateWordList(); YoutubeSearchEngine _youtubeSearchEngine = new YoutubeSearchEngine(1); Dictionary <string, string> searchResult = _youtubeSearchEngine.SearchVideos(wordList); foreach (var result in searchResult) { Uri videoUri = new Uri(result.Value); LavalinkLoadResult loadResult = await LavalinkNode.Rest.GetTracksAsync(videoUri).ConfigureAwait(false); if (loadResult.LoadResultType == LavalinkLoadResultType.LoadFailed || loadResult.LoadResultType == LavalinkLoadResultType.NoMatches) { await guildConnection.Guild.GetChannel(configJson.ComandosBotCanalId).SendMessageAsync($"ERR0! Pesquisa por {searchResult} falhou! Tipo do resultado: {result.Key}").ConfigureAwait(false); } else { Playlist.Add(loadResult.Tracks.First()); await guildConnection.Guild.GetChannel(configJson.ComandosBotCanalId).SendMessageAsync($"A música: {loadResult.Tracks.First().Title} foi adicionada à playlist de músicas para tocar!").ConfigureAwait(false); } } } }
public async Task Tocar(CommandContext context, [Description("Pesquisa que o bot fará no site externo.")][RemainingText] string searchQuery) { if (context.Channel.Id == BotClient.configJson.ComandosBotCanalId) { guildConnection = BotClient.LavalinkNode.GetGuildConnection(await BotClient.Lavalink.Client.GetGuildAsync(BotClient.configJson.ServerId).ConfigureAwait(false)); if (context.Member.VoiceState == null || context.Member.VoiceState.Channel == null) { await context.RespondAsync($"{context.User.Username} você precisa estar conectado a um canal de voz!").ConfigureAwait(false); return; } if (guildConnection == null) { await context.RespondAsync($"ERR0! Lavalink não está conectado!").ConfigureAwait(false); return; } YoutubeSearchEngine youtubeSearchEngine = new YoutubeSearchEngine(1); Dictionary <string, string> searchResult = youtubeSearchEngine.SearchVideos(searchQuery); if (searchResult.Count == 0) { await context.RespondAsync($"ERR0! Pesquisa por {searchQuery} falhou! Não consegui encontrar nenhum vídeo no YouTube!").ConfigureAwait(false); return; } string videoTitle = searchResult.ElementAt(0).Key.ToString(); LavalinkLoadResult loadResult = await BotClient.LavalinkNode.Rest.GetTracksAsync(videoTitle).ConfigureAwait(false); if (loadResult.LoadResultType == LavalinkLoadResultType.LoadFailed || loadResult.LoadResultType == LavalinkLoadResultType.NoMatches) { await context.RespondAsync($"ERR0! Pesquisa por {searchQuery} falhou! Tipo do resultado: {loadResult.LoadResultType}").ConfigureAwait(false); } LavalinkTrack track = loadResult.Tracks.First(); if (track.Length >= new TimeSpan(0, BotClient.configJson.TrackMaxLengthInMinutes, 0)) { await context.RespondAsync($"Duração da Música {track.Title} é maior que o maximo permitido(valor configurável)! Ignorando esta música..."); await context.RespondAsync($"Duração: {track.Length.Hours}:{track.Length.Minutes}:{track.Length.Seconds}."); return; } if (BotClient.Playlist.Count == 0) { BotClient.Playlist.Add(track); await guildConnection.SetVolumeAsync(50).ConfigureAwait(false); await guildConnection.PlayAsync(BotClient.Playlist[0]).ConfigureAwait(false); await context.RespondAsync($"Tocando: {track.Title}! Volume: {50}%").ConfigureAwait(false); BotClient.IsSongPlaying = true; } else { BotClient.Playlist.Add(track); await context.RespondAsync($"A música: {track.Title} foi adicionada à playlist de músicas para tocar!").ConfigureAwait(false); } } }