Skip to content

Commit 78d8f5b

Browse files
committed
Added clear command and functionality
1 parent d5b96b0 commit 78d8f5b

File tree

3 files changed

+126
-0
lines changed

3 files changed

+126
-0
lines changed

src/main/java/com/github/bustedearlobes/themis/Themis.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.logging.Level;
1111
import java.util.logging.Logger;
1212

13+
import com.github.bustedearlobes.themis.commands.ClearCommand;
1314
import com.github.bustedearlobes.themis.commands.CommandListener;
1415
import com.github.bustedearlobes.themis.commands.HelpCommand;
1516
import com.github.bustedearlobes.themis.commands.MuteCommand;
@@ -107,6 +108,7 @@ private void initCommandListener() {
107108
commandListener.register(new UnmuteCommand());
108109
commandListener.register(new ShutdownCommand());
109110
commandListener.register(new HelpCommand());
111+
commandListener.register(new ClearCommand());
110112
}
111113

112114
/**
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.github.bustedearlobes.themis.commands;
2+
3+
import java.util.regex.Matcher;
4+
5+
import com.github.bustedearlobes.themis.Themis;
6+
import com.github.bustedearlobes.themis.taskmanager.ClearMessagesTask;
7+
8+
import net.dv8tion.jda.core.JDA;
9+
import net.dv8tion.jda.core.entities.Message;
10+
import net.dv8tion.jda.core.entities.TextChannel;
11+
12+
public class ClearCommand extends Command {
13+
private static final String REGEX = "^clear( @\\w+)+( #\\w+)+( (\\d+))*$";
14+
private static final int DEFAULT_CLEAR_NUMBER = 100;
15+
16+
public ClearCommand() {
17+
super("clear", REGEX);
18+
}
19+
20+
@Override
21+
public void onCall(Matcher fullCommand, Message message, JDA jda, Themis themis) {
22+
TextChannel targetChannel = message.getTextChannel();
23+
if(message.getMentionedChannels().size() > 0) {
24+
targetChannel = message.getMentionedChannels().get(0);
25+
}
26+
int numOfMessages = DEFAULT_CLEAR_NUMBER;
27+
if(fullCommand.group(3) != null) {
28+
numOfMessages = Integer.parseInt(fullCommand.group(4));
29+
}
30+
ClearMessagesTask cmt = new ClearMessagesTask(message.getMentionedUsers().get(0),
31+
targetChannel,
32+
numOfMessages,
33+
message.getTextChannel());
34+
themis.getTaskManager().addTaskToScheduler(cmt);
35+
}
36+
37+
@Override
38+
public String getDiscription() {
39+
return "Clears messages from a particular user. If no channel is defined, "
40+
+ "defaults to the channel the command was sent from. "
41+
+ "If no amount is defined, defaults to clearing last "
42+
+ DEFAULT_CLEAR_NUMBER + " messages.";
43+
}
44+
45+
@Override
46+
public String getHumanReadablePattern() {
47+
return "@user(0,1) #channel(0,1) number(0,1)";
48+
}
49+
50+
@Override
51+
public String getExampleUsage() {
52+
return "@naughty#6436 #general 100";
53+
}
54+
55+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
2+
package com.github.bustedearlobes.themis.taskmanager;
3+
4+
import java.util.List;
5+
import java.util.logging.Logger;
6+
import java.util.stream.Collectors;
7+
8+
import net.dv8tion.jda.core.entities.Guild;
9+
import net.dv8tion.jda.core.entities.Message;
10+
import net.dv8tion.jda.core.entities.TextChannel;
11+
import net.dv8tion.jda.core.entities.User;
12+
13+
public class ClearMessagesTask extends InstantTask {
14+
private static final long serialVersionUID = 1L;
15+
16+
private static final Logger LOG = Logger.getLogger("Themis");
17+
18+
private String guildId;
19+
private String targetUserId;
20+
private String targetChannelId;
21+
private String loggingChannelId;
22+
private int numberOfMessages;
23+
24+
public ClearMessagesTask(User user, TextChannel targetChannel, int messages, TextChannel loggingChannel) {
25+
targetUserId = user.getId();
26+
guildId = targetChannel.getGuild().getId();
27+
targetChannelId = targetChannel.getId();
28+
loggingChannelId = loggingChannel.getId();
29+
numberOfMessages = messages;
30+
}
31+
32+
@Override
33+
protected void runTask() {
34+
Guild guild = getGuildById(guildId);
35+
TextChannel targetChannel = getTextChannelById(targetChannelId, guild);
36+
List<Message> messages = targetChannel.getIterableHistory().stream()
37+
.limit(numberOfMessages)
38+
.filter(m -> m.getAuthor().getId().equals(targetUserId))
39+
.collect(Collectors.toList());
40+
if(messages.size() < 2) {
41+
if(messages.size() > 0) {
42+
messages.get(0).delete().complete();
43+
}
44+
} else {
45+
targetChannel.deleteMessages(messages).complete();
46+
}
47+
String messageString = messages.size() == 1 ? "message" : "messages";
48+
String userName = getUserById(targetUserId).getName();
49+
LOG.info("Cleared "
50+
+ messages.size()
51+
+ " "
52+
+ messageString
53+
+ " from "
54+
+ userName
55+
+ "@"
56+
+ targetChannel.getName()
57+
+ " in guild "
58+
+ guild.getName());
59+
TextChannel loggingChannel = getTextChannelById(loggingChannelId, guild);
60+
loggingChannel.sendMessage("Cleared "
61+
+ messages.size()
62+
+ " "
63+
+ messageString
64+
+ " from "
65+
+ userName).complete();
66+
67+
}
68+
69+
}

0 commit comments

Comments
 (0)