public async Task FlagMessageAsync(CommandContext ctx, [Description("Message.")] DiscordMessage msg = null, [Description("Voting timespan.")] TimeSpan?timespan = null) { msg = msg ?? (await ctx.Channel.GetMessagesBeforeAsync(ctx.Channel.LastMessageId, 1))?.FirstOrDefault(); if (msg is null) { throw new CommandFailedException("Cannot retrieve the message!"); } if (timespan?.TotalSeconds < 5 || timespan?.TotalMinutes > 5) { throw new InvalidCommandUsageException("Timespan cannot be greater than 5 minutes or lower than 5 seconds."); } IEnumerable <PollEmoji> res = await msg.DoPollAsync(new[] { StaticDiscordEmoji.ArrowUp, StaticDiscordEmoji.ArrowDown }, PollBehaviour.Default, timeout : timespan ?? TimeSpan.FromMinutes(1)); var votes = res.ToDictionary(pe => pe.Emoji, pe => pe.Voted.Count); if (votes.GetValueOrDefault(StaticDiscordEmoji.ArrowDown) > 2 * votes.GetValueOrDefault(StaticDiscordEmoji.ArrowUp)) { string sanitized = FormatterExtensions.Spoiler(FormatterExtensions.StripMarkdown(msg.Content)); await msg.DeleteAsync(); await ctx.RespondAsync($"{msg.Author.Mention} said: {sanitized}"); } else { await this.InformOfFailureAsync(ctx, "Not enough downvotes required for deletion."); } }
public async Task DoPoll(CommandContext ctx, DiscordMessage msg, TimeSpan duration, DiscordEmoji[] emojis) { var results = await msg.DoPollAsync(emojis, timeoutOverride : duration); foreach (var result in results) { await ctx.Channel.SendMessageAsync($"{result.Emoji}: {result.Total}"); } }
public async Task DoPoll(CommandContext ctx, DiscordMessage msg, TimeSpan?duration = null) { if (duration == null) { duration = TimeSpan.FromMinutes(5); } DiscordEmoji thumbsUp = DiscordEmoji.FromName(ctx.Client, ":+1:"); DiscordEmoji thumbsDown = DiscordEmoji.FromName(ctx.Client, ":-1:"); DiscordEmoji[] emojis = new DiscordEmoji[] { thumbsUp, thumbsDown }; var results = await msg.DoPollAsync(emojis, timeoutOverride : duration); foreach (var result in results) { await ctx.Channel.SendMessageAsync($"{result.Emoji}: {result.Total}"); } }