public async Task QueueAsync(ICommandContext ctx, string query) { LavaPlayer player = _lavaNode.GetPlayer(ctx.Guild); if (string.IsNullOrWhiteSpace(query)) { await player.TextChannel.EmbedAsync(new EmbedBuilder().WithDynamicColor(ctx) .WithAuthor("Playing song", "https://i.imgur.com/fGNKX6x.png") .WithDescription($"{player.Track.PrettyFullTrackWithCurrentPos()}") .WithFooter(player.Track.PrettyFooter(player.Volume))).ConfigureAwait(false); return; } // check if url is youtube bool isYtUrl = Regex.IsMatch(query, @"^(https?\:\/\/)?((www\.)?youtube\.com|youtu\.?be)\/.+$"); // matches youtube playlist // can use to capture playlist ID if needed bool isYtPlaylist = Regex.IsMatch(query, @"^.*(youtu.be\/|list=)([^#\&\?]*).*"); SearchResponse result; if (isYtUrl) { result = await _lavaNode.SearchAsync(query).ConfigureAwait(false); } else { result = await _lavaNode.SearchYouTubeAsync(query).ConfigureAwait(false); } if (result.LoadStatus == LoadStatus.NoMatches) { await ctx.Channel.SendErrorAsync("No matches found.").ConfigureAwait(false); return; } if (result.LoadStatus == LoadStatus.LoadFailed) { await ctx.Channel.SendErrorAsync("Failed to load track.").ConfigureAwait(false); return; } if (isYtPlaylist && result.Tracks.Count > 1) { await QueuePlaylistAsync(ctx, player, result.Tracks).ConfigureAwait(false); return; } LavaTrack track = result.Tracks[0]; // set the queued property so we know which user queued the track track.Queued = ctx.User as IGuildUser; LinkedListNode <LavaTrack> linkedTrack = player.Queue.Enqueue(track); EmbedBuilder embed = new EmbedBuilder().WithDynamicColor(ctx); if (player.PlayerState == PlayerState.Playing || player.PlayerState == PlayerState.Paused) { embed.WithAuthor($"Queued: #{player.Queue.Count}", "https://i.imgur.com/VTRacvz.png") .WithDescription($"{track.PrettyTrack()}") .WithFooter(track.PrettyFooter(player.Volume) + FormatAutoplayAndLoop(player)); IUserMessage msg = await ctx.Channel.EmbedAsync(embed).ConfigureAwait(false); msg.DeleteAfter(10); } else { await player.PlayAsync(linkedTrack).ConfigureAwait(false); embed.WithAuthor("Playing song", "https://i.imgur.com/fGNKX6x.png") .WithDescription($"{track.PrettyTrack()}") .WithFooter(track.PrettyFooter(player.Volume)); await ctx.Channel.EmbedAsync(embed).ConfigureAwait(false); } await ctx.Message.DeleteAsync().ConfigureAwait(false); }