added command to check your own commands

This commit is contained in:
Sheldan
2020-05-09 17:19:09 +02:00
parent aba98ef0c6
commit 1e203c19e0
11 changed files with 132 additions and 0 deletions

View File

@@ -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<Parameter> parameters = new ArrayList<>();
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
List<String> 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;
}
}

View File

@@ -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<Warning, Long> {
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
List<Warning> 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);
}

View File

@@ -33,4 +33,16 @@ public class WarnManagementServiceBean implements WarnManagementService {
public List<Warning> 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);
}
}

View File

@@ -0,0 +1,17 @@
{
"author": {
"name": "${member.effectiveName}",
"avatar": "${member.user.effectiveAvatarUrl}"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
}
<#assign userMention>${member.effectiveName}</#assign>
<#if serverUsesDecays>
,"description" :"<#include "myWarnings_with_decay_embed_description">"
<#else>
,"description" :"<#include "myWarnings_embed_description">"
</#if>
}

View File

@@ -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;
}

View File

@@ -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<Warning> getActiveWarningsInServerOlderThan(AServer server, Instant date);
Long getTotalWarnsForUser(AUserInAServer aUserInAServer);
Long getActiveWarnsForUser(AUserInAServer aUserInAServer);
}

View File

@@ -0,0 +1 @@
${userMention} has currently ${totalWarnCount} warnings in total.

View File

@@ -0,0 +1 @@
${userMention} has current ${currentWarnCount} Warnings and ${totalWarnCount} warnings in total.