added a condition to check for the correct feature mode

merged mod mail logging back into the mod mail feature and set it up as a mode
This commit is contained in:
Sheldan
2020-05-16 22:40:11 +02:00
parent b0ab88d143
commit 3bb6620cbe
17 changed files with 129 additions and 62 deletions

View File

@@ -22,9 +22,12 @@ public abstract class AbstractConditionableCommand implements ConditionalCommand
@Autowired
protected ImmuneUserCondition immuneUserCondition;
@Autowired
private FeatureModeCondition featureModeCondition;
@Override
public List<CommandCondition> getConditions() {
return new ArrayList<>(Arrays.asList(featureEnabledCondition, commandDisabledCondition, commandDisallowedCondition));
return new ArrayList<>(Arrays.asList(featureEnabledCondition, commandDisabledCondition, commandDisallowedCondition, featureModeCondition));
}
}

View File

@@ -0,0 +1,52 @@
package dev.sheldan.abstracto.core.command.condition;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.models.IncorrectFeatureModeMessage;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.models.database.AFeatureMode;
import dev.sheldan.abstracto.core.service.FeatureConfigService;
import dev.sheldan.abstracto.core.service.FeatureFlagService;
import dev.sheldan.abstracto.core.service.FeatureModeService;
import dev.sheldan.abstracto.templating.service.TemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class FeatureModeCondition implements CommandCondition {
@Autowired
private TemplateService templateService;
@Autowired
private FeatureConfigService featureConfigService;
@Autowired
private FeatureFlagService featureFlagService;
@Autowired
private FeatureModeService modeService;
@Override
public ConditionResult shouldExecute(CommandContext context, Command command) {
String reason = "";
boolean featureModeFits = true;
if(!command.getFeatureModeLimitations().isEmpty()){
FeatureEnum feature = command.getFeature();
if(feature != null) {
AFeatureMode featureMode = modeService.getFeatureMode(feature, context.getUserInitiatedContext().getServer());
featureModeFits = command.getFeatureModeLimitations().stream().anyMatch(featureMode1 -> featureMode1.getKey().equalsIgnoreCase(featureMode.getMode()));
if(!featureModeFits) {
IncorrectFeatureModeMessage featureDisabledMessage = IncorrectFeatureModeMessage
.builder()
.featureConfig(featureConfigService.getFeatureDisplayForFeature(feature))
.command(command)
.build();
reason = templateService.renderTemplate("feature_mode_not_correct_message", featureDisabledMessage);
}
}
}
return ConditionResult.builder().reason(reason).result(featureModeFits).build();
}
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.core.command.models;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@Builder
public class IncorrectFeatureModeMessage {
private FeatureConfig featureConfig;
private Command command;
}

View File

@@ -1,7 +1,12 @@
package dev.sheldan.abstracto.core.listener;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.FeatureMode;
import java.util.Collections;
import java.util.List;
public interface FeatureAware {
FeatureEnum getFeature();
default List<FeatureMode> getFeatureModeLimitations() { return Collections.emptyList();}
}

View File

@@ -28,6 +28,7 @@ public class AFeatureMode {
@Column
@Setter
@Getter
private String mode;
@Column(name = "created")

View File

@@ -23,4 +23,7 @@ public interface FeatureModeService {
AFeatureMode createMode(FeatureEnum featureEnum, AServer server, FeatureMode mode);
AFeatureMode createMode(AFeature feature, AServer server, FeatureMode mode);
AFeatureMode createMode(AFeatureFlag featureFlag, FeatureMode mode);
AFeatureMode getFeatureMode(FeatureEnum featureEnum, AServer server);
AFeatureMode getFeatureMode(AFeature feature, AServer server);
}