renamed feature display to feature config

added concept of feature dependencies, if one feature depends on another feature, and it gets enabled, the other feature is enabled as well
changed some feature related apis
added ability to automatically decay warnings (separate feature)
added command to trigger the warn decay manually
added command to decay all active warnings
added method to scheduler service to directly start a cron job
This commit is contained in:
Sheldan
2020-04-29 21:25:26 +02:00
parent 85c47db5ed
commit d5482fabd4
60 changed files with 571 additions and 97 deletions

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.moderation.config.features;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.FeatureDisplay;
import org.springframework.stereotype.Component;
@Component
public class LoggingFeature implements FeatureDisplay {
public class LoggingFeature implements FeatureConfig {
@Override
public FeatureEnum getFeature() {

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.moderation.config.features;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.FeatureDisplay;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import org.springframework.stereotype.Component;
@Component
public class ModerationFeature implements FeatureDisplay {
public class ModerationFeature implements FeatureConfig {
@Override
public FeatureEnum getFeature() {

View File

@@ -5,7 +5,7 @@ import lombok.Getter;
@Getter
public enum ModerationFeatures implements FeatureEnum {
MODERATION("moderation"), WARNING("warnings"), LOGGING("logging"), MUTING("muting");
MODERATION("moderation"), WARNING("warnings"), LOGGING("logging"), MUTING("muting"), AUTOMATIC_WARN_DECAY("warnDecay");
private String key;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.moderation.config.features;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.FeatureDisplay;
import org.springframework.stereotype.Component;
@Component
public class MutingFeature implements FeatureDisplay {
public class MutingFeature implements FeatureConfig {
@Override
public FeatureEnum getFeature() {

View File

@@ -0,0 +1,26 @@
package dev.sheldan.abstracto.moderation.config.features;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
@Component
public class WarningDecayFeature implements FeatureConfig {
@Autowired
private WarningFeature warningFeature;
@Override
public FeatureEnum getFeature() {
return ModerationFeatures.AUTOMATIC_WARN_DECAY;
}
@Override
public List<FeatureConfig> getRequiredFeatures() {
return Arrays.asList(warningFeature);
}
}

View File

@@ -1,15 +1,26 @@
package dev.sheldan.abstracto.moderation.config.features;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.FeatureDisplay;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
@Component
public class WarningFeature implements FeatureDisplay {
public class WarningFeature implements FeatureConfig {
@Autowired
private WarningDecayFeature warningDecayFeature;
@Override
public FeatureEnum getFeature() {
return ModerationFeatures.WARNING;
}
@Override
public List<FeatureConfig> getDependantFeatures() {
return Arrays.asList(warningDecayFeature);
}
}

View File

@@ -1,10 +1,7 @@
package dev.sheldan.abstracto.moderation.models.database;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.*;
import javax.persistence.*;
import java.time.Instant;
@@ -38,9 +35,11 @@ public class Warning {
private Instant warnDate;
@Getter
@Setter
private Boolean decayed;
@Getter
@Setter
private Instant decayDate;

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.moderation.models.template.job;
import dev.sheldan.abstracto.core.models.context.ServerContext;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import java.util.List;
@Getter
@Setter
@SuperBuilder
public class WarnDecayLogModel extends ServerContext {
private List<WarnDecayWarning> warnings;
}

View File

@@ -0,0 +1,16 @@
package dev.sheldan.abstracto.moderation.models.template.job;
import dev.sheldan.abstracto.moderation.models.database.Warning;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import net.dv8tion.jda.api.entities.Member;
@Getter
@Setter
@Builder
public class WarnDecayWarning {
private Warning warning;
private Member warnedMember;
private Member warningMember;
}

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.moderation.service;
import dev.sheldan.abstracto.core.models.FullUser;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.moderation.models.database.Warning;
import dev.sheldan.abstracto.moderation.models.template.commands.WarnLog;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
@@ -13,4 +14,6 @@ public interface WarnService {
Warning warnUser(Member warnedMember, Member warningMember, String reason, TextChannel feedbackChannel);
Warning warnUser(FullUser warnedUser, FullUser warningUser, String reason, TextChannel feedbackChannel);
void warnUserWithLog(Member warnedMember, Member warningMember, String reason, WarnLog warnLog, TextChannel feedbackChannel);
void decayWarningsForServer(AServer server);
void decayAllWarningsForServer(AServer server, Boolean logWarnings);
}

View File

@@ -1,8 +1,13 @@
package dev.sheldan.abstracto.moderation.service.management;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.moderation.models.database.Warning;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import java.time.Instant;
import java.util.List;
public interface WarnManagementService {
Warning createWarning(AUserInAServer warnedAUser, AUserInAServer warningAUser, String reason);
List<Warning> getActiveWarningsInServerOlderThan(AServer server, Instant date);
}