Ejemplo n.º 1
0
        /// <summary>
        /// Method for configuring <see cref="InteractivityExtension"/>, accessing each configuration individually.
        /// </summary>
        /// <param name="timeout">Sets the default interactivity action timeout. Defaults to 5 minutes.</param>
        /// <param name="pollBehaviour">What to do after the poll ends. Defaults to <see cref="PollBehaviour.DeleteEmojis"/>.</param>
        /// <param name="paginationEmojis">Emojis to use for pagination. Defaults to <see langword="null"/>.</param>
        /// <param name="paginationBehaviour">How to handle pagination. Defaults to <see cref="PaginationBehaviour.WrapAround"/>.</param>
        /// <param name="paginationDeletion">How to handle pagination deletion. Defaults to <see cref="PaginationDeletion.DeleteEmojis"/>.</param>
        public void InteractivitySetup(TimeSpan?timeout = null, PollBehaviour pollBehaviour = PollBehaviour.DeleteEmojis, PaginationEmojis paginationEmojis = null,
                                       PaginationBehaviour paginationBehaviour = PaginationBehaviour.WrapAround, PaginationDeletion paginationDeletion = PaginationDeletion.DeleteEmojis)
        {
            _discordClient.IsNotNull(this.MessageErrorDiscordClientIsNull);

            _interactivity = _discordClient.UseInteractivity(new InteractivityConfiguration
            {
                Timeout             = timeout ?? TimeSpan.FromMinutes(5),
                PollBehaviour       = pollBehaviour,
                PaginationEmojis    = paginationEmojis ?? new PaginationEmojis(),
                PaginationBehaviour = paginationBehaviour,
                PaginationDeletion  = paginationDeletion
            });
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Does a poll on a message
 /// </summary>
 /// <param name="m">Message to do a poll on.</param>
 /// <param name="emojis">Emojis to poll.</param>
 /// <param name="behaviour">Poll behaviour.</param>
 /// <param name="timeout">Override timeout period.</param>
 /// <returns></returns>
 public static async Task <ReadOnlyCollection <PollEmoji> > DoPollAsync(this DiscordMessage m, DiscordEmoji[] emojis, PollBehaviour behaviour,
                                                                        TimeSpan?timeout = null)
 => await((DiscordClient)m.Discord).GetInteractivity().DoPollAsync(m, emojis, behaviour, timeout);
Ejemplo n.º 3
0
        /// <summary>
        /// Makes a poll and returns poll results.
        /// </summary>
        /// <param name="m">Message to create poll on.</param>
        /// <param name="emojis">Emojis to use for this poll.</param>
        /// <param name="behaviour">What to do when the poll ends.</param>
        /// <param name="timeout">override timeout period.</param>
        /// <returns></returns>
        public async Task <ReadOnlyCollection <PollEmoji> > DoPollAsync(DiscordMessage m, DiscordEmoji[] emojis, PollBehaviour behaviour = PollBehaviour.Default, TimeSpan?timeout = null)
        {
            if (emojis.Count() < 1)
            {
                throw new ArgumentException("You need to provide at least one emoji for a poll!");
            }

            foreach (var em in emojis)
            {
                await m.CreateReactionAsync(em);
            }
            var res = await Poller.DoPollAsync(new PollRequest(m, timeout ?? this.Config.Timeout, emojis));

            var pollbehaviour = behaviour == PollBehaviour.Default ? this.Config.PollBehaviour : behaviour;
            var thismember    = await m.Channel.Guild.GetMemberAsync(Client.CurrentUser.Id);

            if (pollbehaviour == PollBehaviour.DeleteEmojis && m.Channel.PermissionsFor(thismember).HasPermission(Permissions.ManageMessages))
            {
                await m.DeleteAllReactionsAsync();
            }

            return(new ReadOnlyCollection <PollEmoji>(res.ToList()));
        }