public async Task <ulong> RequestRuleEphemeral(ContextMenuContext ctx) { List <DiscordSelectComponentOption> options = new List <DiscordSelectComponentOption>(); foreach (var item in RuleService.rules) { if (item.RuleNum == 0) { options.Add(new DiscordSelectComponentOption( $"OTHER", item.RuleNum.ToString())); continue; } var option = new DiscordSelectComponentOption( $"Rule {item.RuleNum}: {item.ShortDesc}", item.RuleNum.ToString(), item.RuleText.Length > 99 ? item.RuleText[..95] + "..." : item.RuleText); options.Add(option); } DiscordSelectComponent selectMenu = new DiscordSelectComponent("warnSelect", "Select a Rule!", options); var message = await ctx.FollowUpAsync(new DiscordFollowupMessageBuilder() .AddComponents(selectMenu) .WithContent("") .AsEphemeral(true)); var reaction = await Interactivity.WaitForSelectAsync(message, Mod, "warnSelect", TimeSpan.FromMinutes(2)); Rule = RuleService.rules.Single(x => x.RuleNum.ToString() == reaction.Result.Values.First()); await reaction.Result.Interaction.CreateResponseAsync(InteractionResponseType.DeferredMessageUpdate); return(message.Id); }
public async Task ShowTvShowSelection(TvShowRequest request, IReadOnlyList <SearchedTvShow> searchedTvShows) { var options = searchedTvShows.Take(15).Select(x => new DiscordSelectComponentOption(GetFormatedTvShowTitle(x), $"{request.CategoryId}/{x.TheTvDbId.ToString()}")).ToList(); var select = new DiscordSelectComponent($"TRS/{_interactionContext.User.Id}/{request.CategoryId}", Language.Current.DiscordCommandTvRequestHelpSearchDropdown, options); await _interactionContext.EditOriginalResponseAsync(new DiscordWebhookBuilder().AddComponents(select).WithContent(Language.Current.DiscordCommandTvRequestHelpSearch)); }
public async Task ShowMovieSelection(MovieRequest request, IReadOnlyList <Movie> movies) { var options = movies.Take(15).Select(x => new DiscordSelectComponentOption(GetFormatedMovieTitle(x), $"{request.CategoryId}/{x.TheMovieDbId}")).ToList(); var select = new DiscordSelectComponent($"MRS/{_interactionContext.User.Id}/{request.CategoryId}", Language.Current.DiscordCommandMovieRequestHelpDropdown, options); await _interactionContext.EditOriginalResponseAsync(new DiscordWebhookBuilder().AddComponents(select).WithContent(Language.Current.DiscordCommandMovieRequestHelp)); }
public async Task DisplayMultiSeasonSelectionAsync(TvShowRequest request, TvShow tvShow, TvSeason[] tvSeasons) { var embed = GenerateTvShowDetailsAsync(tvShow); var options = tvSeasons.Select(x => new DiscordSelectComponentOption(GetFormattedSeasonName(tvShow, x), $"{request.CategoryId}/{tvShow.TheTvDbId.ToString()}/{x.SeasonNumber.ToString()}")).ToList(); var seasonSelector = new DiscordSelectComponent($"TSS/{_interactionContext.User.Id}/{request.CategoryId}", Language.Current.DiscordCommandTvRequestHelpSeasonsDropdown, options); var builder = (await AddPreviousDropdownsAsync(tvShow, new DiscordWebhookBuilder().AddEmbed(embed))).AddComponents(seasonSelector).WithContent(Language.Current.DiscordCommandTvRequestHelpSeasons); await _interactionContext.EditOriginalResponseAsync(builder); }
private async Task <DiscordWebhookBuilder> AddPreviousDropdownsAsync(Movie movie, DiscordWebhookBuilder builder) { var previousMovieSelector = (DiscordSelectComponent)(await _interactionContext.GetOriginalResponseAsync()).Components.FirstOrDefault(x => x.Components.OfType <DiscordSelectComponent>().Any())?.Components?.Single(); if (previousMovieSelector != null) { var movieSelector = new DiscordSelectComponent(previousMovieSelector.CustomId, GetFormatedMovieTitle(movie), previousMovieSelector.Options); builder.AddComponents(movieSelector); } return(builder); }
private async Task <DiscordRole> GetUserRoleSelectionAsync(IEnumerable <DiscordRole> discordRoles, DiscordChannel channel, DiscordMember user, string messageContent = "Roles") { string interactionDropdownId = $"roleSelection-{Guid.NewGuid()}"; var roleOptions = discordRoles.Select(CreateSelectComponentOption); var roleDropdown = new DiscordSelectComponent(interactionDropdownId, null, roleOptions); var messageBuilder = new DiscordMessageBuilder().WithContent(messageContent).AddComponents(roleDropdown); var message = await messageBuilder.SendAsync(channel); var chosenOption = await message.WaitForSelectAsync(user, interactionDropdownId, null); await message.DeleteAsync(); var chosenRole = discordRoles.First(r => r.Id.ToString() == chosenOption.Result.Values[0]); return(chosenRole); }
public async Task GraphDefault(CommandContext ctx, DiscordUser user) { await ctx.TriggerTypingAsync(); DiscordMessageBuilder message = await GenerateCumulativeXpGraph(user.Id); var graphmsg = await ctx.RespondAsync(message); var selectsmsg = new DiscordMessageBuilder(); selectsmsg.WithContent("Change Graph"); var comp = new DiscordSelectComponent($"graphType {graphmsg.Id}{ctx.User.Id}", "Select Graph Type", new DiscordSelectComponentOption[] { new DiscordSelectComponentOption("XP", "xp"), new DiscordSelectComponentOption("Messages", "msg"), new DiscordSelectComponentOption("Non Cumulative XP", "ncxp"), new DiscordSelectComponentOption("Non Cumulative Messages", "ncmsg") }); selectsmsg.AddComponents(comp); await graphmsg.RespondAsync(selectsmsg); }
private async Task <DiscordWebhookBuilder> AddPreviousDropdownsAsync(TvShow tvShow, DiscordWebhookBuilder builder) { var selectors = (await _interactionContext.GetOriginalResponseAsync()).Components.SelectMany(x => x.Components).OfType <DiscordSelectComponent>(); DiscordSelectComponent previousTvSelector = selectors.FirstOrDefault(x => x.CustomId.StartsWith("TRS", true, null)); if (previousTvSelector != null) { var tvSelector = new DiscordSelectComponent(previousTvSelector.CustomId, GetFormatedTvShowTitle(tvShow), previousTvSelector.Options); builder.AddComponents(tvSelector); } DiscordSelectComponent previousSeasonSelector = selectors.FirstOrDefault(x => x.CustomId.StartsWith("TSS", true, null)); if (previousSeasonSelector != null) { if (!tvShow.AllSeasonsAvailable() && previousSeasonSelector != null && previousSeasonSelector.Options.Any(x => x.Value.Contains(tvShow.TheTvDbId.ToString(), StringComparison.OrdinalIgnoreCase))) { if (!_interactionContext.Data.CustomId.StartsWith("TRS", true, null)) { var newOptions = tvShow.Seasons.Select(x => new DiscordSelectComponentOption(GetFormattedSeasonName(tvShow, x), $"{tvShow.TheTvDbId.ToString()}/{x.SeasonNumber.ToString()}")).ToDictionary(x => x.Value, x => x); var oldOptions = previousSeasonSelector.Options; var currentOptions = oldOptions.Select(x => new DiscordSelectComponentOption(newOptions.ContainsKey(x.Value) ? newOptions[x.Value].Label : x.Label, x.Value)).ToList(); string defaultSelectedValue = currentOptions.First().Label; try { defaultSelectedValue = _interactionContext.Data.Values.Any() ? currentOptions.Single(x => x.Value == _interactionContext.Data.Values.Single()).Label : currentOptions.Single(x => x.Value == string.Join("/", _interactionContext.Data.CustomId.Split("/").Skip(2))).Label; } catch { } var seasonSelector = new DiscordSelectComponent(previousSeasonSelector.CustomId, defaultSelectedValue, currentOptions); builder.AddComponents(seasonSelector); } } } return(builder); }
public async Task Select_Interactive_Test_2(CommandContext ctx) { var input = ctx.Client.GetInteractivity(); var builder = new DiscordMessageBuilder(); builder.WithContent("This is a test! Select is valid for 30 seconds."); var opts = new[] { new DiscordSelectComponentOption("Label 1", "the first option", emoji: new DiscordComponentEmoji("⬜")), new DiscordSelectComponentOption("Label 2", "the second option", emoji: new DiscordComponentEmoji("🟦")), new DiscordSelectComponentOption("Label 3", "the third option", emoji: new DiscordComponentEmoji("⬛")), }; var select = new DiscordSelectComponent("yert", "Dropdowns!", opts, false); var btn1 = new DiscordButtonComponent(ButtonStyle.Primary, "no1", "Button 1!", true); var btn2 = new DiscordButtonComponent(ButtonStyle.Secondary, "no2", "Button 2!", true); var btn3 = new DiscordButtonComponent(ButtonStyle.Success, "no3", "Button 3!", true); builder.AddComponents(btn1, btn2, btn3); builder.AddComponents(select); var msg = await builder.SendAsync(ctx.Channel); wait: var res = await input.WaitForSelectAsync(msg, "yert", TimeSpan.FromSeconds(30)); if (res.TimedOut) { await ctx.RespondAsync("Sorry but it timed out!"); } else if (res.Result.Values.Length != 2) { goto wait; // I'm lazy. A while(true) or while (res?.Result.Values.Length != 2 ?? false) would be better. This duplicates messages. } else { await ctx.RespondAsync($"You selected {string.Join(", ", res.Result.Values)}"); } }
public async Task Help(CommandContext ctx) { BaseDiscordClient client = Program.discord; helpUser = ctx.User.Username; DiscordEmoji joystickEmoji = DiscordEmoji.FromName(client, ":joystick:"); DiscordEmoji filmEmoji = DiscordEmoji.FromName(client, ":film_frames:"); DiscordEmoji cloudEmoji = DiscordEmoji.FromName(client, ":cloud:"); var options = new List <DiscordSelectComponentOption>() { new DiscordSelectComponentOption("!records", "records_label", "Get the top 5 records of any level/category!", emoji: new DiscordComponentEmoji(joystickEmoji)), new DiscordSelectComponentOption("!reptomp4", "replay_label", "Convert your replays into Mp4s!", emoji: new DiscordComponentEmoji(filmEmoji)), new DiscordSelectComponentOption("!host", "host_label", "Easily host your replay files!", emoji: new DiscordComponentEmoji(cloudEmoji)) }; var dropdown = new DiscordSelectComponent("dropdown", null, options, false, 1, 1); var builder = new DiscordMessageBuilder().WithContent("What command would you like to learn about?").AddComponents(dropdown); await builder.SendAsync(ctx.Channel); }
public async Task RequestRule(ContextMenuContext ctx = null) { List <DiscordSelectComponentOption> options = new List <DiscordSelectComponentOption>(); foreach (var item in RuleService.rules) { if (item.RuleNum == 0) { options.Add(new DiscordSelectComponentOption( $"OTHER", item.RuleNum.ToString())); continue; } var option = new DiscordSelectComponentOption( $"Rule {item.RuleNum}: {item.ShortDesc}", item.RuleNum.ToString(), item.RuleText.Length > 99 ? item.RuleText[..95] + "..." : item.RuleText); options.Add(option); } DiscordSelectComponent selectMenu = new DiscordSelectComponent("warnSelect", "Select a Rule!", options); DiscordMessageBuilder messageBuilder = new DiscordMessageBuilder() .AddComponents(selectMenu) .WithContent(""); DiscordMessage message = await WarnChannel.SendMessageAsync(messageBuilder); if (!(ctx is null)) { await ctx.FollowUpAsync(new DiscordFollowupMessageBuilder { Content = message.JumpLink.ToString() }); } var reaction = await Interactivity.WaitForSelectAsync(message, Mod, "warnSelect", TimeSpan.FromMinutes(2)); Rule = RuleService.rules.Single(x => x.RuleNum.ToString() == reaction.Result.Values.First()); await message.DeleteAsync(); }