diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Warn.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Warn.java index 69360d55a..862384d7d 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Warn.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Warn.java @@ -37,9 +37,9 @@ public class Warn implements Command { String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason; WarnLog warnLogModel = (WarnLog) ContextConverter.fromCommandContext(commandContext, WarnLog.class); warnLogModel.setWarnedUser(member); + warnLogModel.setMessage(commandContext.getMessage()); warnLogModel.setReason(reason); warnLogModel.setWarningUser(commandContext.getAuthor()); - warnLogModel.setMessageLink(commandContext.getMessage().getJumpUrl()); warnService.warnUser(member, commandContext.getAuthor(), reason, warnLogModel); return Result.fromSuccess(); } diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/listener/MessageDeletedListener.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/listener/MessageDeletedListener.java index 8e765cef8..dc1bced9e 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/listener/MessageDeletedListener.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/listener/MessageDeletedListener.java @@ -4,9 +4,11 @@ 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.MessageDeletedAttachmentLog; 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.entities.MessageEmbed; import net.dv8tion.jda.api.events.message.guild.GuildMessageDeleteEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +21,7 @@ import javax.annotation.Nonnull; public class MessageDeletedListener extends ListenerAdapter { private static String MESSAGE_DELETED_TEMPLATE = "message_deleted"; + private static String MESSAGE_DELETED_ATTACHMENT_TEMPLATE = "message_deleted_attachment"; @Autowired private MessageCache messageCache; @@ -41,8 +44,15 @@ public class MessageDeletedListener extends ListenerAdapter { logModel.setMessage(messageFromCache); String simpleMessageUpdatedMessage = templateService.renderTemplate(MESSAGE_DELETED_TEMPLATE, logModel); postTargetService.sendTextInPostTarget(simpleMessageUpdatedMessage, PostTarget.EDIT_LOG, event.getGuild().getIdLong()); - messageFromCache.getAttachments().forEach(attachment -> { - - }); + MessageEmbed embed = templateService.renderEmbedTemplate(MESSAGE_DELETED_TEMPLATE, logModel); + postTargetService.sendEmbedInPostTarget(embed, PostTarget.DELETE_LOG, event.getGuild().getIdLong()); + for (int i = 0; i < messageFromCache.getAttachments().size(); i++) { + Message.Attachment attachment = messageFromCache.getAttachments().get(i); + MessageDeletedAttachmentLog log = (MessageDeletedAttachmentLog) contextUtils.fromMessage(messageFromCache, MessageDeletedAttachmentLog.class); + log.setImageUrl(attachment.getProxyUrl()); + log.setCounter(i + 1); + MessageEmbed attachmentEmbed = templateService.renderEmbedTemplate(MESSAGE_DELETED_ATTACHMENT_TEMPLATE, log); + postTargetService.sendEmbedInPostTarget(attachmentEmbed, PostTarget.DELETE_LOG, event.getGuild().getIdLong()); + } } } diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/listener/MessageEditedListener.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/listener/MessageEditedListener.java index e668adb10..1edaf94a3 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/listener/MessageEditedListener.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/listener/MessageEditedListener.java @@ -8,6 +8,7 @@ import dev.sheldan.abstracto.moderation.models.template.listener.MessageEditedLo import dev.sheldan.abstracto.templating.TemplateService; import lombok.extern.slf4j.Slf4j; import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.MessageEmbed; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -43,5 +44,8 @@ public class MessageEditedListener implements MessageTextUpdatedListener { .member(messageAfter.getMember()).build(); String simpleMessageUpdatedMessage = templateService.renderTemplate(MESSAGE_EDITED_TEMPLATE, log); postTargetService.sendTextInPostTarget(simpleMessageUpdatedMessage, PostTarget.EDIT_LOG, messageAfter.getGuild().getIdLong()); + MessageEmbed embed = templateService.renderEmbedTemplate(MESSAGE_EDITED_TEMPLATE, log); + postTargetService.sendEmbedInPostTarget(embed, PostTarget.DELETE_LOG, messageBefore.getGuild().getIdLong()); + } } diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_deleted/message_deleted_attachment_embed_en_US.ftl b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_deleted/message_deleted_attachment_embed_en_US.ftl new file mode 100644 index 000000000..cfab9c955 --- /dev/null +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_deleted/message_deleted_attachment_embed_en_US.ftl @@ -0,0 +1,12 @@ +{ + "imageUrl": "${imageUrl}", + "fields": [ + { + "name": "Direct Url", + "value": "[Link](${imageUrl})" + } + ], + "footer": { + "text": "Attachment #${counter}" + } +} \ No newline at end of file diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_deleted/message_deleted_embed_en_US.ftl b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_deleted/message_deleted_embed_en_US.ftl new file mode 100644 index 000000000..8b94e56b1 --- /dev/null +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_deleted/message_deleted_embed_en_US.ftl @@ -0,0 +1,22 @@ +{ + "author": { + "name": "${member.effectiveName}#${member.user.discriminator}", + "avatar": "${member.user.effectiveAvatarUrl}" + }, + "description": "Message from ${member.effectiveName}#${member.user.discriminator} (${member.idLong?c}) removed in ${textChannel.asMention}", + "color" : { + "r": 200, + "g": 0, + "b": 0 + }, + "fields": [ + { + "name": ":x: Original Message: ", + "value": "${message.contentRaw}" + }, + { + "name": "Link", + "value": "[${textChannel.name}](${message.jumpUrl})" + } + ] +} \ No newline at end of file diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_deleted_en_US.ftl b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_deleted/message_deleted_en_US.ftl similarity index 100% rename from abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_deleted_en_US.ftl rename to abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_deleted/message_deleted_en_US.ftl diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_edited/message_edited_embed_en_US.ftl b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_edited/message_edited_embed_en_US.ftl new file mode 100644 index 000000000..3e26f1783 --- /dev/null +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_edited/message_edited_embed_en_US.ftl @@ -0,0 +1,26 @@ +{ + "author": { + "name": "${member.effectiveName}#${member.user.discriminator}", + "avatar": "${member.user.effectiveAvatarUrl}" + }, + "description": "Message from ${member.effectiveName}#${member.user.discriminator} (${member.idLong?c}) edited in ${textChannel.asMention}", + "color" : { + "r": 200, + "g": 0, + "b": 0 + }, + "fields": [ + { + "name": "Original Message: ", + "value": "${messageBefore.contentRaw}" + }, + { + "name": "New Message: ", + "value": "${messageAfter.contentRaw}" + }, + { + "name": "Jump link", + "value": "[${textChannel.name}](${messageBefore.jumpUrl})" + } + ] +} \ No newline at end of file diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_edited_en_US.ftl b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_edited/message_edited_en_US.ftl similarity index 100% rename from abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_edited_en_US.ftl rename to abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/listener/message_edited/message_edited_en_US.ftl diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/warn/embed/warn_log_embed_en_US.ftl b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/warn/warn_log_embed_en_US.ftl similarity index 93% rename from abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/warn/embed/warn_log_embed_en_US.ftl rename to abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/warn/warn_log_embed_en_US.ftl index c7f0bc2ee..770ac3a10 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/warn/embed/warn_log_embed_en_US.ftl +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/warn/warn_log_embed_en_US.ftl @@ -25,7 +25,7 @@ <#if warning?has_content> { "name": "Location of the incident", - "value": "[${textChannel.name}](${messageLink})" + "value": "[${textChannel.name}](${message.jumpUrl})" }, { diff --git a/abstracto-application/abstracto-modules/moderation/moderation-int/src/main/java/dev/sheldan/abstracto/moderation/models/template/WarnLog.java b/abstracto-application/abstracto-modules/moderation/moderation-int/src/main/java/dev/sheldan/abstracto/moderation/models/template/WarnLog.java index 0bb0e6c7b..0fd38bcd9 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-int/src/main/java/dev/sheldan/abstracto/moderation/models/template/WarnLog.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-int/src/main/java/dev/sheldan/abstracto/moderation/models/template/WarnLog.java @@ -6,6 +6,7 @@ import lombok.Getter; import lombok.Setter; import lombok.experimental.SuperBuilder; import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.Message; @Getter @SuperBuilder @Setter @@ -14,6 +15,6 @@ public class WarnLog extends UserInitiatedServerContext { private String reason; private Member warnedUser; private Member warningUser; - private String messageLink; + private Message message; private Warning warning; } diff --git a/abstracto-application/abstracto-modules/moderation/moderation-int/src/main/java/dev/sheldan/abstracto/moderation/models/template/listener/MessageDeletedAttachmentLog.java b/abstracto-application/abstracto-modules/moderation/moderation-int/src/main/java/dev/sheldan/abstracto/moderation/models/template/listener/MessageDeletedAttachmentLog.java new file mode 100644 index 000000000..9f34b3ba7 --- /dev/null +++ b/abstracto-application/abstracto-modules/moderation/moderation-int/src/main/java/dev/sheldan/abstracto/moderation/models/template/listener/MessageDeletedAttachmentLog.java @@ -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; + +@Getter @Setter @SuperBuilder +public class MessageDeletedAttachmentLog extends UserInitiatedServerContext { + private String imageUrl; + private Integer counter; +} diff --git a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/embed/EmbedConfiguration.java b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/embed/EmbedConfiguration.java index 91eb38f21..d315d23cd 100644 --- a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/embed/EmbedConfiguration.java +++ b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/embed/EmbedConfiguration.java @@ -12,6 +12,7 @@ public class EmbedConfiguration { private EmbedColor color; private String description; private String thumbnail; + private String imageUrl; private List fields; private EmbedFooter footer; } diff --git a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/TemplateServiceBean.java b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/TemplateServiceBean.java index f0ecfb042..b5ec1d33e 100644 --- a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/TemplateServiceBean.java +++ b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/TemplateServiceBean.java @@ -76,10 +76,14 @@ public class TemplateServiceBean implements TemplateService { if(footer != null) { builder.setFooter(footer.getText(), footer.getIcon()); } - configuration.getFields().forEach(embedField -> { - Boolean inline = embedField.getInline() != null ? embedField.getInline() : Boolean.FALSE; - builder.addField(embedField.getName(), embedField.getValue(), inline); - }); + if(configuration.getFields() != null) { + configuration.getFields().forEach(embedField -> { + Boolean inline = embedField.getInline() != null ? embedField.getInline() : Boolean.FALSE; + builder.addField(embedField.getName(), embedField.getValue(), inline); + }); + } + + builder.setImage(configuration.getImageUrl()); EmbedColor color = configuration.getColor(); if(color != null) {