/// <summary> /// Queues serached (YouTube/Soundcloud) songs to the player queue /// </summary> /// <param name="player">Instance of <see cref="LavaPlayer" /> for the guild</param> /// <param name="search"><see cref="Victoria.Responses.Rest.SearchResponse"/></param> /// <param name="startTime">Start time of the track</param> /// <param name="requester">Requester of the track</param> /// <returns></returns> public async Task QueueTracksToPlayer(LavaPlayer player, Victoria.Responses.Rest.SearchResponse search, TimeSpan?startTime = null, IGuildUser requester = null) { _ = Task.Run(async() => { List <LavaTrack> lavaTracks; string newQueue; if (search.LoadStatus == LoadStatus.PlaylistLoaded) { lavaTracks = search.Tracks.ToList(); } else { lavaTracks = new List <LavaTrack> { search.Tracks.First() }; } if (player.PlayerState == PlayerState.Playing || player.PlayerState == PlayerState.Paused) { foreach (var track in lavaTracks) { player.Queue.Enqueue(track.CreateMuseTrack(requester)); } //Pause flag needed! newQueue = await GetNewEmbedQueueString(player); var emebed = await embedHelper.BuildMusicEmbed(player, Color.DarkTeal, player.PlayerState == PlayerState.Paused); await Program.BotConfig.BotEmbedMessage.ModifyAsync(x => { x.Content = string.Format(QueueMayHaveSongs, newQueue); x.Embed = emebed; }); } else { foreach (var track in lavaTracks) { player.Queue.Enqueue(track.CreateMuseTrack(requester)); } _ = player.Queue.TryDequeue(out var newTrack); if (startTime == null) { await player.PlayAsync(newTrack); } else { await player.PlayAsync(newTrack, startTime.Value, newTrack.Duration); } } }); await Task.CompletedTask; }
private IEnumerable <LavaTrack> SongsFromSearchGet(Victoria.Responses.Rest.SearchResponse searchResoult) { if (searchResoult.LoadStatus == Victoria.Enums.LoadStatus.NoMatches || searchResoult.LoadStatus == Victoria.Enums.LoadStatus.LoadFailed) { yield return(null); } if (searchResoult.LoadStatus == Victoria.Enums.LoadStatus.PlaylistLoaded && !string.IsNullOrWhiteSpace(searchResoult.Playlist.Name)) { foreach (var song in searchResoult.Tracks.OrderBy(x => Guid.NewGuid())) { yield return(song); } } else { yield return(searchResoult.Tracks.FirstOrDefault()); } }
public async Task PlayAsync([Remainder] string searchQuery) { Language lang = Commands.GetLanguage(Context.Guild.Id); if (!_lavaNode.HasPlayer(Context.Guild)) { IVoiceState voiceState = Context.User as IVoiceState; if (voiceState?.VoiceChannel == null) { EmbedBuilder b = new EmbedBuilder(); b.WithTitle(lang.Not_connected); b.WithFooter(lang.Requested_by + Context.User.Username, Commands.GetUserAvatarUrl(Context.User)); await ReplyAsync(embed : b.Build()); return; } try { await _lavaNode.JoinAsync(voiceState.VoiceChannel, Context.Channel as ITextChannel); EmbedBuilder b = new EmbedBuilder(); b.WithTitle(lang.Joined_before + voiceState.VoiceChannel.Name + lang.Joined_after); b.WithFooter(lang.Requested_by + Context.User.Username, Commands.GetUserAvatarUrl(Context.User)); await ReplyAsync(embed : b.Build()); } catch (Exception exception) { await Exeptionhandle(exception, "join in play").ConfigureAwait(false); throw; } } LavaPlayer player = _lavaNode.GetPlayer(Context.Guild); if (player.PlayerState == PlayerState.Paused && string.IsNullOrEmpty(searchQuery)) { try { await player.ResumeAsync(); await ReplyAsync(lang.Resumed_front + player.Track.Title); return; } catch (Exception exception) { await Exeptionhandle(exception, "resume in play").ConfigureAwait(false); throw; } } else { if (string.IsNullOrWhiteSpace(searchQuery)) { await ReplyAsync(lang.No_search_term); return; } } int searchtype = 0; Victoria.Responses.Rest.SearchResponse searchResponse = await _lavaNode.SearchAsync(searchQuery); if (searchResponse.LoadStatus == LoadStatus.LoadFailed || searchResponse.LoadStatus == LoadStatus.NoMatches) { searchResponse = await _lavaNode.SearchYouTubeAsync(searchQuery); searchtype = 1; if (searchResponse.LoadStatus == LoadStatus.LoadFailed || searchResponse.LoadStatus == LoadStatus.NoMatches) { searchResponse = await _lavaNode.SearchSoundCloudAsync(searchQuery); searchtype = 2; if (searchResponse.LoadStatus == LoadStatus.LoadFailed || searchResponse.LoadStatus == LoadStatus.NoMatches) { EmbedBuilder eb = new EmbedBuilder(); eb.WithTitle(lang.No_results_front + searchQuery + lang.No_results_back); eb.WithFooter(lang.Requested_by + Context.User.Username, Commands.GetUserAvatarUrl(Context.User)); await ReplyAsync($"", false, eb.Build()); return; } } } if (player.PlayerState == PlayerState.Playing || player.PlayerState == PlayerState.Paused) { if (!string.IsNullOrWhiteSpace(searchResponse.Playlist.Name)) { foreach (LavaTrack track in searchResponse.Tracks) { player.Queue.Enqueue(track); } await ReplyAsync($"Enqueued {searchResponse.Tracks.Count} tracks."); } else { LavaTrack track = searchResponse.Tracks[0]; player.Queue.Enqueue(track); await ReplyAsync($"Enqueued: {track.Title}"); } } else { LavaTrack track = searchResponse.Tracks[0]; if (!string.IsNullOrWhiteSpace(searchResponse.Playlist.Name)) { for (int i = 0; i < searchResponse.Tracks.Count; i++) { if (i == 0) { await player.PlayAsync(track); EmbedBuilder b = new EmbedBuilder(); b.WithTitle($"Now playing: {track.Title}"); if (searchtype == 1) { b.AddField("source", "<:youtube:793403957871247360> search"); } if (searchtype == 2) { b.AddField("source", "<:soundcloud:793405493204090911> search"); } string art = await track.FetchArtworkAsync(); b.WithThumbnailUrl(art); b.WithFooter(lang.Requested_by + Context.User.Username, Commands.GetUserAvatarUrl(Context.User)); await ReplyAsync(embed : b.Build()); } else { if (searchResponse.Tracks[i] == null) { await ReplyAsync(i + " was null"); } player.Queue.Enqueue(searchResponse.Tracks[i]); } } await ReplyAsync($"Enqueued {searchResponse.Tracks.Count} tracks."); } else { await player.PlayAsync(track); EmbedBuilder b = new EmbedBuilder(); b.WithTitle($"Now playing: {track.Title}"); if (searchtype == 1) { b.AddField("source", "<:youtube:793403957871247360> search"); } if (searchtype == 2) { b.AddField("source", "<:soundcloud:793405493204090911> search"); } string art = await track.FetchArtworkAsync(); b.WithThumbnailUrl(art); b.WithFooter(new Language().Requested_by + Context.User.Username, Commands.GetUserAvatarUrl(Context.User)); await ReplyAsync(embed : b.Build()); } } }