diff --git a/src/main/java/com/hypherionmc/sdlink/core/accounts/MinecraftAccount.java b/src/main/java/com/hypherionmc/sdlink/core/accounts/MinecraftAccount.java index 29df381..c940bcb 100644 --- a/src/main/java/com/hypherionmc/sdlink/core/accounts/MinecraftAccount.java +++ b/src/main/java/com/hypherionmc/sdlink/core/accounts/MinecraftAccount.java @@ -131,7 +131,7 @@ public class MinecraftAccount { try { sdlinkDatabase.upsert(account); - String suffix = " [MC: " + this.username + "]"; + String suffix = this.username; int availableChars = 32 - suffix.length(); String nickname = member.getEffectiveName(); @@ -139,21 +139,23 @@ public class MinecraftAccount { nickname = nickname.substring(0, availableChars - 3) + "..."; } - nickname += suffix; - - try { - member.modifyNickname(nickname).queue(); + String finalnickname = SDLinkConfig.INSTANCE.whitelistingAndLinking.accountLinking.nicknameFormat.replace("%nick%", nickname).replace("%mcname%", suffix); + if (SDLinkConfig.INSTANCE.whitelistingAndLinking.accountLinking.changeNickname) { try { - if (RoleManager.getLinkedRole() != null) { - guild.addRoleToMember(UserSnowflake.fromId(member.getId()), RoleManager.getLinkedRole()).queue(); + member.modifyNickname(finalnickname).queue(); + + try { + if (RoleManager.getLinkedRole() != null) { + guild.addRoleToMember(UserSnowflake.fromId(member.getId()), RoleManager.getLinkedRole()).queue(); + } + } catch (Exception e) { + e.printStackTrace(); } } catch (Exception e) { - e.printStackTrace(); - } - } catch (Exception e) { - if (SDLinkConfig.INSTANCE.generalConfig.debugging) { - e.printStackTrace(); + if (SDLinkConfig.INSTANCE.generalConfig.debugging) { + e.printStackTrace(); + } } } diff --git a/src/main/java/com/hypherionmc/sdlink/core/config/impl/LinkAndWhitelistConfigSettings.java b/src/main/java/com/hypherionmc/sdlink/core/config/impl/LinkAndWhitelistConfigSettings.java index 7f969d1..3ceefd5 100644 --- a/src/main/java/com/hypherionmc/sdlink/core/config/impl/LinkAndWhitelistConfigSettings.java +++ b/src/main/java/com/hypherionmc/sdlink/core/config/impl/LinkAndWhitelistConfigSettings.java @@ -33,6 +33,14 @@ public class LinkAndWhitelistConfigSettings { @Path("requireLinking") @SpecComment("Require users to link their Discord and Minecraft accounts before joining the server") public boolean requireLinking = false; + + @Path("changeNickname") + @SpecComment("Allow nickname changes on account linking") + public boolean changeNickname = true; + + @Path("nicknameFormat") + @SpecComment("The nickname format to use for linked accounts, when changeNickname is enabled. %nick% for current nickname/name and %mcname% for the minecraft name") + public String nicknameFormat = "%nick% [MC:%mcname%]"; } public static class Whitelisting { diff --git a/src/main/java/com/hypherionmc/sdlink/core/managers/PermissionChecker.java b/src/main/java/com/hypherionmc/sdlink/core/managers/PermissionChecker.java index 1c5d557..31b7c47 100644 --- a/src/main/java/com/hypherionmc/sdlink/core/managers/PermissionChecker.java +++ b/src/main/java/com/hypherionmc/sdlink/core/managers/PermissionChecker.java @@ -28,7 +28,6 @@ public class PermissionChecker { // Base Permissions required by the bot to operate private static final List BOT_PERMS = new ArrayList<>() {{ add(Permission.NICKNAME_CHANGE); - add(Permission.NICKNAME_MANAGE); add(Permission.MANAGE_WEBHOOKS); add(Permission.MESSAGE_SEND); add(Permission.MESSAGE_EMBED_LINKS); @@ -50,6 +49,10 @@ public class PermissionChecker { * Run the permission checker to see if the bot has all the required permissions */ public static void checkBotSetup() { + if (SDLinkConfig.INSTANCE.whitelistingAndLinking.accountLinking.changeNickname) { + BOT_PERMS.add(Permission.NICKNAME_MANAGE); + } + StringBuilder builder = new StringBuilder(); builder.append("\r\n").append("******************* Simple Discord Link Errors *******************").append("\r\n"); AtomicInteger errCount = new AtomicInteger();