Skip to content

Commit 21d7449

Browse files
Moved events to separate listener class
1 parent db65f41 commit 21d7449

File tree

3 files changed

+127
-62
lines changed

3 files changed

+127
-62
lines changed

src/main/java/net/javadiscord/javabot/Bot.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import net.javadiscord.javabot.data.config.BotConfig;
1616
import net.javadiscord.javabot.data.h2db.DbHelper;
1717
import net.javadiscord.javabot.data.h2db.message_cache.MessageCache;
18+
import net.javadiscord.javabot.data.h2db.message_cache.MessageCacheListener;
1819
import net.javadiscord.javabot.listener.*;
1920
import net.javadiscord.javabot.systems.help.HelpChannelListener;
2021
import net.javadiscord.javabot.systems.moderation.AutoMod;
@@ -126,6 +127,7 @@ public static void main(String[] args) throws Exception {
126127
*/
127128
private static void addEventListeners(JDA jda) {
128129
jda.addEventListener(
130+
new MessageCacheListener(),
129131
new GitHubLinkListener(),
130132
new MessageLinkListener(),
131133
new GuildJoinListener(),

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

Lines changed: 45 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
* Listens for Incoming Messages and stores them in the Message Cache.
3636
*/
3737
@Slf4j
38-
public class MessageCache extends ListenerAdapter {
38+
public class MessageCache {
3939
List<CachedMessage> cache = new ArrayList<>();
4040
/**
4141
* Amount of messages since the last synchronization.
@@ -68,82 +68,57 @@ public void synchronize() {
6868
});
6969
}
7070

71-
@Override
72-
public void onMessageReceived(@NotNull MessageReceivedEvent event) {
73-
if (this.ignoreMessageCache(event.getMessage())) return;
74-
MessageCacheConfig config = Bot.config.get(event.getGuild()).getMessageCache();
71+
/**
72+
* Caches a single {@link Message} object.
73+
*
74+
* @param message The message to cache.
75+
*/
76+
public void cache(Message message) {
77+
MessageCacheConfig config = Bot.config.get(message.getGuild()).getMessageCache();
7578
if (cache.size() + 1 > config.getMaxCachedMessages()) {
7679
cache.remove(0);
7780
}
7881
if (messageCount >= config.getMessageSynchronizationInterval()) {
7982
synchronize();
8083
}
8184
messageCount++;
82-
cache.add(CachedMessage.of(event.getMessage()));
85+
cache.add(CachedMessage.of(message));
8386
}
8487

85-
@Override
86-
public void onMessageUpdate(@NotNull MessageUpdateEvent event) {
87-
if (this.ignoreMessageCache(event.getMessage())) return;
88-
Optional<CachedMessage> optional = cache.stream().filter(m -> m.getMessageId() == event.getMessageIdLong()).findFirst();
89-
CachedMessage before;
90-
if (optional.isPresent()) {
91-
before = optional.get();
92-
cache.set(cache.indexOf(before), CachedMessage.of(event.getMessage()));
93-
} else {
94-
before = new CachedMessage();
95-
before.setMessageId(event.getMessageIdLong());
96-
before.setMessageContent("[unknown content]");
97-
cache.add(CachedMessage.of(event.getMessage()));
98-
}
99-
if (event.getMessage().getContentRaw().trim().equals(before.getMessageContent())) return;
100-
MessageAction action = GuildUtils.getCacheLogChannel(event.getGuild())
101-
.sendMessageEmbeds(this.buildMessageEditEmbed(event.getGuild(), event.getAuthor(), event.getChannel(), before, event.getMessage()))
102-
.setActionRow(Button.link(event.getMessage().getJumpUrl(), "Jump to Message"));
103-
if (before.getMessageContent().length() > MessageEmbed.VALUE_MAX_LENGTH || event.getMessage().getContentRaw().length() > MessageEmbed.VALUE_MAX_LENGTH) {
104-
action.addFile(this.buildEditedMessageFile(event.getAuthor(), before, event.getMessage()), before.getMessageId() + ".txt");
88+
/**
89+
* Sends the updated message's content to the {@link MessageCacheConfig#getMessageCacheLogChannel()}.
90+
*
91+
* @param updated The new {@link Message}.
92+
* @param before The {@link CachedMessage}.
93+
*/
94+
public void sendUpdatedMessageToLog(Message updated, CachedMessage before) {
95+
if (updated.getContentRaw().trim().equals(before.getMessageContent())) return;
96+
MessageAction action = GuildUtils.getCacheLogChannel(updated.getGuild())
97+
.sendMessageEmbeds(this.buildMessageEditEmbed(updated.getGuild(), updated.getAuthor(), updated.getChannel(), before, updated))
98+
.setActionRow(Button.link(updated.getJumpUrl(), "Jump to Message"));
99+
if (before.getMessageContent().length() > MessageEmbed.VALUE_MAX_LENGTH || updated.getContentRaw().length() > MessageEmbed.VALUE_MAX_LENGTH) {
100+
action.addFile(this.buildEditedMessageFile(updated.getAuthor(), before, updated), before.getMessageId() + ".txt");
105101
}
106102
action.queue();
107103
}
108104

109-
@Override
110-
public void onMessageDelete(@NotNull MessageDeleteEvent event) {
111-
Optional<CachedMessage> optional = cache.stream().filter(m -> m.getMessageId() == event.getMessageIdLong()).findFirst();
112-
if (optional.isPresent()) {
113-
CachedMessage message = optional.get();
114-
event.getJDA().retrieveUserById(message.getAuthorId()).queue(author -> {
115-
MessageAction action = GuildUtils.getCacheLogChannel(event.getGuild())
116-
.sendMessageEmbeds(this.buildMessageDeleteEmbed(event.getGuild(), author, event.getChannel(), message));
117-
if (message.getMessageContent().length() > MessageEmbed.VALUE_MAX_LENGTH) {
118-
action.addFile(this.buildDeletedMessageFile(author, message), message.getMessageId() + ".txt");
119-
}
120-
action.queue();
121-
});
122-
cache.remove(message);
123-
} else {
124-
GuildUtils.getCacheLogChannel(event.getGuild()).sendMessageEmbeds(buildMessageNotCachedEmbed(event.getGuild(), event.getChannel(), event.getMessageIdLong())).queue();
125-
}
126-
}
127-
128105
/**
129-
* Checks whether the given message should be ignored by the cache.
106+
* Sends the deleted message's content to the {@link MessageCacheConfig#getMessageCacheLogChannel()}.
130107
*
131-
* This is done with the following criteria:
132-
* <ol>
133-
* <li>Message author is a bot</li>
134-
* <li>Message author is a system account</li>
135-
* <li>Message author is part of the excluded users</li>
136-
* <li>Channel is excluded from the cache</li>
137-
* </ol>
138-
*
139-
* @param message The message to check
140-
* @return true if any of the criteria above apply
108+
* @param guild The message's {@link Guild}.
109+
* @param channel The message's {@link MessageChannel}.
110+
* @param message The {@link CachedMessage}.
141111
*/
142-
private boolean ignoreMessageCache(Message message) {
143-
MessageCacheConfig config = Bot.config.get(message.getGuild()).getMessageCache();
144-
return message.getAuthor().isBot() || message.getAuthor().isSystem() ||
145-
config.getExcludedUsers().contains(message.getAuthor().getIdLong()) ||
146-
config.getExcludedChannels().contains(message.getChannel().getIdLong());
112+
public void sendDeletedMessageToLog(Guild guild, MessageChannel channel, CachedMessage message) {
113+
guild.getJDA().retrieveUserById(message.getAuthorId()).queue(author -> {
114+
MessageAction action = GuildUtils.getCacheLogChannel(guild)
115+
.sendMessageEmbeds(this.buildMessageDeleteEmbed(guild, author, channel, message));
116+
if (message.getMessageContent().length() > MessageEmbed.VALUE_MAX_LENGTH) {
117+
action.addFile(this.buildDeletedMessageFile(author, message), message.getMessageId() + ".txt");
118+
}
119+
action.queue();
120+
});
121+
cache.remove(message);
147122
}
148123

149124
private EmbedBuilder buildMessageCacheEmbed(MessageChannel channel, CachedMessage before){
@@ -182,7 +157,15 @@ private MessageEmbed buildMessageDeleteEmbed(Guild guild, User author, MessageCh
182157
.build();
183158
}
184159

185-
private MessageEmbed buildMessageNotCachedEmbed(Guild guild, MessageChannel channel, long messageId) {
160+
/**
161+
* Builds a {@link MessageEmbed} object that is used for messages, that were deleted but not cached.
162+
*
163+
* @param guild The message's guild.
164+
* @param channel The message's channel.
165+
* @param messageId The message's id.
166+
* @return The fully-built {@link MessageEmbed} object.
167+
*/
168+
public MessageEmbed buildMessageNotCachedEmbed(Guild guild, MessageChannel channel, long messageId) {
186169
CachedMessage message = new CachedMessage();
187170
message.setMessageId(messageId);
188171
return buildMessageCacheEmbed(channel, message)
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package net.javadiscord.javabot.data.h2db.message_cache;
2+
3+
import net.dv8tion.jda.api.entities.Message;
4+
import net.dv8tion.jda.api.events.message.MessageDeleteEvent;
5+
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
6+
import net.dv8tion.jda.api.events.message.MessageUpdateEvent;
7+
import net.dv8tion.jda.api.hooks.ListenerAdapter;
8+
import net.javadiscord.javabot.Bot;
9+
import net.javadiscord.javabot.data.config.guild.MessageCacheConfig;
10+
import net.javadiscord.javabot.data.h2db.message_cache.model.CachedMessage;
11+
import net.javadiscord.javabot.util.GuildUtils;
12+
import org.jetbrains.annotations.NotNull;
13+
14+
import java.util.List;
15+
import java.util.Optional;
16+
17+
/**
18+
* Listener class that listens for incoming, updated or deleted messages.
19+
*/
20+
public class MessageCacheListener extends ListenerAdapter {
21+
22+
@Override
23+
public void onMessageReceived(@NotNull MessageReceivedEvent event) {
24+
if (this.ignoreMessageCache(event.getMessage())) return;
25+
Bot.messageCache.cache(event.getMessage());
26+
}
27+
28+
@Override
29+
public void onMessageUpdate(@NotNull MessageUpdateEvent event) {
30+
if (this.ignoreMessageCache(event.getMessage())) return;
31+
List<CachedMessage> cache = Bot.messageCache.cache;
32+
Optional<CachedMessage> optional = cache.stream().filter(m -> m.getMessageId() == event.getMessageIdLong()).findFirst();
33+
CachedMessage before;
34+
if (optional.isPresent()) {
35+
before = optional.get();
36+
cache.set(cache.indexOf(before), CachedMessage.of(event.getMessage()));
37+
} else {
38+
before = new CachedMessage();
39+
before.setMessageId(event.getMessageIdLong());
40+
before.setMessageContent("[unknown content]");
41+
Bot.messageCache.cache(event.getMessage());
42+
}
43+
Bot.messageCache.sendUpdatedMessageToLog(event.getMessage(), before);
44+
}
45+
46+
@Override
47+
public void onMessageDelete(@NotNull MessageDeleteEvent event) {
48+
Optional<CachedMessage> optional = Bot.messageCache.cache.stream().filter(m -> m.getMessageId() == event.getMessageIdLong()).findFirst();
49+
if (optional.isPresent()) {
50+
Bot.messageCache.sendDeletedMessageToLog(event.getGuild(), event.getChannel(), optional.get());
51+
} else {
52+
GuildUtils.getCacheLogChannel(event.getGuild())
53+
.sendMessageEmbeds(Bot.messageCache.buildMessageNotCachedEmbed(event.getGuild(), event.getChannel(), event.getMessageIdLong()))
54+
.queue();
55+
}
56+
}
57+
58+
59+
/**
60+
* Checks whether the given message should be ignored by the cache.
61+
*
62+
* This is done with the following criteria:
63+
* <ol>
64+
* <li>Message author is a bot</li>
65+
* <li>Message author is a system account</li>
66+
* <li>Message author is part of the excluded users</li>
67+
* <li>Channel is excluded from the cache</li>
68+
* </ol>
69+
*
70+
* @param message The message to check
71+
* @return true if any of the criteria above apply
72+
*/
73+
private boolean ignoreMessageCache(Message message) {
74+
MessageCacheConfig config = Bot.config.get(message.getGuild()).getMessageCache();
75+
return message.getAuthor().isBot() || message.getAuthor().isSystem() ||
76+
config.getExcludedUsers().contains(message.getAuthor().getIdLong()) ||
77+
config.getExcludedChannels().contains(message.getChannel().getIdLong());
78+
}
79+
80+
}

0 commit comments

Comments
 (0)