Пример #1
0
        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));
        }
Пример #3
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
    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);
        }
Пример #9
0
        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)}");
            }
        }
Пример #10
0
        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);
        }
Пример #11
0
        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();
        }