Skip to content

Commit 5267e3f

Browse files
Use Cache
1 parent 35b6f05 commit 5267e3f

File tree

1 file changed

+14
-4
lines changed
  • application/src/main/java/org/togetherjava/tjbot/features/basic

1 file changed

+14
-4
lines changed

application/src/main/java/org/togetherjava/tjbot/features/basic/Starboard.java

+14-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.togetherjava.tjbot.features.basic;
22

3+
import com.github.benmanes.caffeine.cache.Cache;
4+
import com.github.benmanes.caffeine.cache.Caffeine;
35
import net.dv8tion.jda.api.EmbedBuilder;
46
import net.dv8tion.jda.api.Permission;
57
import net.dv8tion.jda.api.entities.Guild;
@@ -20,6 +22,7 @@
2022
import org.togetherjava.tjbot.features.EventReceiver;
2123

2224
import java.util.Optional;
25+
import java.util.concurrent.TimeUnit;
2326

2427
import static org.togetherjava.tjbot.db.generated.tables.StarboardMessages.STARBOARD_MESSAGES;
2528

@@ -29,17 +32,23 @@ public class Starboard extends ListenerAdapter implements EventReceiver {
2932
private final StarboardConfig config;
3033
private final Database database;
3134

35+
private final Cache<Long, Object> messageCache;
36+
3237
public Starboard(Config config, Database database) {
3338
this.config = config.getStarboard();
3439
this.database = database;
40+
this.messageCache = Caffeine.newBuilder()
41+
.maximumSize(100)
42+
.expireAfterAccess(24, TimeUnit.HOURS) // TODO make these constants
43+
.build();
3544
}
3645

3746
@Override
3847
public void onMessageReactionAdd(@NotNull MessageReactionAddEvent event) {
3948
String emojiName = event.getEmoji().asCustom().getName();
4049
Guild guild = event.getGuild();
41-
if (shouldIgnoreMessage(emojiName, guild, event.getGuildChannel(),
42-
event.getMessageIdLong())) {
50+
long messageId = event.getMessageIdLong();
51+
if (shouldIgnoreMessage(emojiName, guild, event.getGuildChannel(), messageId)) {
4352
return;
4453
}
4554
Optional<TextChannel> starboardChannel = getStarboardChannel(guild);
@@ -48,8 +57,8 @@ public void onMessageReactionAdd(@NotNull MessageReactionAddEvent event) {
4857
config.channelPattern());
4958
return;
5059
}
51-
database.write(context -> context.newRecord(STARBOARD_MESSAGES)
52-
.setMessageId(event.getMessageIdLong()));
60+
database.write(context -> context.newRecord(STARBOARD_MESSAGES).setMessageId(messageId));
61+
messageCache.put(messageId, new Object());
5362
event.retrieveMessage()
5463
.flatMap(
5564
message -> starboardChannel.orElseThrow().sendMessageEmbeds(formEmbed(message)))
@@ -60,6 +69,7 @@ private boolean shouldIgnoreMessage(String emojiName, Guild guild, GuildChannel
6069
long messageId) {
6170
return !config.emojiNames().contains(emojiName)
6271
|| !guild.getPublicRole().hasPermission(channel, Permission.VIEW_CHANNEL)
72+
|| messageCache.getIfPresent(messageId) != null
6373
|| database
6474
.read(context -> context.fetchExists(context.selectFrom(STARBOARD_MESSAGES)
6575
.where(STARBOARD_MESSAGES.MESSAGE_ID.eq(messageId))));

0 commit comments

Comments
 (0)