Esempio n. 1
0
        public async Task Poll(CommandContext ctx,
                               [Description("How long the poll should last.")] TimeSpan duration,
                               [Description("What options should the poll have.")] params DiscordEmoji[] options)
        {
            ctx.Client.DebugLogger.LogMessage(LogLevel.Info, "PotatoBot", $"{ctx.Member.Username} started a poll between: {options.ToString()}", DateTime.Now);

            // Load interactivity module and poll options
            InteractivityModule interactivity = ctx.Client.GetInteractivityModule();
            var pollOptions = options.Select(xe => xe.ToString());

            // Display the poll
            var embed = new DiscordEmbedBuilder {
                Title       = "Poll Time!",
                Color       = DiscordColor.DarkButNotBlack,
                Description = "Choose your fighter: " + string.Join(" ", pollOptions)
            };
            DiscordMessage msg = await ctx.RespondAsync(embed : embed);

            // Add options as reactions
            for (int i = 0; i < options.Length; i++)
            {
                await msg.CreateReactionAsync(options[i]);
            }

            // Collect responses
            ReactionCollectionContext pollResult = await interactivity.CollectReactionsAsync(msg, duration); //TODO: Why this not working?

            var results = pollResult.Reactions.Where(xkvp => options.Contains(xkvp.Key))
                          .Select(xkvp => $"{xkvp.Key}: {xkvp.Value}");

            // Post response
            await ctx.RespondAsync(string.Join("\n", results));
        }
        public async Task Poll(CommandContext ctx, [Description("How long should the poll last.")] TimeSpan duration, [Description("What options should people have.")] params DiscordEmoji[] options)
        {
            // first retrieve the interactivity module from the client
            InteractivityModule interactivity = ctx.Client.GetInteractivityModule();
            var poll_options = options.Select(xe => xe.ToString());

            // then let's present the poll
            DiscordEmbedBuilder embed = new DiscordEmbedBuilder
            {
                Title       = "Poll time!",
                Description = string.Join(" ", poll_options)
            };
            DiscordMessage msg = await ctx.RespondAsync(embed : embed);

            // add the options as reactions
            for (int i = 0; i < options.Length; i++)
            {
                await msg.CreateReactionAsync(options[i]);
            }

            // collect and filter responses
            ReactionCollectionContext poll_result = await interactivity.CollectReactionsAsync(msg, duration);

            var results = poll_result.Reactions.Where(xkvp => options.Contains(xkvp.Key))
                          .Select(xkvp => $"{xkvp.Key}: {xkvp.Value}");

            // and finally post the results
            await ctx.RespondAsync(string.Join("\n", results));
        }
Esempio n. 3
0
        private async void CheckRequests()
        {
            while (CheckingEnabled)
            {
                foreach (var v in Requests)
                {
                    var res = await interactivity.CollectReactionsAsync(v.Key);

                    int oks = 0, nos = 0;
                    var r = v.Key.Reactions;
                    foreach (var e in res.Reactions)
                    {
                        if (e.Key.Name == emoji_ok)
                        {
                            oks = e.Value;
                        }
                        else if (e.Key.Name == emoji_not)
                        {
                            nos = e.Value;
                        }
                    }

                    if (oks > 1)
                    {
                        signups.Add(v.Value);
                        Requests.Remove(v.Key);
                    }
                    else if (nos > 0)
                    {
                        Requests.Remove(v.Key);
                    }
                }

                Task.Delay(300).Wait();
            }
        }