Пример #1
0
        public async Task Run(InteractiveBase context)
        {
            // Subscribe to edit/delete events for the duration of the run
            context.Interactive.Discord.MessageUpdated += OnMessageUpdated;
            context.Interactive.Discord.MessageDeleted += OnMessageDeleted;

            while (true)
            {
                // Wait for a new input from the user, or for some other event to interrupt
                var command = await context.NextMessageAsync(true, true, null, _cts.Token);

                _cts = new CancellationTokenSource();

                // Apply changes to inputs (edits/deletions)
                ApplyEdits();
                await ApplyDeletions();

                // Add new inputs and exit if necessary
                if (await ApplyNew(context, command))
                {
                    await context.Context.Channel.SendMessageAsync("Ended session.");

                    break;
                }

                // Re-Evaluate all of the messages from the top again and edit the responses into place
                await Evaluate();

                // Wait a short while to ratelimit jupyter session evaluation load
                await Task.Delay(1500);
            }
        }
Пример #2
0
        public static async Task <T> SelectItem <T>(this InteractiveBase <ShardedCommandContext> interactive, IList <T> items, EmbedBuilder embed)
        {
            if (items.Count <= 1)
            {
                return(items.FirstOrDefault());
            }

            var msg = await interactive.Context.Channel.SendMessageAsync(embed : embed.Build());

            var response = await interactive.NextMessageAsync(
                new Criteria <IMessage>()
                .AddCriterion(new EnsureSourceUserCriterion())
                .AddCriterion(new EnsureSourceChannelCriterion())
                .AddCriterion(new EnsureRangeCriterion(items.Count, Program.GetPrefix(interactive.Context))),
                new TimeSpan(0, 0, 23));

            _ = msg.DeleteAsync();
            int i;

            try
            {
                i = int.Parse(response.Content);
            }
            catch
            {
                _ = interactive.Context.Message.DeleteAsync();
                return(default);
Пример #3
0
        public async static Task <Marriage> SelectMarriage(List <Marriage> marriages, InteractiveBase <ShardedCommandContext> interactive)
        {
            if (interactive != null)
            {
                if (marriages.Count > 0)
                {
                    var msg = await interactive.Context.Channel.SendMessageAsync(embed : ListMarriageEmbed(marriages, interactive.Context.User)
                                                                                 .WithDescription("Enter the number of the user you wish to select.")
                                                                                 .WithFooter("Times out in 23 seconds.")
                                                                                 .Build());

                    var response = await interactive.NextMessageAsync(
                        new Criteria <IMessage>()
                        .AddCriterion(new EnsureSourceUserCriterion())
                        .AddCriterion(new EnsureSourceChannelCriterion())
                        .AddCriterion(new EnsureRangeCriterion(marriages.Count, Program.GetPrefix(interactive.Context))),
                        new TimeSpan(0, 0, 23));

                    _ = msg.DeleteAsync();
                    int i;
                    try
                    {
                        i = int.Parse(response.Content);
                    }
                    catch
                    {
                        _ = interactive.Context.Message.DeleteAsync();
                        return(null);
                    }
                    _ = response.DeleteAsync();

                    return(marriages[i - 1]);
                }
            }
            return(null);
        }