Skip to content

Commit b291311

Browse files
Merge pull request #264 from Java-Discord/dynxsty/improved_qotw_submissions
Improve QOTW Submission Handling & NotificationService
2 parents 636cb70 + 80c4607 commit b291311

26 files changed

+435
-269
lines changed

src/main/java/net/javadiscord/javabot/command/InteractionHandler.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import net.javadiscord.javabot.command.interfaces.UserContextCommand;
2929
import net.javadiscord.javabot.systems.staff.custom_commands.dao.CustomCommandRepository;
3030
import net.javadiscord.javabot.systems.staff.custom_commands.model.CustomCommand;
31+
import net.javadiscord.javabot.systems.notification.GuildNotificationService;
3132
import net.javadiscord.javabot.util.GuildUtils;
3233
import org.jetbrains.annotations.NotNull;
3334
import org.slf4j.Logger;
@@ -146,13 +147,13 @@ private void handleResponseException(ResponseException e, CommandInteraction int
146147
StringWriter sw = new StringWriter();
147148
PrintWriter pw = new PrintWriter(sw);
148149
e.getCause().printStackTrace(pw);
149-
GuildUtils.getLogChannel(interaction.getGuild()).sendMessageFormat(
150+
new GuildNotificationService(interaction.getGuild()).sendLogChannelNotification(
150151
"An exception occurred when %s issued the **%s** command in %s:\n```%s```\n",
151152
interaction.getUser().getAsMention(),
152153
interaction.getName(),
153154
interaction.getTextChannel().getAsMention(),
154155
sw.toString()
155-
).queue();
156+
);
156157
}
157158
}
158159

src/main/java/net/javadiscord/javabot/data/h2db/message_cache/MessageCache.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import net.javadiscord.javabot.data.h2db.message_cache.dao.MessageCacheRepository;
1212
import net.javadiscord.javabot.data.h2db.message_cache.model.CachedMessage;
1313
import net.javadiscord.javabot.systems.commands.IdCalculatorCommand;
14-
import net.javadiscord.javabot.util.GuildUtils;
1514
import net.javadiscord.javabot.util.TimeUtils;
1615

1716
import java.io.ByteArrayInputStream;
@@ -90,7 +89,7 @@ public void cache(Message message) {
9089
*/
9190
public void sendUpdatedMessageToLog(Message updated, CachedMessage before) {
9291
if (updated.getContentRaw().trim().equals(before.getMessageContent())) return;
93-
MessageAction action = GuildUtils.getCacheLogChannel(updated.getGuild())
92+
MessageAction action = Bot.config.get(updated.getGuild()).getMessageCache().getMessageCacheLogChannel()
9493
.sendMessageEmbeds(this.buildMessageEditEmbed(updated.getGuild(), updated.getAuthor(), updated.getChannel(), before, updated))
9594
.setActionRow(Button.link(updated.getJumpUrl(), "Jump to Message"));
9695
if (before.getMessageContent().length() > MessageEmbed.VALUE_MAX_LENGTH || updated.getContentRaw().length() > MessageEmbed.VALUE_MAX_LENGTH) {
@@ -108,7 +107,7 @@ public void sendUpdatedMessageToLog(Message updated, CachedMessage before) {
108107
*/
109108
public void sendDeletedMessageToLog(Guild guild, MessageChannel channel, CachedMessage message) {
110109
guild.getJDA().retrieveUserById(message.getAuthorId()).queue(author -> {
111-
MessageAction action = GuildUtils.getCacheLogChannel(guild)
110+
MessageAction action = Bot.config.get(guild).getMessageCache().getMessageCacheLogChannel()
112111
.sendMessageEmbeds(this.buildMessageDeleteEmbed(guild, author, channel, message));
113112
if (message.getMessageContent().length() > MessageEmbed.VALUE_MAX_LENGTH) {
114113
action.addFile(this.buildDeletedMessageFile(author, message), message.getMessageId() + ".txt");

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import net.javadiscord.javabot.Constants;
1010
import net.javadiscord.javabot.systems.help.HelpChannelUpdater;
1111
import net.javadiscord.javabot.systems.help.checks.SimpleGreetingCheck;
12+
import net.javadiscord.javabot.systems.notification.GuildNotificationService;
1213
import net.javadiscord.javabot.util.GuildUtils;
1314

1415
import java.util.Comparator;
@@ -51,7 +52,7 @@ public void onReady(ReadyEvent event) {
5152
helpConfig.getUpdateIntervalSeconds(),
5253
TimeUnit.SECONDS
5354
);
54-
GuildUtils.getLogChannel(guild).sendMessage("I have just been booted up!").queue();
55+
new GuildNotificationService(guild).sendLogChannelNotification("I have just been booted up!");
5556
}
5657
}
5758
}

src/main/java/net/javadiscord/javabot/systems/commands/LeaderboardCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public ReplyCallbackAction handleSlashCommandInteraction(SlashCommandInteraction
6565
* @param guild The current guild.
6666
* @return The QOTW-Rank as an integer.
6767
*/
68-
public int getQOTWRank(Member member, Guild guild) {
68+
public static int getQOTWRank(Member member, Guild guild) {
6969
try (var con = Bot.dataSource.getConnection()) {
7070
var repo = new QuestionPointsRepository(con);
7171
var accounts = repo.getAllAccountsSortedByPoints();

src/main/java/net/javadiscord/javabot/systems/moderation/AutoMod.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import net.dv8tion.jda.api.hooks.ListenerAdapter;
1111
import net.javadiscord.javabot.Bot;
1212
import net.javadiscord.javabot.systems.moderation.warn.model.WarnSeverity;
13-
import net.javadiscord.javabot.util.GuildUtils;
13+
import net.javadiscord.javabot.systems.notification.GuildNotificationService;
1414

1515
import javax.annotation.Nonnull;
1616
import javax.net.ssl.HttpsURLConnection;
@@ -125,7 +125,7 @@ private void checkNewMessageAutomod(@Nonnull Message message) {
125125
private void checkContentAutomod(@Nonnull Message message) {
126126
//Check for Advertising Links
127127
if (hasAdvertisingLink(message)) {
128-
GuildUtils.getLogChannel(message.getGuild()).sendMessage("Message: `" + message.getContentRaw() + "`").queue();
128+
new GuildNotificationService(message.getGuild()).sendLogChannelNotification("Message: `" + message.getContentRaw() + "`");
129129
new ModerationService(message.getJDA(), Bot.config.get(message.getGuild()))
130130
.warn(
131131
message.getMember(),
@@ -143,7 +143,7 @@ private void checkContentAutomod(@Nonnull Message message) {
143143

144144
//Check for suspicious Links
145145
if (hasSuspiciousLink(message)) {
146-
GuildUtils.getLogChannel(message.getGuild()).sendMessage(String.format("Suspicious Link sent by: %s (`%s`)", message.getMember().getAsMention(), message)).queue();
146+
new GuildNotificationService(message.getGuild()).sendLogChannelNotification("Suspicious Link sent by: %s (`%s`)", message.getMember().getAsMention(), message);
147147
new ModerationService(message.getJDA(), Bot.config.get(message.getGuild()))
148148
.warn(
149149
message.getMember(),

src/main/java/net/javadiscord/javabot/systems/moderation/ServerLock.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import net.dv8tion.jda.api.hooks.ListenerAdapter;
1111
import net.javadiscord.javabot.Bot;
1212
import net.javadiscord.javabot.Constants;
13-
import net.javadiscord.javabot.util.GuildUtils;
13+
import net.javadiscord.javabot.systems.notification.GuildNotificationService;
1414
import net.javadiscord.javabot.util.TimeUtils;
1515
import org.jetbrains.annotations.NotNull;
1616

@@ -190,7 +190,7 @@ private void rejectUserDuringRaid(GuildMemberJoinEvent event) {
190190
});
191191
});
192192
String diff = new TimeUtils().formatDurationToNow(event.getMember().getTimeCreated());
193-
GuildUtils.getLogChannel(event.getGuild()).sendMessageFormat("**%s** (%s old) tried to join this server.", event.getMember().getUser().getAsTag(), diff).queue();
193+
new GuildNotificationService(event.getGuild()).sendLogChannelNotification("**%s** (%s old) tried to join this server.", event.getMember().getUser().getAsTag(), diff);
194194
}
195195

196196
/**
@@ -205,9 +205,8 @@ private void lockServer(Guild guild, Collection<Member> potentialRaiders) {
205205
member.getUser().openPrivateChannel().queue(c -> {
206206
c.sendMessage("https://discord.gg/java").setEmbeds(buildServerLockEmbed(guild)).queue(msg -> {
207207
member.kick().queue(
208-
success -> {
209-
},
210-
error -> GuildUtils.getLogChannel(guild).sendMessageFormat("Could not kick member %s%n> `%s`", member.getUser().getAsTag(), error.getMessage()).queue());
208+
success -> {},
209+
error -> new GuildNotificationService(guild).sendLogChannelNotification("Could not kick member %s%n> `%s`", member.getUser().getAsTag(), error.getMessage()));
211210
});
212211
});
213212
}
@@ -225,15 +224,15 @@ private void lockServer(Guild guild, Collection<Member> potentialRaiders) {
225224
var config = Bot.config.get(guild);
226225
config.getServerLock().setLocked("true");
227226
Bot.config.get(guild).flush();
228-
GuildUtils.getLogChannel(guild).sendMessageFormat("""
227+
new GuildNotificationService(guild).sendLogChannelNotification("""
229228
**Server Locked** %s
230229
The automated locking system has detected that the following %d users may be part of a raid:
231230
%s
232231
""",
233232
config.getModeration().getStaffRole().getAsMention(),
234233
potentialRaiders.size(),
235234
membersString
236-
).queue();
235+
);
237236
}
238237

239238
/**
@@ -245,6 +244,6 @@ private void unlockServer(Guild guild) {
245244
var config = Bot.config.get(guild).getServerLock();
246245
config.setLocked("false");
247246
Bot.config.get(guild).flush();
248-
GuildUtils.getLogChannel(guild).sendMessage("Server unlocked automatically.").queue();
247+
new GuildNotificationService(guild).sendLogChannelNotification("Server unlocked automatically.");
249248
}
250249
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package net.javadiscord.javabot.systems.notification;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import net.dv8tion.jda.api.entities.Guild;
5+
import net.dv8tion.jda.api.entities.MessageEmbed;
6+
import net.javadiscord.javabot.Bot;
7+
import net.javadiscord.javabot.data.config.GuildConfig;
8+
9+
/**
10+
* Sends notifications within a single {@link Guild}.
11+
*/
12+
@Slf4j
13+
public final class GuildNotificationService extends NotificationService {
14+
15+
private final Guild guild;
16+
private final GuildConfig config;
17+
18+
public GuildNotificationService(Guild guild) {
19+
this.guild = guild;
20+
this.config = Bot.config.get(guild);
21+
}
22+
23+
/**
24+
* Sends a {@link MessageEmbed} to the Guild's log channel.
25+
*
26+
* @param embed The {@link MessageEmbed} to send.
27+
*/
28+
public void sendLogChannelNotification(MessageEmbed embed) {
29+
if (config.getModeration().getLogChannel() == null) {
30+
log.warn("Could not find Log Channel for Guild {}", guild.getName());
31+
return;
32+
}
33+
this.sendMessageChannelNotification(config.getModeration().getLogChannel(), embed);
34+
}
35+
36+
/**
37+
* Sends a simple Message to the Guild's log channel.
38+
*
39+
* @param string The message that should be sent.
40+
* @param args Optional args for formatting.
41+
*/
42+
public void sendLogChannelNotification(String string, Object... args) {
43+
if (config.getModeration().getLogChannel() == null) {
44+
log.warn("Could not find Log Channel for Guild {}", guild.getName());
45+
return;
46+
}
47+
this.sendMessageChannelNotification(config.getModeration().getLogChannel(), string, args);
48+
}
49+
50+
/**
51+
* Sends a {@link MessageEmbed} to the Guild's message log channel.
52+
*
53+
* @param embed The {@link MessageEmbed} to send.
54+
*/
55+
public void sendMessageLogChannelNotification(MessageEmbed embed) {
56+
if (config.getMessageCache().getMessageCacheLogChannel() == null) {
57+
log.warn("Could not find Message Log Channel for Guild {}", guild.getName());
58+
return;
59+
}
60+
this.sendMessageChannelNotification(config.getMessageCache().getMessageCacheLogChannel(), embed);
61+
}
62+
63+
/**
64+
* Sends a simple Message to the Guild's message log channel.
65+
*
66+
* @param string The message that should be sent.
67+
* @param args Optional args for formatting.
68+
*/
69+
private void sendMessageLogChannelNotification(String string, Object... args) {
70+
if (config.getMessageCache().getMessageCacheLogChannel() == null) {
71+
log.warn("Could not find Message Log Channel for Guild {}", guild.getName());
72+
return;
73+
}
74+
this.sendMessageChannelNotification(config.getMessageCache().getMessageCacheLogChannel(), string, args);
75+
}
76+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package net.javadiscord.javabot.systems.notification;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import net.dv8tion.jda.api.entities.MessageChannel;
5+
import net.dv8tion.jda.api.entities.MessageEmbed;
6+
import net.dv8tion.jda.api.entities.User;
7+
8+
9+
/**
10+
* Abstract class used for sending Notifications to Discord Users and Channels.
11+
*/
12+
@Slf4j
13+
public abstract class NotificationService {
14+
void sendDirectMessageNotification(User user, MessageEmbed message) {
15+
user.openPrivateChannel().queue(
16+
channel -> channel.sendMessageEmbeds(message).queue(),
17+
error -> log.warn("Could not send private Notification to User " + user.getAsTag())
18+
);
19+
}
20+
21+
void sendMessageChannelNotification(MessageChannel channel, MessageEmbed message) {
22+
channel.sendMessageEmbeds(message).queue();
23+
}
24+
25+
void sendMessageChannelNotification(MessageChannel channel, String s, Object... args) {
26+
channel.sendMessageFormat(s, args).queue();
27+
}
28+
}

0 commit comments

Comments
 (0)