From 93bd24cc220e24ce5931c9f7d28e6235d0c76c93 Mon Sep 17 00:00:00 2001 From: HypherionMC Date: Sun, 2 Jul 2023 01:25:55 +0200 Subject: [PATCH] [BUG] Remove Role when unlinking/unwhitelisting --- .../core/accounts/MinecraftAccount.java | 28 ++++++++++++++----- .../linking/UnlinkAccountSlashCommand.java | 2 +- .../UnWhitelistAccountSlashCommand.java | 2 +- 3 files changed, 23 insertions(+), 9 deletions(-) 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 a14d8a8..4dc9291 100644 --- a/src/main/java/com/hypherionmc/sdlink/core/accounts/MinecraftAccount.java +++ b/src/main/java/com/hypherionmc/sdlink/core/accounts/MinecraftAccount.java @@ -12,10 +12,7 @@ import com.hypherionmc.sdlink.core.messaging.Result; import com.hypherionmc.sdlink.core.services.SDLinkPlatform; import com.hypherionmc.sdlink.core.util.SystemUtils; import com.mojang.authlib.GameProfile; -import net.dv8tion.jda.api.entities.Guild; -import net.dv8tion.jda.api.entities.Member; -import net.dv8tion.jda.api.entities.User; -import net.dv8tion.jda.api.entities.UserSnowflake; +import net.dv8tion.jda.api.entities.*; import org.apache.commons.lang3.tuple.Pair; import org.json.JSONException; import org.json.JSONObject; @@ -169,13 +166,22 @@ public class MinecraftAccount { /** * Unlink a previously linked Discord and Minecraft Account */ - public Result unlinkAccount() { + public Result unlinkAccount(Member member, Guild guild) { SDLinkAccount account = getStoredAccount(); if (account == null) return Result.error("No such account found in database"); try { sdlinkDatabase.remove(account, SDLinkAccount.class); + + try { + if (RoleManager.getLinkedRole() != null && member.getRoles().contains(RoleManager.getLinkedRole())) { + guild.removeRoleFromMember(member, RoleManager.getLinkedRole()).queue(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return Result.success("Your discord and Minecraft accounts are no longer linked"); } catch (Exception e) { e.printStackTrace(); @@ -243,7 +249,7 @@ public class MinecraftAccount { /** * Remove a previously whitelisted account from Minecraft and the database */ - public Result unwhitelistAccount() { + public Result unwhitelistAccount(Member member, Guild guild) { SDLinkAccount account = getStoredAccount(); if (account == null) return Result.error("No such account found in database"); @@ -259,7 +265,15 @@ public class MinecraftAccount { // Auto Linking is enabled. So we unlink the account if (SDLinkConfig.INSTANCE.whitelistingAndLinking.whitelisting.linkedWhitelist) { - this.unlinkAccount(); + this.unlinkAccount(member, guild); + } + + try { + if (RoleManager.getWhitelistedRole() != null && member.getRoles().contains(RoleManager.getWhitelistedRole())) { + guild.removeRoleFromMember(member, RoleManager.getWhitelistedRole()).queue(); + } + } catch (Exception e) { + e.printStackTrace(); } return Result.success("Your account has been removed from the whitelist"); diff --git a/src/main/java/com/hypherionmc/sdlink/core/discord/commands/slash/linking/UnlinkAccountSlashCommand.java b/src/main/java/com/hypherionmc/sdlink/core/discord/commands/slash/linking/UnlinkAccountSlashCommand.java index 03bad73..fa1ae91 100644 --- a/src/main/java/com/hypherionmc/sdlink/core/discord/commands/slash/linking/UnlinkAccountSlashCommand.java +++ b/src/main/java/com/hypherionmc/sdlink/core/discord/commands/slash/linking/UnlinkAccountSlashCommand.java @@ -38,7 +38,7 @@ public class UnlinkAccountSlashCommand extends SDLinkSlashCommand { for (SDLinkAccount account : accounts) { if (account.getDiscordID() != null && account.getDiscordID().equalsIgnoreCase(event.getMember().getId())) { MinecraftAccount minecraftAccount = MinecraftAccount.standard(account.getUsername()); - Result result = minecraftAccount.unlinkAccount(); + Result result = minecraftAccount.unlinkAccount(event.getMember(), event.getGuild()); event.reply(result.getMessage()).setEphemeral(true).queue(); break; } diff --git a/src/main/java/com/hypherionmc/sdlink/core/discord/commands/slash/whitelist/UnWhitelistAccountSlashCommand.java b/src/main/java/com/hypherionmc/sdlink/core/discord/commands/slash/whitelist/UnWhitelistAccountSlashCommand.java index 0139084..222cec9 100644 --- a/src/main/java/com/hypherionmc/sdlink/core/discord/commands/slash/whitelist/UnWhitelistAccountSlashCommand.java +++ b/src/main/java/com/hypherionmc/sdlink/core/discord/commands/slash/whitelist/UnWhitelistAccountSlashCommand.java @@ -42,7 +42,7 @@ public class UnWhitelistAccountSlashCommand extends SDLinkSlashCommand { if (SDLinkPlatform.minecraftHelper.isPlayerWhitelisted(minecraftAccount).isError()) { event.reply("Your account is not whitelisted in Minecraft. Cannot remove your account").setEphemeral(true).queue(); } else { - Result result = minecraftAccount.unwhitelistAccount(); + Result result = minecraftAccount.unwhitelistAccount(event.getMember(), event.getGuild()); event.reply(result.getMessage()).setEphemeral(true).queue(); } break;