Add regex filtering to nickname sync

This commit is contained in:
Vankka 2025-02-12 19:35:51 +02:00
parent f3fc87c35b
commit 44378288d5
No known key found for this signature in database
GPG Key ID: 62E48025ED4E7EBB
2 changed files with 27 additions and 6 deletions

View File

@ -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;

View File

@ -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