mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-22 07:38:09 +00:00
added logging of message deleted
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
package dev.sheldan.abstracto.moderation.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.ContextUtils;
|
||||
import dev.sheldan.abstracto.core.models.database.PostTarget;
|
||||
import dev.sheldan.abstracto.core.service.MessageCache;
|
||||
import dev.sheldan.abstracto.core.service.PostTargetService;
|
||||
import dev.sheldan.abstracto.moderation.models.template.listener.MessageDeletedLog;
|
||||
import dev.sheldan.abstracto.templating.TemplateService;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.events.message.guild.GuildMessageDeleteEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
@Component
|
||||
public class MessageDeletedListener extends ListenerAdapter {
|
||||
|
||||
private static String MESSAGE_DELETED_TEMPLATE = "message_deleted";
|
||||
|
||||
@Autowired
|
||||
private MessageCache messageCache;
|
||||
|
||||
@Autowired
|
||||
private ContextUtils contextUtils;
|
||||
|
||||
@Autowired
|
||||
private TemplateService templateService;
|
||||
|
||||
@Autowired
|
||||
private PostTargetService postTargetService;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void onGuildMessageDelete(@Nonnull GuildMessageDeleteEvent event) {
|
||||
Message messageFromCache = messageCache.getMessageFromCache(event.getMessageIdLong(),
|
||||
event.getChannel().getIdLong(), event.getGuild().getIdLong());
|
||||
MessageDeletedLog logModel = (MessageDeletedLog) contextUtils.fromMessage(messageFromCache, MessageDeletedLog.class);
|
||||
logModel.setMessage(messageFromCache);
|
||||
String simpleMessageUpdatedMessage = templateService.renderTemplate(MESSAGE_DELETED_TEMPLATE, logModel);
|
||||
postTargetService.sendTextInPostTarget(simpleMessageUpdatedMessage, PostTarget.EDIT_LOG, event.getGuild().getIdLong());
|
||||
messageFromCache.getAttachments().forEach(attachment -> {
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
Message from ${member.effectiveName} (${member.idLong?c}) deleted in ${textChannel.asMention}.
|
||||
Message: ${message.contentRaw}
|
||||
@@ -0,0 +1,12 @@
|
||||
package dev.sheldan.abstracto.moderation.models.template.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.UserInitiatedServerContext;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
|
||||
@Getter @Setter @SuperBuilder
|
||||
public class MessageDeletedLog extends UserInitiatedServerContext {
|
||||
private Message message;
|
||||
}
|
||||
@@ -28,17 +28,29 @@ public class MessageCacheBean implements MessageCache {
|
||||
@Cacheable(key = "#message.id")
|
||||
public Message getMessageFromCache(Message message) {
|
||||
log.debug("Retrieving message {}", message.getId());
|
||||
Guild guildById = bot.getInstance().getGuildById(message.getGuild().getIdLong());
|
||||
return getMessageInTextChannelOfGuild(message.getIdLong(), message.getTextChannel().getIdLong(), message.getGuild().getIdLong());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(key = "#messageId.toString()")
|
||||
public Message getMessageFromCache(Long messageId, Long textChannelId, Long guildId) {
|
||||
log.info("Retrieving message with parameters");
|
||||
return getMessageInTextChannelOfGuild(messageId, textChannelId, guildId);
|
||||
}
|
||||
|
||||
private Message getMessageInTextChannelOfGuild(Long messageId, Long textChannelId, Long guildId) {
|
||||
Guild guildById = bot.getInstance().getGuildById(guildId);
|
||||
if(guildById != null) {
|
||||
TextChannel textChannelById = guildById.getTextChannelById(message.getTextChannel().getIdLong());
|
||||
TextChannel textChannelById = guildById.getTextChannelById(textChannelId);
|
||||
if(textChannelById != null) {
|
||||
return textChannelById.retrieveMessageById(message.getId()).complete();
|
||||
return textChannelById.retrieveMessageById(messageId).complete();
|
||||
} else {
|
||||
log.warn("Failed to load text channel {} of message {} in guild {}", message.getTextChannel().getIdLong(), message.getId(), message.getGuild().getId());
|
||||
log.warn("Failed to load text channel {} of message {} in guild {}", textChannelId, messageId, guildId);
|
||||
}
|
||||
} else {
|
||||
log.warn("Failed to guild {} of message {}", message.getGuild().getIdLong(), message.getId());
|
||||
log.warn("Failed to guild {} of message {}", guildId, messageId);
|
||||
}
|
||||
throw new RuntimeException("Message was not found");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
package dev.sheldan.abstracto.core;
|
||||
|
||||
import dev.sheldan.abstracto.core.management.ChannelManagementService;
|
||||
import dev.sheldan.abstracto.core.management.ServerManagementService;
|
||||
import dev.sheldan.abstracto.core.management.UserManagementService;
|
||||
import dev.sheldan.abstracto.core.models.UserInitiatedServerContext;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class ContextUtils {
|
||||
|
||||
@Autowired
|
||||
private ChannelManagementService channelManagementService;
|
||||
|
||||
@Autowired
|
||||
private UserManagementService userManagementService;
|
||||
|
||||
@Autowired
|
||||
private ServerManagementService serverManagementService;
|
||||
|
||||
public <T extends UserInitiatedServerContext> UserInitiatedServerContext fromMessage(Message message, Class<T> clazz) {
|
||||
Method m = null;
|
||||
try {
|
||||
m = clazz.getMethod("builder");
|
||||
UserInitiatedServerContext.UserInitiatedServerContextBuilder<?, ?> builder = (UserInitiatedServerContext.UserInitiatedServerContextBuilder) m.invoke(null, null);
|
||||
AUserInAServer aUserInAServer = userManagementService.loadUser(message.getMember());
|
||||
return builder
|
||||
.member(message.getMember())
|
||||
.guild(message.getGuild())
|
||||
.textChannel(message.getTextChannel())
|
||||
.channel(channelManagementService.loadChannel(message.getTextChannel().getIdLong()))
|
||||
.server(serverManagementService.loadServer(message.getGuild().getIdLong()))
|
||||
.aUserInAServer(aUserInAServer)
|
||||
.user(aUserInAServer.getUserReference())
|
||||
.build();
|
||||
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
|
||||
log.error("Failed to execute builder method", e);
|
||||
}
|
||||
throw new RuntimeException("Failed to create model from message");
|
||||
}
|
||||
}
|
||||
@@ -32,12 +32,13 @@ public class PostTarget {
|
||||
@Getter @Setter
|
||||
private AServer serverReference;
|
||||
|
||||
public static String JOIN_LOG = "joinlog";
|
||||
public static String LEAVE_LOG = "leavelog";
|
||||
public static String WARN_LOG = "warnlog";
|
||||
public static String KICK_LOG = "kicklog";
|
||||
public static String BAN_LOG = "banlog";
|
||||
public static String JOIN_LOG = "joinLog";
|
||||
public static String LEAVE_LOG = "leaveLog";
|
||||
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 String DELETE_LOG = "deleteLog";
|
||||
|
||||
public static List<String> AVAILABLE_POST_TARGETS = Arrays.asList(JOIN_LOG, LEAVE_LOG, WARN_LOG, KICK_LOG, BAN_LOG, EDIT_LOG);
|
||||
public static List<String> AVAILABLE_POST_TARGETS = Arrays.asList(JOIN_LOG, LEAVE_LOG, WARN_LOG, KICK_LOG, BAN_LOG, EDIT_LOG, DELETE_LOG);
|
||||
}
|
||||
|
||||
@@ -5,4 +5,5 @@ import net.dv8tion.jda.api.entities.Message;
|
||||
public interface MessageCache {
|
||||
Message putMessageInCache(Message message);
|
||||
Message getMessageFromCache(Message message);
|
||||
Message getMessageFromCache(Long messageId, Long textChannelId, Long guildId);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user