diff --git a/common/src/main/java/com/discordsrv/common/config/main/NicknameSyncConfig.java b/common/src/main/java/com/discordsrv/common/config/main/NicknameSyncConfig.java index b836d8bd..632b6cf2 100644 --- a/common/src/main/java/com/discordsrv/common/config/main/NicknameSyncConfig.java +++ b/common/src/main/java/com/discordsrv/common/config/main/NicknameSyncConfig.java @@ -18,15 +18,30 @@ package com.discordsrv.common.config.main; +import com.discordsrv.common.abstraction.sync.enums.SyncDirection; import com.discordsrv.common.config.main.generic.AbstractSyncConfig; import com.discordsrv.common.util.Game; import org.spongepowered.configurate.objectmapping.meta.Comment; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.regex.Pattern; + public class NicknameSyncConfig extends AbstractSyncConfig<NicknameSyncConfig, Game, Long> { + public NicknameSyncConfig() { + // Change defaults + timer.enabled = false; + direction = SyncDirection.MINECRAFT_TO_DISCORD; + } + @Comment("The id for the Discord server where the nicknames should be synced from/to") public long serverId = 0L; + // TODO: more info on regex pairs (String#replaceAll) + @Comment("Regex filters for nicknames") + public Map<Pattern, String> nicknameRegexFilters = new LinkedHashMap<>(); + @Override public boolean isSet() { return serverId != 0; diff --git a/common/src/main/java/com/discordsrv/common/feature/nicknamesync/NicknameSyncModule.java b/common/src/main/java/com/discordsrv/common/feature/nicknamesync/NicknameSyncModule.java index 52749cfb..d963652d 100644 --- a/common/src/main/java/com/discordsrv/common/feature/nicknamesync/NicknameSyncModule.java +++ b/common/src/main/java/com/discordsrv/common/feature/nicknamesync/NicknameSyncModule.java @@ -37,12 +37,12 @@ import com.discordsrv.common.util.Game; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.events.guild.member.update.GuildMemberUpdateNicknameEvent; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.Nullable; -import java.util.Collections; -import java.util.List; -import java.util.UUID; +import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.regex.Pattern; /** * {@code long} is used for the guild id being synced to in Discord. @@ -50,6 +50,8 @@ import java.util.concurrent.CompletableFuture; */ public class NicknameSyncModule extends AbstractSyncModule<DiscordSRV, NicknameSyncConfig, Game, Long, String> { + private final Map<NicknameSyncConfig, List<Pair<Pattern, String>>> replacements = new HashMap<>(); + public NicknameSyncModule(DiscordSRV discordSRV) { super(discordSRV, "NICKNAME_SYNC"); } @@ -108,7 +110,10 @@ public class NicknameSyncModule extends AbstractSyncModule<DiscordSRV, NicknameS return discordSRV.getModule(NicknameModule.class); } - protected String cleanNickname(String nickname) { + protected String cleanNickname(NicknameSyncConfig config, String nickname) { + for (Map.Entry<Pattern, String> filter : config.nicknameRegexFilters.entrySet()) { + nickname = filter.getKey().matcher(nickname).replaceAll(filter.getValue()); + } return nickname; } @@ -121,7 +126,7 @@ public class NicknameSyncModule extends AbstractSyncModule<DiscordSRV, NicknameS return guild.retrieveMemberById(userId) .thenApply(DiscordGuildMember::getNickname) - .thenApply(this::cleanNickname); + .thenApply(nickname -> cleanNickname(config, nickname)); } @Override @@ -131,7 +136,8 @@ public class NicknameSyncModule extends AbstractSyncModule<DiscordSRV, NicknameS return CompletableFutureUtil.failed(new SyncFail(GenericSyncResults.MODULE_NOT_FOUND)); } - return module.getNickname(playerUUID).thenApply(this::cleanNickname); + return module.getNickname(playerUUID) + .thenApply(nickname -> cleanNickname(config, nickname)); } @Override