added message caching

added message edited log (simple)
This commit is contained in:
Sheldan
2020-03-20 18:48:20 +01:00
parent 9b7f0743fc
commit 35f976aaa4
13 changed files with 190 additions and 3 deletions

View File

@@ -92,6 +92,12 @@
<artifactId>templating-interface</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,44 @@
package dev.sheldan.abstracto.core.service;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.TextChannel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;
@Component @Slf4j
@CacheConfig(cacheNames = {"messages"})
public class MessageCacheBean implements MessageCache {
@Autowired
private Bot bot;
@Override
@CachePut(key = "#message.id")
public Message putMessageInCache(Message message) {
log.debug("Adding message {} to cache", message.getId());
return message;
}
@Override
@Cacheable(key = "#message.id")
public Message getMessageFromCache(Message message) {
log.debug("Retrieving message {}", message.getId());
Guild guildById = bot.getInstance().getGuildById(message.getGuild().getIdLong());
if(guildById != null) {
TextChannel textChannelById = guildById.getTextChannelById(message.getTextChannel().getIdLong());
if(textChannelById != null) {
return textChannelById.retrieveMessageById(message.getId()).complete();
} else {
log.warn("Failed to load text channel {} of message {} in guild {}", message.getTextChannel().getIdLong(), message.getId(), message.getGuild().getId());
}
} else {
log.warn("Failed to guild {} of message {}", message.getGuild().getIdLong(), message.getId());
}
throw new RuntimeException("Message was not found");
}
}

View File

@@ -24,8 +24,6 @@ public class JoinLeaveListener extends ListenerAdapter {
private static final String USER_JOIN_TEMPLATE = "user_join";
private static final String USER_LEAVE_TEMPLATE = "user_leave";
@Autowired
private PostTargetManagement postTargetManagement;
@Autowired
private ServerManagementService serverManagementService;

View File

@@ -0,0 +1,21 @@
package dev.sheldan.abstracto.listener;
import dev.sheldan.abstracto.core.service.MessageCache;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Nonnull;
@Component
public class MessageCacheListener extends ListenerAdapter {
@Autowired
private MessageCache messageCache;
@Override
public void onGuildMessageReceived(@Nonnull GuildMessageReceivedEvent event) {
messageCache.putMessageInCache(event.getMessage());
}
}

View File

@@ -0,0 +1,31 @@
package dev.sheldan.abstracto.listener;
import dev.sheldan.abstracto.core.MessageTextUpdatedListener;
import dev.sheldan.abstracto.core.service.MessageCache;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.events.message.guild.GuildMessageUpdateEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Nonnull;
import java.util.List;
@Component
public class MessageUpdatedListener extends ListenerAdapter {
@Autowired
private List<MessageTextUpdatedListener> listener;
@Autowired
private MessageCache messageCache;
@Override
public void onGuildMessageUpdate(@Nonnull GuildMessageUpdateEvent event) {
Message fromCache = messageCache.getMessageFromCache(event.getMessage());
listener.forEach(messageTextUpdatedListener -> {
messageTextUpdatedListener.execute(fromCache, event.getMessage());
});
messageCache.putMessageInCache(event.getMessage());
}
}

View File

@@ -0,0 +1,7 @@
package dev.sheldan.abstracto.core;
import net.dv8tion.jda.api.entities.Message;
public interface MessageTextUpdatedListener {
void execute(Message messageBefore, Message messageAfter);
}

View File

@@ -37,6 +37,7 @@ public class PostTarget {
public static String WARN_LOG = "warnlog";
public static String KICK_LOG = "kicklog";
public static String BAN_LOG = "banlog";
public static String EDIT_LOG = "editLog";
public static List<String> AVAILABLE_POST_TARGETS = Arrays.asList(JOIN_LOG, LEAVE_LOG, WARN_LOG, KICK_LOG, BAN_LOG);
public static List<String> AVAILABLE_POST_TARGETS = Arrays.asList(JOIN_LOG, LEAVE_LOG, WARN_LOG, KICK_LOG, BAN_LOG, EDIT_LOG);
}

View File

@@ -0,0 +1,8 @@
package dev.sheldan.abstracto.core.service;
import net.dv8tion.jda.api.entities.Message;
public interface MessageCache {
Message putMessageInCache(Message message);
Message getMessageFromCache(Message message);
}