diff --git a/application/src/main/java/org/togetherjava/tjbot/config/FeatureBlacklist.java b/application/src/main/java/org/togetherjava/tjbot/config/FeatureBlacklist.java index be69163841..cca383ed19 100644 --- a/application/src/main/java/org/togetherjava/tjbot/config/FeatureBlacklist.java +++ b/application/src/main/java/org/togetherjava/tjbot/config/FeatureBlacklist.java @@ -1,8 +1,12 @@ package org.togetherjava.tjbot.config; import com.fasterxml.jackson.annotation.JsonCreator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.Set; +import java.util.function.Function; +import java.util.stream.Stream; /** * Blacklist of features, use {@link FeatureBlacklist#isEnabled(T)} to test if a feature is enabled. @@ -13,6 +17,8 @@ public class FeatureBlacklist { private final Set featureIdentifierBlacklist; + private static final Logger logger = LoggerFactory.getLogger(FeatureBlacklist.class); + /** * Creates a feature blacklist * @@ -32,4 +38,25 @@ public FeatureBlacklist(Set featureIdentifierBlacklist) { public boolean isEnabled(T featureId) { return !featureIdentifierBlacklist.contains(featureId); } + + /** + * Filters features stream to only having enabled features and logs any disabled features. + * + * @param features the feature stream to be filtered + * @param idExtractor function to get the class name of an object + * @return stream of features that are enabled + */ + public Stream filterStream(Stream features, + Function idExtractor) { + return features.filter(f -> { + T id = idExtractor.apply(f); + if (!this.isEnabled(id)) { + logger.info("Feature {} is disabled", id); + return false; + } + return true; + }); + } + + } diff --git a/application/src/main/java/org/togetherjava/tjbot/features/Features.java b/application/src/main/java/org/togetherjava/tjbot/features/Features.java index 7dbc19d447..c3ed8ee19e 100644 --- a/application/src/main/java/org/togetherjava/tjbot/features/Features.java +++ b/application/src/main/java/org/togetherjava/tjbot/features/Features.java @@ -166,6 +166,6 @@ public static Collection createFeatures(JDA jda, Database database, Con features.add(new JShellCommand(jshellEval)); FeatureBlacklist> blacklist = blacklistConfig.normal(); - return features.stream().filter(f -> blacklist.isEnabled(f.getClass())).toList(); + return blacklist.filterStream(features.stream(), Object::getClass).toList(); } } diff --git a/application/src/main/java/org/togetherjava/tjbot/features/code/CodeMessageHandler.java b/application/src/main/java/org/togetherjava/tjbot/features/code/CodeMessageHandler.java index 916cef8bb6..7927a2b035 100644 --- a/application/src/main/java/org/togetherjava/tjbot/features/code/CodeMessageHandler.java +++ b/application/src/main/java/org/togetherjava/tjbot/features/code/CodeMessageHandler.java @@ -73,10 +73,10 @@ public final class CodeMessageHandler extends MessageReceiverAdapter implements public CodeMessageHandler(FeatureBlacklist blacklist, JShellEval jshellEval) { componentIdInteractor = new ComponentIdInteractor(getInteractionType(), getName()); - List codeActions = - Stream.of(new FormatCodeCommand(), new EvalCodeCommand(jshellEval)) - .filter(a -> blacklist.isEnabled(a.getClass().getSimpleName())) - .toList(); + List codeActions = blacklist + .filterStream(Stream.of(new FormatCodeCommand(), new EvalCodeCommand(jshellEval)), + codeAction -> codeAction.getClass().getName()) + .toList(); labelToCodeAction = codeActions.stream() .collect(Collectors.toMap(CodeAction::getLabel, Function.identity(), (x, y) -> y,