Skip to content

Instantly share code, notes, and snippets.

@skidvis
Created September 2, 2020 22:30
Show Gist options
  • Save skidvis/f432e1949750ae2439a4c6b80ac378c4 to your computer and use it in GitHub Desktop.
Save skidvis/f432e1949750ae2439a4c6b80ac378c4 to your computer and use it in GitHub Desktop.
Purge command
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using DSharpPlus;
using DSharpPlus.CommandsNext;
using DSharpPlus.CommandsNext.Attributes;
using DSharpPlus.Entities;
namespace SharkBot.Commands
{
class PurgeCommands : BaseCommandModule
{
[Command("purge")]
[Description("Purges a given channel's messages with a filter")]
[RequirePermissions(Permissions.ManageMessages)]
public async Task Purge(
CommandContext ctx,
[Description("How many messages to purge")]
int messageCount,
[Description("**Match string**")] string filter = null,
[Description("***Optional***")] [RemainingText]
string args = null)
{
filter = filter?.ToLower();
List<DiscordMessage> messagesToPurge = null;
await ctx.Message.DeleteAsync();
if (messageCount <= 100)
{
IReadOnlyList<DiscordMessage> allMessages;
if (filter == null)
{
allMessages = await ctx.Channel.GetMessagesAsync(messageCount);
messagesToPurge = allMessages.Reverse().Take(messageCount).ToList();
await ctx.Channel.DeleteMessagesAsync(messagesToPurge, null);
}
else if (filter == "match" && args != null)
{
allMessages = await ctx.Channel.GetMessagesAsync(messageCount);
messagesToPurge = allMessages.Where(x => x.Content.Contains(args)).ToList();
await ctx.Channel.DeleteMessagesAsync(messagesToPurge, null);
}
else
{
await ctx.Channel.SendMessageAsync("You fucked up, try the command again");
}
if (messagesToPurge != null)
{
await ctx.Channel.SendMessageAsync($"Deleted : {messagesToPurge.Count()} messages");
}
var logChannel = ctx.Guild.Channels.Values.FirstOrDefault(x => x.Name.ToLower() == "training");
if (logChannel != null && messagesToPurge != null)
{
await logChannel.SendMessageAsync(
$"{ctx.Message.Author.Username} purged {messagesToPurge.Count()} messages from {ctx.Message.Channel.Name}");
}
}
else
{
await ctx.Channel.SendMessageAsync("Woah there, I can only delete 100 messages. Try again please.",
false, null, null);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment