mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-03-07 08:33:59 +00:00
added setMode to documentation, added error handling with templated exception for set mode and refactored some feature config related methods (changed the equal to be case insensitive)
This commit is contained in:
@@ -13,6 +13,7 @@ import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||
import dev.sheldan.abstracto.core.service.FeatureConfigService;
|
||||
import dev.sheldan.abstracto.core.service.FeatureModeService;
|
||||
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
|
||||
import dev.sheldan.abstracto.templating.service.TemplateService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -34,20 +35,15 @@ public class SetMode extends AbstractConditionableCommand {
|
||||
@Autowired
|
||||
private FeatureFlagManagementService featureFlagManagementService;
|
||||
|
||||
@Autowired
|
||||
private TemplateService templateService;
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandContext commandContext) {
|
||||
String featureName = (String) commandContext.getParameters().getParameters().get(0);
|
||||
String modeName = (String) commandContext.getParameters().getParameters().get(1);
|
||||
|
||||
if(featureConfigService.doesFeatureExist(featureName)) {
|
||||
if(featureConfigService.isModeValid(featureName, modeName)) {
|
||||
featureModeService.setModeForFeatureTo(featureName, commandContext.getUserInitiatedContext().getServer(), modeName);
|
||||
} else {
|
||||
return CommandResult.fromError("Mode not available");
|
||||
}
|
||||
} else {
|
||||
return CommandResult.fromError("Feature does not exist");
|
||||
}
|
||||
return CommandResult.fromSuccess();
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@ import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||
import dev.sheldan.abstracto.core.config.FeatureMode;
|
||||
import dev.sheldan.abstracto.core.config.PostTargetEnum;
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
import dev.sheldan.abstracto.core.exception.FeatureModeNotFoundException;
|
||||
import dev.sheldan.abstracto.core.exception.FeatureNotFoundException;
|
||||
import dev.sheldan.abstracto.core.models.FeatureValidationResult;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -43,7 +45,7 @@ public class FeatureConfigServiceBean implements FeatureConfigService {
|
||||
if(any.isPresent()) {
|
||||
return any.get();
|
||||
}
|
||||
throw new AbstractoRunTimeException(String.format("Feature %s not found in configuration", featureEnum.getKey()));
|
||||
throw new FeatureNotFoundException("", featureEnum.getKey(), getFeaturesAsList());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -64,23 +66,29 @@ public class FeatureConfigServiceBean implements FeatureConfigService {
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getFeatureModesFromFeatureAsString(String featureName) {
|
||||
FeatureConfig featureConfig = getFeatureDisplayForFeature(featureName);
|
||||
return featureConfig.getAvailableModes().stream().map(FeatureMode::getKey).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doesFeatureExist(String name) {
|
||||
return availableFeatures.stream().anyMatch(featureDisplay -> featureDisplay.getFeature().getKey().equals(name));
|
||||
return availableFeatures.stream().anyMatch(featureDisplay -> featureDisplay.getFeature().getKey().equalsIgnoreCase(name));
|
||||
}
|
||||
|
||||
@Override
|
||||
public FeatureEnum getFeatureEnum(String key) {
|
||||
Optional<FeatureConfig> foundFeature = availableFeatures.stream().filter(featureDisplay -> featureDisplay.getFeature().getKey().equals(key)).findAny();
|
||||
Optional<FeatureConfig> foundFeature = availableFeatures.stream().filter(featureDisplay -> featureDisplay.getFeature().getKey().equalsIgnoreCase(key)).findAny();
|
||||
if(foundFeature.isPresent()) {
|
||||
return foundFeature.get().getFeature();
|
||||
}
|
||||
throw new AbstractoRunTimeException(String.format("Feature %s not found.", key));
|
||||
throw new FeatureNotFoundException("", key, getFeaturesAsList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PostTargetEnum getPostTargetEnumByKey(String key) {
|
||||
Predicate<PostTargetEnum> postTargetComparison = postTargetEnum -> postTargetEnum.getKey().equals(key);
|
||||
Predicate<PostTargetEnum> postTargetComparison = postTargetEnum -> postTargetEnum.getKey().equalsIgnoreCase(key);
|
||||
Optional<FeatureConfig> foundFeature = availableFeatures.stream().filter(featureDisplay -> featureDisplay.getRequiredPostTargets().stream().anyMatch(postTargetComparison)).findAny();
|
||||
if(foundFeature.isPresent()) {
|
||||
return foundFeature.get().getRequiredPostTargets().stream().filter(postTargetComparison).findAny().get();
|
||||
@@ -107,24 +115,23 @@ public class FeatureConfigServiceBean implements FeatureConfigService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public FeatureMode getFeatureModeByKey(String key) {
|
||||
Predicate<FeatureMode> postTargetComparison = postTargetEnum -> postTargetEnum.getKey().equals(key);
|
||||
Optional<FeatureConfig> foundFeature = availableFeatures.stream().filter(featureDisplay -> featureDisplay.getAvailableModes().stream().anyMatch(postTargetComparison)).findAny();
|
||||
public FeatureMode getFeatureModeByKey(FeatureConfig featureConfig, String key) {
|
||||
Optional<FeatureMode> foundFeature = featureConfig.getAvailableModes().stream().filter(featureMode -> featureMode.getKey().equalsIgnoreCase(key)).findAny();
|
||||
if(foundFeature.isPresent()) {
|
||||
return foundFeature.get().getAvailableModes().stream().filter(postTargetComparison).findAny().get();
|
||||
return foundFeature.get();
|
||||
}
|
||||
throw new AbstractoRunTimeException(String.format("Feature mode %s not found.", key));
|
||||
throw new FeatureModeNotFoundException("", key, getFeatureModesFromFeatureAsString(featureConfig.getFeature().getKey()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isModeValid(String featureName, String modeName) {
|
||||
return availableFeatures
|
||||
.stream()
|
||||
.filter(featureConfig -> featureConfig.getFeature().getKey().equals(featureName))
|
||||
.filter(featureConfig -> featureConfig.getFeature().getKey().equalsIgnoreCase(featureName))
|
||||
.map(FeatureConfig::getAvailableModes)
|
||||
.anyMatch(featureModes -> featureModes
|
||||
.stream()
|
||||
.anyMatch(featureMode -> featureMode.getKey().equals(modeName))
|
||||
.anyMatch(featureMode -> featureMode.getKey().equalsIgnoreCase(modeName))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService;
|
||||
import dev.sheldan.abstracto.core.config.FeatureConfig;
|
||||
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||
import dev.sheldan.abstracto.core.config.FeatureMode;
|
||||
import dev.sheldan.abstracto.core.models.database.AFeature;
|
||||
@@ -35,19 +36,22 @@ public class FeatureModeServiceBean implements FeatureModeService {
|
||||
|
||||
@Override
|
||||
public AFeatureMode setModeForFeatureTo(AFeatureFlag flag, String newMode) {
|
||||
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(newMode);
|
||||
FeatureConfig featureConfig = featureConfigService.getFeatureDisplayForFeature(flag.getFeature().getKey());
|
||||
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(featureConfig, newMode);
|
||||
return setModeForFeatureTo(flag, featureMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AFeatureMode setModeForFeatureTo(FeatureEnum featureEnum, AServer server, String newMode) {
|
||||
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(newMode);
|
||||
FeatureConfig featureConfig = featureConfigService.getFeatureDisplayForFeature(featureEnum);
|
||||
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(featureConfig, newMode);
|
||||
return setModeForFeatureTo(featureEnum, server, featureMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AFeatureMode setModeForFeatureTo(AFeature feature, AServer server, String newMode) {
|
||||
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(newMode);
|
||||
FeatureConfig featureConfig = featureConfigService.getFeatureDisplayForFeature(feature.getKey());
|
||||
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(featureConfig, newMode);
|
||||
return setModeForFeatureTo(feature, server, featureMode);
|
||||
}
|
||||
|
||||
@@ -77,19 +81,22 @@ public class FeatureModeServiceBean implements FeatureModeService {
|
||||
|
||||
@Override
|
||||
public AFeatureMode createMode(AFeatureFlag flag, String newMode) {
|
||||
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(newMode);
|
||||
FeatureConfig featureConfig = featureConfigService.getFeatureDisplayForFeature(flag.getFeature().getKey());
|
||||
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(featureConfig, newMode);
|
||||
return createMode(flag, featureMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AFeatureMode createMode(FeatureEnum featureEnum, AServer server, String newMode) {
|
||||
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(newMode);
|
||||
FeatureConfig featureConfig = featureConfigService.getFeatureDisplayForFeature(featureEnum);
|
||||
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(featureConfig, newMode);
|
||||
return createMode(featureEnum, server, featureMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AFeatureMode createMode(AFeature feature, AServer server, String newMode) {
|
||||
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(newMode);
|
||||
FeatureConfig featureConfig = featureConfigService.getFeatureDisplayForFeature(feature.getKey());
|
||||
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(featureConfig, newMode);
|
||||
return createMode(feature, server, featureMode);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<#assign availableModes>${availableModes?join(", ")}</#assign><#include "feature_mode_not_found_text">
|
||||
@@ -0,0 +1,31 @@
|
||||
package dev.sheldan.abstracto.core.exception;
|
||||
|
||||
import dev.sheldan.abstracto.templating.Templatable;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class FeatureModeNotFoundException extends AbstractoRunTimeException implements Templatable {
|
||||
|
||||
private final String featureMode;
|
||||
private final List<String> availableModes;
|
||||
|
||||
public FeatureModeNotFoundException(String message, String featureMode, List<String> availableModes) {
|
||||
super(message);
|
||||
this.featureMode = featureMode;
|
||||
this.availableModes = availableModes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTemplateName() {
|
||||
return "feature_mode_not_found";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getTemplateModel() {
|
||||
HashMap<String, Object> parameters = new HashMap<>();
|
||||
parameters.put("featureMode", this.featureMode);
|
||||
parameters.put("availableModes", this.availableModes);
|
||||
return parameters;
|
||||
}
|
||||
}
|
||||
@@ -17,9 +17,10 @@ public interface FeatureConfigService {
|
||||
boolean doesFeatureExist(FeatureConfig name);
|
||||
boolean doesFeatureExist(String name);
|
||||
List<String> getFeaturesAsList();
|
||||
List<String> getFeatureModesFromFeatureAsString(String featureName);
|
||||
FeatureEnum getFeatureEnum(String key);
|
||||
PostTargetEnum getPostTargetEnumByKey(String key);
|
||||
FeatureValidationResult validateFeatureSetup(FeatureConfig featureConfig, AServer server);
|
||||
FeatureMode getFeatureModeByKey(String key);
|
||||
FeatureMode getFeatureModeByKey(FeatureConfig featureConfig, String key);
|
||||
boolean isModeValid(String featureName, String modeName);
|
||||
}
|
||||
|
||||
@@ -101,6 +101,10 @@ Make a role immune against a command::
|
||||
Enforce the role restrictions of commands::
|
||||
* Usage: `restrict <featureName|commandName>`
|
||||
* Description: Causes the role restrictions for a all commands in the `feature`/the `command` to be in effect again.
|
||||
Changing the mode of a feature:
|
||||
* Usage: `setMode <featureName> <newMode>`
|
||||
* Description: Changes the mode of feature `featureName` to `newMode`.
|
||||
|
||||
|
||||
.What does it mean if a role is immune?
|
||||
A command can take a member as a target, for example `ban`. If a role is considered immune, this means, if the member which is the target of the command has the given role, this command will fail. Not all commands support this feature, but only the following:
|
||||
|
||||
@@ -29,7 +29,8 @@ System configuration:: Some properties can be configured while the bot is runnin
|
||||
In the respective features they are noted under `Relevant system configuration`.
|
||||
In order to change this you need to use the command `setConfig` with the provided key and the new desired value.
|
||||
Emotes:: The features have section of the keys of used emotes in the feature, you can change this emote with the `setEmote` command.
|
||||
|
||||
Feature Modes:: Features can have different modes. This means, a feature behaves differently if the mode is changed. For example: `modmail` has two modes: `log` and `noLog`.
|
||||
In the mode `log` mod mail threads wil be logged into the post target `modmailLog` while in the other mode, this does not happen. This consideration of the modes does depend on the implementation of the features.
|
||||
== Features
|
||||
|
||||
include::features/core.adoc[]
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
Changes the mode of a features.
|
||||
@@ -0,0 +1 @@
|
||||
setMode modmail nolog
|
||||
@@ -0,0 +1 @@
|
||||
The features of the bot have different modes. These modes influence how the features behave. With this command you can change the mode of a certain feature in this guild.
|
||||
@@ -0,0 +1 @@
|
||||
The feature to change the mode for.
|
||||
@@ -0,0 +1 @@
|
||||
The internal key of the emote
|
||||
@@ -0,0 +1 @@
|
||||
setMode <feature> <newMode>
|
||||
@@ -0,0 +1 @@
|
||||
Feature mode `${featureMode}` not available. The available feature modes are: ${availableModes}.
|
||||
Reference in New Issue
Block a user