Skip to content

Commit d8932a8

Browse files
committed
Made more readable.
1 parent 2d4e2a9 commit d8932a8

File tree

5 files changed

+283
-123
lines changed

5 files changed

+283
-123
lines changed

src/main/java/net/javadiscord/javabot/data/config/guild/HelpConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public class HelpConfig extends GuildConfigItem {
5555
* should use discord's code-formatting, provided the bot detects unformatted code.
5656
* Issued by {@link net.javadiscord.javabot.systems.help.AutoCodeFormatter}
5757
*/
58-
private String formatHintMessage = "> Please format your code to make it more readable. \n> For java, it should look like this: \n```\u200B`\u200B`\u200B`\u200Bjava\npublic void foo() {\n \n}\u200B`\u200B`\u200B`\u200B```";
58+
private String formatHintMessage = "> Please format your code to make it more readable. \n> For java, it should look like this: \n```\u200B`\u200B`\u200B`\u200Bjava\npublic void foo() {\n \n}\n\u200B`\u200B`\u200B`\u200B```";
5959

6060
/**
6161
* The message that's sent when a user unreserved a channel where other users
@@ -103,7 +103,7 @@ public class HelpConfig extends GuildConfigItem {
103103
* The message-embed's footnote of an unformatted-code-replacement.
104104
* Issued by {@link net.javadiscord.javabot.systems.help.AutoCodeFormatter}
105105
*/
106-
private String autoformatInfoMessage = "This message has been formatted automatically.";
106+
private String autoFormatInfoMessage = "This message has been formatted automatically.";
107107

108108
/**
109109
* The amount of experience points one gets for being thanked by the help channel owner.

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

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,26 @@
2222
@Slf4j
2323
@RequiredArgsConstructor
2424
public class HugListener extends ListenerAdapter {
25-
private static final Pattern FUCKER = Pattern.compile("(fuck)(ing|er|ed|k+)?", Pattern.CASE_INSENSITIVE);
25+
private static final Pattern FUCKER = Pattern.compile(
26+
"(fuck)(ing|er|ed|k+)?",
27+
Pattern.CASE_INSENSITIVE
28+
);
2629
private final AutoMod autoMod;
2730
private final BotConfig botConfig;
2831

2932
private static String processHug(String originalText) {
3033
// FucK -> HuG, FuCk -> Hug
31-
return String.valueOf(copyCase(originalText, 0, 'h')) + copyCase(originalText, 1, 'u') + copyCase(originalText, 3, 'g');
34+
return String.valueOf(copyCase(originalText, 0, 'h')) + copyCase(originalText, 1, 'u') +
35+
copyCase(originalText, 3, 'g');
3236
}
3337

3438
private static String replaceFucks(String str) {
3539
return FUCKER.matcher(str).replaceAll(matchResult -> {
3640
String theFuck = matchResult.group(1);
3741
String suffix = Objects.requireNonNullElse(matchResult.group(2), "");
3842
String processedSuffix = switch (suffix.toLowerCase()) {
39-
case "er", "ed", "ing" -> copyCase(suffix, 0, 'g') + suffix; // fucking, fucker, fucked
43+
case "er", "ed", "ing" ->
44+
copyCase(suffix, 0, 'g') + suffix; // fucking, fucker, fucked
4045
case "" -> ""; // just fuck
4146
default -> copyCase(suffix, "g".repeat(suffix.length())); // fuckkkkk...
4247
};
@@ -45,7 +50,9 @@ private static String replaceFucks(String str) {
4550
}
4651

4752
private static String copyCase(String source, String toChange) {
48-
if (source.length() != toChange.length()) throw new IllegalArgumentException("lengths differ");
53+
if (source.length() != toChange.length()) {
54+
throw new IllegalArgumentException("lengths differ");
55+
}
4956
StringBuilder sb = new StringBuilder();
5057
for (int i = 0; i < source.length(); i++) {
5158
sb.append(copyCase(source, i, toChange.charAt(i)));
@@ -66,7 +73,8 @@ public void onMessageReceived(@Nonnull MessageReceivedEvent event) {
6673
if (!event.isFromGuild()) {
6774
return;
6875
}
69-
if (autoMod.hasSuspiciousLink(event.getMessage()) || autoMod.hasAdvertisingLink(event.getMessage())) {
76+
if (autoMod.hasSuspiciousLink(event.getMessage()) ||
77+
autoMod.hasAdvertisingLink(event.getMessage())) {
7078
return;
7179
}
7280
if (!event.getMessage().getMentions().getUsers().isEmpty()) {
@@ -75,26 +83,38 @@ public void onMessageReceived(@Nonnull MessageReceivedEvent event) {
7583
if (event.isWebhookMessage()) {
7684
return;
7785
}
78-
if (event.getChannel().getIdLong() == botConfig.get(event.getGuild()).getModerationConfig().getSuggestionChannelId()) {
86+
if (event.getChannel().getIdLong() == botConfig.get(event.getGuild())
87+
.getModerationConfig()
88+
.getSuggestionChannelId()) {
7989
return;
8090
}
8191
TextChannel tc = null;
8292
if (event.isFromType(ChannelType.TEXT)) {
8393
tc = event.getChannel().asTextChannel();
8494
}
8595
if (event.isFromThread()) {
86-
StandardGuildChannel parentChannel = event.getChannel().asThreadChannel().getParentChannel().asStandardGuildChannel();
96+
StandardGuildChannel parentChannel = event.getChannel()
97+
.asThreadChannel()
98+
.getParentChannel()
99+
.asStandardGuildChannel();
87100
if (parentChannel instanceof TextChannel textChannel) {
88101
tc = textChannel;
89102
}
90103
}
91104
if (tc == null) {
92105
return;
106+
93107
}
94108
String content = event.getMessage().getContentRaw();
95109
if (FUCKER.matcher(content).find()) {
96110
long threadId = event.isFromThread() ? event.getChannel().getIdLong() : 0;
97-
WebhookUtil.ensureWebhookExists(tc, wh -> WebhookUtil.replaceMemberMessage(wh, event.getMessage(), replaceFucks(content), threadId), e -> ExceptionLogger.capture(e, getClass().getSimpleName()));
111+
WebhookUtil.ensureWebhookExists(
112+
tc,
113+
wh -> WebhookUtil.replaceMemberMessage(wh, event.getMessage(),
114+
replaceFucks(content), threadId
115+
),
116+
e -> ExceptionLogger.capture(e, getClass().getSimpleName())
117+
);
98118
}
99119
}
100120

Lines changed: 92 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package net.javadiscord.javabot.systems.help;
22

3-
import lombok.AllArgsConstructor;
3+
import lombok.RequiredArgsConstructor;
44
import net.dv8tion.jda.api.EmbedBuilder;
55
import net.dv8tion.jda.api.entities.Guild;
66
import net.dv8tion.jda.api.entities.MessageEmbed;
@@ -13,6 +13,7 @@
1313
import net.javadiscord.javabot.util.WebhookUtil;
1414
import org.jetbrains.annotations.NotNull;
1515
import org.jetbrains.annotations.Nullable;
16+
import org.springframework.stereotype.Component;
1617

1718
import javax.annotation.Nonnull;
1819
import java.util.Objects;
@@ -21,28 +22,36 @@
2122
* Handles auto-formatting of code in help-channels.
2223
* A non-listener class since it has to be called strictly after {@link HelpListener} to not send its messages before channel reserving.
2324
*/
24-
@AllArgsConstructor
25+
@RequiredArgsConstructor
26+
@Component
2527
public class AutoCodeFormatter {
2628
private final AutoMod autoMod;
2729
private final BotConfig botConfig;
2830
private final UserPreferenceService preferenceService;
2931

3032
/**
31-
* Method responsible for finding a codeblock, if present.
33+
* Method responsible for finding a place to insert a codeblock, if present.
3234
*
3335
* @param event a {@link MessageReceivedEvent}.
34-
* @return a MessageCodeblock instance, holding a startIndex, content and an endIndex
36+
* @return a MessageCodeblock instance, holding a startIndex, content and
37+
* an endIndex. Returns null if no place was found.
3538
*/
3639
@Nullable
37-
private static AutoCodeFormatter.CodeBlock findCodeblock(@NotNull MessageReceivedEvent event) {
40+
private static CodeBlock findCodeblock(@NotNull MessageReceivedEvent event) {
3841
String msg = event.getMessage().getContentRaw();
3942
int openingBracket = msg.indexOf("{");
4043
int closingBracket = msg.lastIndexOf("}");
41-
if (closingBracket == -1 || openingBracket == -1) return null;
44+
if (closingBracket == -1 || openingBracket == -1) {
45+
return null;
46+
}
4247
int startIndex = msg.lastIndexOf("\n", openingBracket);
4348
int endIndex = msg.indexOf("\n", closingBracket);
44-
if (startIndex == -1) startIndex = 0;
45-
if (endIndex == -1) endIndex = msg.length();
49+
if (startIndex == -1) {
50+
startIndex = 0;
51+
}
52+
if (endIndex == -1) {
53+
endIndex = msg.length();
54+
}
4655
return new CodeBlock(startIndex, endIndex);
4756
}
4857

@@ -51,52 +60,105 @@ private static AutoCodeFormatter.CodeBlock findCodeblock(@NotNull MessageReceive
5160
* It is worth noting that this class can't register as an event handler itself due to there being no way of
5261
* setting its methods to be strictly called after {@link HelpListener}.
5362
*
54-
* @param event a {@link MessageReceivedEvent}
63+
* @param event a {@link MessageReceivedEvent}
64+
* @param isFirstMessage flag that should be set if the message is a thread-opening one.
5565
*/
56-
public void handleMessageEvent(@Nonnull MessageReceivedEvent event) {
57-
if (!event.isFromGuild()) return;
58-
if (event.getAuthor().isBot() || event.getMessage().getAuthor().isSystem()) return;
59-
if (autoMod.hasSuspiciousLink(event.getMessage()) || autoMod.hasAdvertisingLink(event.getMessage())) return;
60-
if (event.isWebhookMessage()) return;
61-
if (!event.isFromThread()) return;
62-
if (event.getChannel().asThreadChannel().getParentChannel().getIdLong() != botConfig.get(event.getGuild()).getHelpConfig().getHelpForumChannelId()) {
66+
protected void handleMessageEvent(@Nonnull MessageReceivedEvent event, boolean isFirstMessage) {
67+
if (!event.isFromGuild()) {
68+
return;
69+
}
70+
if (event.getAuthor().isBot() || event.getMessage()
71+
.getAuthor()
72+
.isSystem()) {
6373
return;
6474
}
65-
if (!Boolean.parseBoolean(preferenceService.getOrCreate(Objects.requireNonNull(event.getMember()).getIdLong(), Preference.FORMAT_UNFORMATTED_CODE).getState())) {
75+
if (autoMod.hasSuspiciousLink(event.getMessage()) ||
76+
autoMod.hasAdvertisingLink(event.getMessage())) {
77+
return;
78+
}
79+
if (event.isWebhookMessage()) {
80+
return;
81+
}
82+
if (!event.isFromThread()) {
83+
return;
84+
}
85+
if (event.getChannel()
86+
.asThreadChannel()
87+
.getParentChannel()
88+
.getIdLong() != botConfig.get(event.getGuild())
89+
.getHelpConfig()
90+
.getHelpForumChannelId()) {
91+
return;
92+
}
93+
if (!Boolean.parseBoolean(preferenceService.getOrCreate(Objects.requireNonNull(event.getMember())
94+
.getIdLong(), Preference.FORMAT_UNFORMATTED_CODE).getState())) {
6695
return;
6796
}
6897

6998

70-
if (event.getMessage().getContentRaw().contains("```")) return; // exit if already contains codeblock
99+
if (event.getMessage().getContentRaw().contains("```")) {
100+
return; // exit if already contains codeblock
101+
}
71102

72103
CodeBlock code = findCodeblock(event);
73-
if (code == null) return;
104+
if (code == null) {
105+
return;
106+
}
74107

75-
if (event.getMessage().getMentions().getUsers().isEmpty() && event.getChannel().asThreadChannel().getTotalMessageCount() > 1) {
76-
replaceUnformattedCode(event.getMessage().getContentRaw(), code.startIndex(), code.endIndex(), event);
77-
} else sendFormatHint(event);
108+
if (isFirstMessage || !event.getMessage().getMentions().getUsers().isEmpty() ||
109+
!event.getMessage().getMentions().getRoles().isEmpty() ||
110+
!event.getMessage().getMentions().mentionsEveryone()) {
111+
sendFormatHint(event);
112+
} else {
113+
replaceUnformattedCode(event.getMessage()
114+
.getContentRaw(), code.startIndex(), code.endIndex(), event);
115+
}
78116
}
79117

80118
private void sendFormatHint(MessageReceivedEvent event) {
81-
event.getChannel().sendMessageEmbeds(formatHintEmbed(event.getGuild())).queue();
119+
event.getMessage()
120+
.replyEmbeds(formatHintEmbed(event.getGuild()))
121+
.queue();
82122
}
83123

84124
private void replaceUnformattedCode(String msg, int codeStartIndex, int codeEndIndex, MessageReceivedEvent event) {
85125
// default case: a "normal", non-ping containing, non first message of a forum-thread containing "{" and "}".
86126
// user must also have set their preferences to allow this.
87-
if (event.getMessage().getContentRaw().length() > 1992) { // can't exceed discord's char limit
127+
if (msg.length() > 1992) { // can't exceed discord's char limit
88128
sendFormatHint(event);
89129
return;
90130
}
91-
String messageContent = msg.substring(0, codeStartIndex) + " ```" + msg.substring(codeStartIndex, codeEndIndex) + " ```" + msg.substring(codeEndIndex);
92-
EmbedBuilder autoformatInfo = new EmbedBuilder().setDescription(botConfig.get(event.getGuild()).getHelpConfig().getAutoformatInfoMessage());
93-
WebhookUtil.ensureWebhookExists(event.getChannel().asThreadChannel().getParentChannel().asForumChannel(), wh -> WebhookUtil.replaceMemberMessage(wh, event.getMessage(), messageContent, event.getChannel().getIdLong(), autoformatInfo.build(), formatHintEmbed(event.getGuild())), e -> ExceptionLogger.capture(e, "Error creating webhook for UnformattedCodeListener"));
131+
String messageContent = msg.substring(0, codeStartIndex) + " ```" +
132+
msg.substring(codeStartIndex, codeEndIndex) + " ```" + msg.substring(codeEndIndex);
133+
EmbedBuilder autoformatInfo = new EmbedBuilder().setDescription(botConfig.get(event.getGuild())
134+
.getHelpConfig()
135+
.getAutoFormatInfoMessage());
136+
WebhookUtil.ensureWebhookExists(
137+
event.getChannel()
138+
.asThreadChannel()
139+
.getParentChannel()
140+
.asForumChannel(),
141+
wh -> WebhookUtil.replaceMemberMessage(
142+
wh,
143+
event.getMessage(),
144+
messageContent,
145+
event.getChannel()
146+
.getIdLong(),
147+
autoformatInfo.build(),
148+
formatHintEmbed(event.getGuild())
149+
),
150+
e -> ExceptionLogger.capture(
151+
e,
152+
"Error creating webhook for UnformattedCodeListener"
153+
)
154+
);
94155
}
95156

96157
private MessageEmbed formatHintEmbed(Guild guild) {
97-
return new EmbedBuilder().setDescription(botConfig.get(guild).getHelpConfig().getFormatHintMessage()).build();
158+
return new EmbedBuilder().setDescription(botConfig.get(guild)
159+
.getHelpConfig()
160+
.getFormatHintMessage()).build();
98161
}
99162

100-
private record CodeBlock(int startIndex, int endIndex) {
101-
}
163+
private record CodeBlock(int startIndex, int endIndex) {}
102164
}

0 commit comments

Comments
 (0)