From 1e203c19e0d74366a4a9eb0a56e51b2c3a2e10bd Mon Sep 17 00:00:00 2001 From: Sheldan <5037282+Sheldan@users.noreply.github.com> Date: Sat, 9 May 2020 17:19:09 +0200 Subject: [PATCH] added command to check your own commands --- .../moderation/commands/MyWarnings.java | 73 +++++++++++++++++++ .../moderation/repository/WarnRepository.java | 7 ++ .../management/WarnManagementServiceBean.java | 12 +++ .../myWarnings_response_embed_en_US.ftl | 17 +++++ .../template/commands/MyWarningsModel.java | 15 ++++ .../management/WarnManagementService.java | 3 + .../help/myWarnings_description_en_US.ftl | 1 + .../help/myWarnings_long_help_en_US.ftl | 1 + .../help/myWarnings_usage_en_US.ftl | 1 + .../myWarnings_embed_description_en_US.ftl | 1 + ...ngs_with_decay_embed_description_en_US.ftl | 1 + 11 files changed, 132 insertions(+) create mode 100644 abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/commands/MyWarnings.java create mode 100644 abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/command/myWarnings/myWarnings_response_embed_en_US.ftl create mode 100644 abstracto-application/abstracto-modules/moderation/moderation-int/src/main/java/dev/sheldan/abstracto/moderation/models/template/commands/MyWarningsModel.java create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/help/myWarnings_description_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/help/myWarnings_long_help_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/help/myWarnings_usage_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/myWarnings_embed_description_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/myWarnings_with_decay_embed_description_en_US.ftl diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/commands/MyWarnings.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/commands/MyWarnings.java new file mode 100644 index 000000000..b43432285 --- /dev/null +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/commands/MyWarnings.java @@ -0,0 +1,73 @@ +package dev.sheldan.abstracto.moderation.commands; + +import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand; +import dev.sheldan.abstracto.core.command.config.CommandConfiguration; +import dev.sheldan.abstracto.core.command.config.HelpInfo; +import dev.sheldan.abstracto.core.command.config.Parameter; +import dev.sheldan.abstracto.core.command.execution.CommandContext; +import dev.sheldan.abstracto.core.command.execution.CommandResult; +import dev.sheldan.abstracto.core.command.execution.ContextConverter; +import dev.sheldan.abstracto.core.config.FeatureEnum; +import dev.sheldan.abstracto.core.service.ChannelService; +import dev.sheldan.abstracto.core.service.FeatureFlagService; +import dev.sheldan.abstracto.moderation.config.ModerationModule; +import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures; +import dev.sheldan.abstracto.moderation.config.features.WarningDecayFeature; +import dev.sheldan.abstracto.moderation.models.template.commands.MyWarningsModel; +import dev.sheldan.abstracto.moderation.service.management.WarnManagementService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Component +public class MyWarnings extends AbstractConditionableCommand { + + @Autowired + private ChannelService channelService; + + @Autowired + private WarnManagementService warnManagementService; + + @Autowired + private FeatureFlagService featureFlagService; + + @Autowired + private WarningDecayFeature warningDecayFeature; + + @Override + public CommandResult execute(CommandContext commandContext) { + MyWarningsModel model = (MyWarningsModel) ContextConverter.fromCommandContext(commandContext, MyWarningsModel.class); + Long currentWarnCount = warnManagementService.getActiveWarnsForUser(commandContext.getUserInitiatedContext().getAUserInAServer()); + model.setCurrentWarnCount(currentWarnCount); + Long totalWarnCount = warnManagementService.getTotalWarnsForUser(commandContext.getUserInitiatedContext().getAUserInAServer()); + boolean userUsesDecay = featureFlagService.isFeatureEnabled(warningDecayFeature, commandContext.getUserInitiatedContext().getServer()); + model.setServerUsesDecays(userUsesDecay); + model.setTotalWarnCount(totalWarnCount); + channelService.sendTemplateInChannel("myWarnings_response", model, commandContext.getChannel()); + return CommandResult.fromSuccess(); + } + + @Override + public CommandConfiguration getConfiguration() { + List parameters = new ArrayList<>(); + HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); + List aliases = Arrays.asList("myWarns"); + return CommandConfiguration.builder() + .name("myWarnings") + .module(ModerationModule.MODERATION) + .templated(true) + .causesReaction(true) + .aliases(aliases) + .parameters(parameters) + .help(helpInfo) + .build(); + } + + @Override + public FeatureEnum getFeature() { + return ModerationFeatures.WARNING; + } +} diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/repository/WarnRepository.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/repository/WarnRepository.java index 633b4f0bf..e24b9e759 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/repository/WarnRepository.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/repository/WarnRepository.java @@ -1,6 +1,7 @@ package dev.sheldan.abstracto.moderation.repository; import dev.sheldan.abstracto.core.models.database.AServer; +import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.moderation.models.database.Warning; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.QueryHints; @@ -14,4 +15,10 @@ import java.util.List; public interface WarnRepository extends JpaRepository { @QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true")) List findAllByWarnedUser_ServerReferenceAndDecayedFalseAndWarnDateLessThan(AServer server, Instant cutOffDate); + + @QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true")) + Long countByWarnedUser(AUserInAServer aUserInAServer); + + @QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true")) + Long countByWarnedUserAndDecayedFalse(AUserInAServer aUserInAServer); } diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/service/management/WarnManagementServiceBean.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/service/management/WarnManagementServiceBean.java index 39d35ef8d..96416d07c 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/service/management/WarnManagementServiceBean.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/service/management/WarnManagementServiceBean.java @@ -33,4 +33,16 @@ public class WarnManagementServiceBean implements WarnManagementService { public List getActiveWarningsInServerOlderThan(AServer server, Instant date) { return warnRepository.findAllByWarnedUser_ServerReferenceAndDecayedFalseAndWarnDateLessThan(server, date); } + + @Override + public Long getTotalWarnsForUser(AUserInAServer aUserInAServer) { + return warnRepository.countByWarnedUser(aUserInAServer); + } + + @Override + public Long getActiveWarnsForUser(AUserInAServer aUserInAServer) { + return warnRepository.countByWarnedUserAndDecayedFalse(aUserInAServer); + } + + } diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/command/myWarnings/myWarnings_response_embed_en_US.ftl b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/command/myWarnings/myWarnings_response_embed_en_US.ftl new file mode 100644 index 000000000..8213993b2 --- /dev/null +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/resources/templates/command/myWarnings/myWarnings_response_embed_en_US.ftl @@ -0,0 +1,17 @@ +{ + "author": { + "name": "${member.effectiveName}", + "avatar": "${member.user.effectiveAvatarUrl}" + }, + "color" : { + "r": 200, + "g": 0, + "b": 255 + } + <#assign userMention>${member.effectiveName} + <#if serverUsesDecays> + ,"description" :"<#include "myWarnings_with_decay_embed_description">" + <#else> + ,"description" :"<#include "myWarnings_embed_description">" + +} \ No newline at end of file diff --git a/abstracto-application/abstracto-modules/moderation/moderation-int/src/main/java/dev/sheldan/abstracto/moderation/models/template/commands/MyWarningsModel.java b/abstracto-application/abstracto-modules/moderation/moderation-int/src/main/java/dev/sheldan/abstracto/moderation/models/template/commands/MyWarningsModel.java new file mode 100644 index 000000000..66201caf9 --- /dev/null +++ b/abstracto-application/abstracto-modules/moderation/moderation-int/src/main/java/dev/sheldan/abstracto/moderation/models/template/commands/MyWarningsModel.java @@ -0,0 +1,15 @@ +package dev.sheldan.abstracto.moderation.models.template.commands; + +import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +@Getter +@Setter +@SuperBuilder +public class MyWarningsModel extends UserInitiatedServerContext { + private Boolean serverUsesDecays; + private Long totalWarnCount; + private Long currentWarnCount; +} diff --git a/abstracto-application/abstracto-modules/moderation/moderation-int/src/main/java/dev/sheldan/abstracto/moderation/service/management/WarnManagementService.java b/abstracto-application/abstracto-modules/moderation/moderation-int/src/main/java/dev/sheldan/abstracto/moderation/service/management/WarnManagementService.java index 2365264a2..e00c4efa8 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-int/src/main/java/dev/sheldan/abstracto/moderation/service/management/WarnManagementService.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-int/src/main/java/dev/sheldan/abstracto/moderation/service/management/WarnManagementService.java @@ -1,6 +1,7 @@ package dev.sheldan.abstracto.moderation.service.management; import dev.sheldan.abstracto.core.models.database.AServer; +import dev.sheldan.abstracto.core.models.database.AUser; import dev.sheldan.abstracto.moderation.models.database.Warning; import dev.sheldan.abstracto.core.models.database.AUserInAServer; @@ -10,4 +11,6 @@ import java.util.List; public interface WarnManagementService { Warning createWarning(AUserInAServer warnedAUser, AUserInAServer warningAUser, String reason); List getActiveWarningsInServerOlderThan(AServer server, Instant date); + Long getTotalWarnsForUser(AUserInAServer aUserInAServer); + Long getActiveWarnsForUser(AUserInAServer aUserInAServer); } diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/help/myWarnings_description_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/help/myWarnings_description_en_US.ftl new file mode 100644 index 000000000..50b43fd19 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/help/myWarnings_description_en_US.ftl @@ -0,0 +1 @@ +Shows your warnings. \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/help/myWarnings_long_help_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/help/myWarnings_long_help_en_US.ftl new file mode 100644 index 000000000..73a73c05c --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/help/myWarnings_long_help_en_US.ftl @@ -0,0 +1 @@ +Shows your warnings on this server. \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/help/myWarnings_usage_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/help/myWarnings_usage_en_US.ftl new file mode 100644 index 000000000..5115ed158 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/help/myWarnings_usage_en_US.ftl @@ -0,0 +1 @@ +myWarnings \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/myWarnings_embed_description_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/myWarnings_embed_description_en_US.ftl new file mode 100644 index 000000000..f3057bf57 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/myWarnings_embed_description_en_US.ftl @@ -0,0 +1 @@ +${userMention} has currently ${totalWarnCount} warnings in total. \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/myWarnings_with_decay_embed_description_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/myWarnings_with_decay_embed_description_en_US.ftl new file mode 100644 index 000000000..2ac1f01fe --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/commands/moderation/myWarnings/myWarnings_with_decay_embed_description_en_US.ftl @@ -0,0 +1 @@ +${userMention} has current ${currentWarnCount} Warnings and ${totalWarnCount} warnings in total. \ No newline at end of file