Skip to content

Commit 699283b

Browse files
committed
round 2 of crazy new feature with a global manager setup for listening to a message sent
1 parent 9547d3a commit 699283b

File tree

13 files changed

+224
-280
lines changed

13 files changed

+224
-280
lines changed

src/main/java/net/discordjug/javabot/data/config/GuildConfig.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@
1818
import java.lang.reflect.Field;
1919
import java.nio.file.Files;
2020
import java.nio.file.Path;
21+
import java.util.HashSet;
2122
import java.util.List;
2223
import java.util.Optional;
24+
import java.util.Set;
2325

2426
/**
2527
* A collection of guild-specific configuration items, each of which represents
@@ -56,8 +58,7 @@ public GuildConfig(Guild guild, Path file) {
5658
this.starboardConfig = new StarboardConfig();
5759
this.messageCacheConfig = new MessageCacheConfig();
5860
this.serverLockConfig = new ServerLockConfig();
59-
this.blacklistedMessageExtensions = List.of("application/x-msdos-program", "application/java-archive",
60-
"application/zip");
61+
this.blacklistedMessageExtensions = List.of("jar", "exe", "zip");
6162
this.setGuild(guild);
6263
}
6364

src/main/java/net/discordjug/javabot/listener/BlacklistedMessageAttachmentListener.java

Lines changed: 0 additions & 70 deletions
This file was deleted.

src/main/java/net/discordjug/javabot/listener/HugListener.java

Lines changed: 0 additions & 120 deletions
This file was deleted.

src/main/java/net/discordjug/javabot/listener/MessageLinkListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public void onMessageReceived(@NotNull MessageReceivedEvent event) {
4949
List.of(ActionRow.of(
5050
Button.link(m.getJumpUrl(), "Jump to Message"),
5151
Button.secondary(InteractionUtils.createDeleteInteractionId(event.getAuthor().getIdLong(), m.getAuthor().getIdLong()), "\uD83D\uDDD1️"))),
52-
null));
52+
null, null));
5353
}, e -> ExceptionLogger.capture(e, getClass().getSimpleName())));
5454
}
5555
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package net.discordjug.javabot.listener.handler;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import net.discordjug.javabot.data.config.BotConfig;
5+
import net.discordjug.javabot.data.config.GuildConfig;
6+
import net.dv8tion.jda.api.EmbedBuilder;
7+
import net.dv8tion.jda.api.entities.Message;
8+
import net.dv8tion.jda.api.entities.MessageEmbed;
9+
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
10+
import org.springframework.stereotype.Component;
11+
12+
import java.util.List;
13+
14+
@Component
15+
@RequiredArgsConstructor
16+
public class BlacklistedMessageAttachmentFilter implements MessageFormatFilter {
17+
18+
private final BotConfig botConfig;
19+
20+
@Override
21+
public boolean processMessage(MessageReceivedEvent event, StringBuilder builder, List<Message.Attachment> attachments, List<MessageEmbed> embeds) {
22+
GuildConfig guildConfig = botConfig.get(event.getGuild());
23+
List<String> blacklistedMessageExtensions = guildConfig.getBlacklistedMessageExtensions();
24+
boolean removed = attachments.removeIf(attachment -> blacklistedMessageExtensions.contains(attachment.getFileExtension()));
25+
if (removed) {
26+
MessageEmbed attachmentRemovedInfo = new EmbedBuilder()
27+
.setDescription("Disallowed attachments have been removed from this message.")
28+
.build();
29+
embeds.add(attachmentRemovedInfo);
30+
return true;
31+
} else {
32+
return false;
33+
}
34+
}
35+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package net.discordjug.javabot.listener.handler;
2+
3+
import net.dv8tion.jda.api.entities.Message;
4+
import net.dv8tion.jda.api.entities.MessageEmbed;
5+
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
6+
import org.springframework.stereotype.Component;
7+
8+
import java.util.List;
9+
import java.util.Objects;
10+
import java.util.regex.Matcher;
11+
import java.util.regex.Pattern;
12+
13+
@Component
14+
public class HugFilter implements MessageFormatFilter {
15+
16+
private static final Pattern FUCKER = Pattern.compile(
17+
"(fuck)(ing|er|ed|k+)?",
18+
Pattern.CASE_INSENSITIVE
19+
);
20+
21+
@Override
22+
public boolean processMessage(MessageReceivedEvent event, StringBuilder builder, List<Message.Attachment> attachments, List<MessageEmbed> embeds) {
23+
replaceFucks(builder);
24+
return true;
25+
}
26+
27+
public static void replaceFucks(StringBuilder sb) {
28+
Matcher matcher = FUCKER.matcher(sb);
29+
int offset = 0;
30+
31+
while (matcher.find()) {
32+
String theFuck = matcher.group(1);
33+
String suffix = Objects.requireNonNullElse(matcher.group(2), "");
34+
35+
String processedSuffix = switch (suffix.toLowerCase()) {
36+
case "er", "ed", "ing" -> copyCase(suffix, 0, 'g') + suffix;
37+
case "" -> "";
38+
default -> copyCase(suffix, "g".repeat(suffix.length()));
39+
};
40+
41+
String replacement = processHug(theFuck) + processedSuffix;
42+
43+
int start = matcher.start() + offset;
44+
int end = matcher.end() + offset;
45+
46+
sb.replace(start, end, replacement);
47+
48+
offset += replacement.length() - (end - start);
49+
}
50+
}
51+
52+
private static String processHug(String originalText) {
53+
// FucK -> HuG, FuCk -> Hug, etc.
54+
return String.valueOf(copyCase(originalText, 0, 'h')) +
55+
copyCase(originalText, 1, 'u') +
56+
copyCase(originalText, 3, 'g');
57+
}
58+
59+
private static String copyCase(String source, String toChange) {
60+
if (source.length() != toChange.length()) {
61+
throw new IllegalArgumentException("lengths differ");
62+
}
63+
StringBuilder sb = new StringBuilder();
64+
for (int i = 0; i < source.length(); i++) {
65+
sb.append(copyCase(source, i, toChange.charAt(i)));
66+
}
67+
return sb.toString();
68+
}
69+
70+
private static char copyCase(String original, int index, char newChar) {
71+
return Character.isUpperCase(original.charAt(index)) ? Character.toUpperCase(newChar) : Character.toLowerCase(newChar);
72+
}
73+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package net.discordjug.javabot.listener.handler;
2+
3+
import net.dv8tion.jda.api.entities.Message;
4+
import net.dv8tion.jda.api.entities.MessageEmbed;
5+
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
6+
7+
import java.util.List;
8+
9+
public interface MessageFormatFilter {
10+
boolean processMessage(MessageReceivedEvent event, StringBuilder builder, List<Message.Attachment> attachments, List<MessageEmbed> embeds);
11+
}

0 commit comments

Comments
 (0)