|
35 | 35 | * Listens for Incoming Messages and stores them in the Message Cache. |
36 | 36 | */ |
37 | 37 | @Slf4j |
38 | | -public class MessageCache extends ListenerAdapter { |
| 38 | +public class MessageCache { |
39 | 39 | List<CachedMessage> cache = new ArrayList<>(); |
40 | 40 | /** |
41 | 41 | * Amount of messages since the last synchronization. |
@@ -68,82 +68,57 @@ public void synchronize() { |
68 | 68 | }); |
69 | 69 | } |
70 | 70 |
|
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(); |
75 | 78 | if (cache.size() + 1 > config.getMaxCachedMessages()) { |
76 | 79 | cache.remove(0); |
77 | 80 | } |
78 | 81 | if (messageCount >= config.getMessageSynchronizationInterval()) { |
79 | 82 | synchronize(); |
80 | 83 | } |
81 | 84 | messageCount++; |
82 | | - cache.add(CachedMessage.of(event.getMessage())); |
| 85 | + cache.add(CachedMessage.of(message)); |
83 | 86 | } |
84 | 87 |
|
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"); |
105 | 101 | } |
106 | 102 | action.queue(); |
107 | 103 | } |
108 | 104 |
|
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 | | - |
128 | 105 | /** |
129 | | - * Checks whether the given message should be ignored by the cache. |
| 106 | + * Sends the deleted message's content to the {@link MessageCacheConfig#getMessageCacheLogChannel()}. |
130 | 107 | * |
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}. |
141 | 111 | */ |
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); |
147 | 122 | } |
148 | 123 |
|
149 | 124 | private EmbedBuilder buildMessageCacheEmbed(MessageChannel channel, CachedMessage before){ |
@@ -182,7 +157,15 @@ private MessageEmbed buildMessageDeleteEmbed(Guild guild, User author, MessageCh |
182 | 157 | .build(); |
183 | 158 | } |
184 | 159 |
|
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) { |
186 | 169 | CachedMessage message = new CachedMessage(); |
187 | 170 | message.setMessageId(messageId); |
188 | 171 | return buildMessageCacheEmbed(channel, message) |
|
0 commit comments