From 4af85d0e79b4366c889814618ca87f84a56824ac Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Sun, 31 Mar 2024 13:37:05 +0200 Subject: [PATCH] Add option to disable chat filters in private channels A constructor parameter and corresponding field 'disableInPrivate' have been added to the ChatFilter class. This handles disabling specific chat filters in private channels. The necessary checks have been implemented in RegexManager. The configuration for each filter is also updated in RegexConfig to incorporate this new functionality. --- api/src/main/java/com/alttd/chat/config/RegexConfig.java | 7 ++++++- .../main/java/com/alttd/chat/managers/RegexManager.java | 3 +++ api/src/main/java/com/alttd/chat/objects/ChatFilter.java | 8 +++++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/com/alttd/chat/config/RegexConfig.java b/api/src/main/java/com/alttd/chat/config/RegexConfig.java index a358c77..5c10243 100755 --- a/api/src/main/java/com/alttd/chat/config/RegexConfig.java +++ b/api/src/main/java/com/alttd/chat/config/RegexConfig.java @@ -178,13 +178,18 @@ public final class RegexConfig { String regex = entry.getValue().node("regex").getString(); String replacement = entry.getValue().node("replacement").getString(); List exclusions = entry.getValue().node("exclusions").getList(io.leangen.geantyref.TypeToken.get(String.class), new ArrayList<>()); + boolean disableInPrivate = false; + ConfigurationNode node = entry.getValue().node("disable-in-private"); + if (node != null) { + disableInPrivate = node.getBoolean(); + } if (type == null || type.isEmpty() || regex == null || regex.isEmpty()) { ALogger.warn("Filter: " + name + " was set up incorrectly"); } else { if (replacement == null || replacement.isEmpty()) { replacement = name; } - ChatFilter chatFilter = new ChatFilter(name, type, regex, replacement, exclusions); + ChatFilter chatFilter = new ChatFilter(name, type, regex, replacement, exclusions, disableInPrivate); RegexManager.addFilter(chatFilter); } } catch(SerializationException ex) { diff --git a/api/src/main/java/com/alttd/chat/managers/RegexManager.java b/api/src/main/java/com/alttd/chat/managers/RegexManager.java index a04618c..53f186a 100755 --- a/api/src/main/java/com/alttd/chat/managers/RegexManager.java +++ b/api/src/main/java/com/alttd/chat/managers/RegexManager.java @@ -60,7 +60,10 @@ public class RegexManager { return false; } CachedPermissionData permissionData = user.getCachedData().getPermissionData(); + boolean isPrivate = channel.equals("party"); for(ChatFilter chatFilter : chatFilters) { + if (isPrivate && chatFilter.isDisabledInPrivate()) + continue; switch (chatFilter.getType()) { case CHAT: break; diff --git a/api/src/main/java/com/alttd/chat/objects/ChatFilter.java b/api/src/main/java/com/alttd/chat/objects/ChatFilter.java index 49b0037..b5ea87a 100755 --- a/api/src/main/java/com/alttd/chat/objects/ChatFilter.java +++ b/api/src/main/java/com/alttd/chat/objects/ChatFilter.java @@ -17,14 +17,16 @@ public class ChatFilter { private final Pattern pattern; private final String replacement; private final List exclusions; + private final boolean disableInPrivate; - public ChatFilter(String name, String type, String regex, String replacement, List exclusions) { + public ChatFilter(String name, String type, String regex, String replacement, List exclusions, boolean disableInPrivate) { this.name = name; this.filterType = FilterType.getType(type); this.regex = regex; this.pattern = Pattern.compile(getRegex(), Pattern.CASE_INSENSITIVE); this.replacement = replacement; this.exclusions = exclusions; + this.disableInPrivate = disableInPrivate; } public String getName() { @@ -47,6 +49,10 @@ public class ChatFilter { return this.exclusions; } + public boolean isDisabledInPrivate() { + return disableInPrivate; + } + public boolean matches(ModifiableString filterableString) { String input = filterableString.string(); Matcher matcher = pattern.matcher(input);