From fe6a79434dda414667a7ff8ae2c79708d9940f6d Mon Sep 17 00:00:00 2001 From: Josua Parks Date: Mon, 20 May 2024 02:13:56 -0700 Subject: [PATCH] Add nickname filter (#485) * Add nickname filter * Fix default nickname filter regex --- .../common/command/commands/NicknameCommand.java | 5 +++++ .../carbon/common/config/PrimaryConfig.java | 15 +++++++++++++++ .../carbon/common/messages/CarbonMessages.java | 3 +++ .../resources/locale/messages-en_US.properties | 1 + 4 files changed, 24 insertions(+) diff --git a/common/src/main/java/net/draycia/carbon/common/command/commands/NicknameCommand.java b/common/src/main/java/net/draycia/carbon/common/command/commands/NicknameCommand.java index b857f9f85..4c998f451 100644 --- a/common/src/main/java/net/draycia/carbon/common/command/commands/NicknameCommand.java +++ b/common/src/main/java/net/draycia/carbon/common/command/commands/NicknameCommand.java @@ -141,6 +141,11 @@ private void applyNickname(final Commander sender, final CarbonPlayer target, fi return; } + if (!sender.hasPermission("carbon.nickname.filter") && !plainNick.matches(this.config.primaryConfig().nickname().filter())) { + this.carbonMessages.nicknameErrorFilter(sender, parsedNick); + return; + } + target.nickname(parsedNick); if (sender instanceof PlayerCommander playerCommander diff --git a/common/src/main/java/net/draycia/carbon/common/config/PrimaryConfig.java b/common/src/main/java/net/draycia/carbon/common/config/PrimaryConfig.java index f0bc93e64..193b3a0dd 100644 --- a/common/src/main/java/net/draycia/carbon/common/config/PrimaryConfig.java +++ b/common/src/main/java/net/draycia/carbon/common/config/PrimaryConfig.java @@ -186,14 +186,22 @@ public boolean updateChecker() { public static void upgrade(final ConfigurationNode node) { final ConfigurationTransformation.VersionedBuilder builder = ConfigurationTransformation.versionedBuilder() .versionKey(ConfigManager.CONFIG_VERSION_KEY); + final ConfigurationTransformation initial = ConfigurationTransformation.builder() .addAction(NodePath.path("use-carbon-nicknames"), (path, value) -> new Object[]{"nickname-settings", "use-carbon-nicknames"}) .build(); builder.addVersion(0, initial); + final ConfigurationTransformation one = ConfigurationTransformation.builder() .addAction(NodePath.path("party-chat"), (path, value) -> new Object[]{"party-chat", "enabled"}) .build(); builder.addVersion(1, one); + + final ConfigurationTransformation two = ConfigurationTransformation.builder() + .addAction(NodePath.path("nickname-settings"), (path, value) -> new Object[]{"filter", ".*"}) + .build(); + builder.addVersion(2, two); + final ConfigurationTransformation.Versioned upgrader = builder.build(); final int from = upgrader.version(node); try { @@ -219,6 +227,9 @@ public static final class NicknameSettings { private List blackList = List.of("notch", "admin"); + @Comment("Regex pattern nicknames must match in order to be applied, can be bypassed with the permission 'carbon.nickname.filter'.") + private String filter = "^[a-zA-Z0-9_]*$"; + @Comment("Format used when displaying nicknames.") public String format = "@'>~"; @@ -233,6 +244,10 @@ public List blackList() { return this.blackList; } + public String filter() { + return this.filter; + } + public int minLength() { return this.minLength; } diff --git a/common/src/main/java/net/draycia/carbon/common/messages/CarbonMessages.java b/common/src/main/java/net/draycia/carbon/common/messages/CarbonMessages.java index dc3f8c0fe..1784cac98 100644 --- a/common/src/main/java/net/draycia/carbon/common/messages/CarbonMessages.java +++ b/common/src/main/java/net/draycia/carbon/common/messages/CarbonMessages.java @@ -197,6 +197,9 @@ void nicknameErrorCharacterLimit( @Message("nickname.error.blacklist") void nicknameErrorBlackList(final Audience audience, final Component nickname); + @Message("nickname.error.filter") + void nicknameErrorFilter(final Audience audience, final Component nickname); + @Message("nickname.show.others") void nicknameShowOthers(final Audience audience, final String target, final Component nickname); diff --git a/common/src/main/resources/locale/messages-en_US.properties b/common/src/main/resources/locale/messages-en_US.properties index 8c42f2e35..db3895dba 100644 --- a/common/src/main/resources/locale/messages-en_US.properties +++ b/common/src/main/resources/locale/messages-en_US.properties @@ -127,6 +127,7 @@ nickname.show.unset=You do not have a nickname set nickname.show=Your nickname is nickname.error.character_limit=Nickname "" has exceeded the character limit. Must be set to ~ characters. nickname.error.blacklist=Nickname "" is not allowed. Please choose another name. +nickname.error.filter=Nicknames must be alphanumeric! reply.target.missing=You have no-one to reply to reply.target.self=You cannot whisper to yourself whisper.console=[] -> []