From d545defdb316e7c267273f6ccc0e9247b4a23c00 Mon Sep 17 00:00:00 2001 From: Xyntexx Date: Tue, 16 Mar 2021 22:07:23 +0200 Subject: [PATCH 1/3] refactoring: combining permission assignment and removal to functions --- .../uk/co/angrybee/joe/DiscordClient.java | 70 ++++++++----------- .../joe/commands/discord/CommandAdd.java | 7 +- .../uk/co/angrybee/joe/events/OnBanEvent.java | 6 +- 3 files changed, 32 insertions(+), 51 deletions(-) diff --git a/src/main/java/uk/co/angrybee/joe/DiscordClient.java b/src/main/java/uk/co/angrybee/joe/DiscordClient.java index 473c4fe..167658e 100644 --- a/src/main/java/uk/co/angrybee/joe/DiscordClient.java +++ b/src/main/java/uk/co/angrybee/joe/DiscordClient.java @@ -489,15 +489,8 @@ public class DiscordClient extends ListenerAdapter channel.sendMessage(embedBuilderSuccess.build()).queue(); TempRemoveOriginalMessageAfterSeconds(messageReceivedEvent); - if(DiscordWhitelister.useLuckPerms) - { - LpRemovePermsFromUser(finalNameToRemove, PermissionsConfig.getPermissionsConfig().getStringList("perms-on-whitelist")); - } - - if(DiscordWhitelister.useUltraPerms) - { - UpRemovePermsFromUser(finalNameToRemove, PermissionsConfig.getPermissionsConfig().getStringList("perms-on-whitelist")); - } + //remove perms + RemovePerms(finalNameToRemove); if(whitelistedRoleAutoRemove) { @@ -745,11 +738,8 @@ public class DiscordClient extends ListenerAdapter // Clear permissions // Clear permissions - if(DiscordWhitelister.useLuckPerms) - DiscordClient.LpRemovePermsFromUser(splitMessage[userNameIndex], PermissionsConfig.getPermissionsConfig().getStringList("perms-on-whitelist")); - if(DiscordWhitelister.useUltraPerms) - DiscordClient.UpRemovePermsFromUser(splitMessage[userNameIndex], PermissionsConfig.getPermissionsConfig().getStringList("perms-on-whitelist")); - } + DiscordClient.RemovePerms(splitMessage[userNameIndex]); + } // Success message if(DiscordWhitelister.useCustomMessages) @@ -1518,23 +1508,7 @@ public class DiscordClient extends ListenerAdapter } } } - // TODO: improve, not go through console commands - // For ultra perms - public static void LpAssignPermsToUser(String targetPlayerName, List permsToAssign) - { - for(int i = 0; i < permsToAssign.size(); i++) - { - DiscordClient.ExecuteServerCommand("lp user " + targetPlayerName + " permission set " + permsToAssign.get(i)); - } - } - public static void LpRemovePermsFromUser(String targetPlayerName, List permsToRemove) - { - for(int i = 0; i < permsToRemove.size(); i++) - { - DiscordClient.ExecuteServerCommand("lp user " + targetPlayerName + " permission unset " + permsToRemove.get(i)); - } - } public static void RemoveMessageAfterSeconds(MessageReceivedEvent messageReceivedEvent, Integer timeToWait) { @@ -1568,21 +1542,35 @@ public class DiscordClient extends ListenerAdapter RemoveMessageAfterSeconds(messageReceivedEvent, DiscordWhitelister.removeMessageWaitTime); } + // TODO: improve, not go through console commands - // For ultra perms - public static void UpAssignPermsToUser(String targetPlayerName, List permsToAssign) - { - for(int i = 0; i < permsToAssign.size(); i++) - { - DiscordClient.ExecuteServerCommand("upc addPlayerPermission " + targetPlayerName + " " + permsToAssign.get(i)); + public static void AssignPerms(String targetPlayerName){ + // For ultra perms: + if(DiscordWhitelister.useLuckPerms){ + for (String s : PermissionsConfig.getPermissionsConfig().getStringList("perms-on-whitelist")) { + DiscordClient.ExecuteServerCommand("lp user " + targetPlayerName + " permission set " + s); + } + } + // For LuckPerms: + if(DiscordWhitelister.useUltraPerms){ + for (String s : PermissionsConfig.getPermissionsConfig().getStringList("perms-on-whitelist")) { + DiscordClient.ExecuteServerCommand("upc addPlayerPermission " + targetPlayerName + " " + s); + } } } - public static void UpRemovePermsFromUser(String targetPlayerName, List permsToRemove) - { - for(int i = 0; i < permsToRemove.size(); i++) - { - DiscordClient.ExecuteServerCommand("upc removePlayerPermission " + targetPlayerName + " " + permsToRemove.get(i)); + public static void RemovePerms(String targetPlayerName){ + // For ultra perms: + if(DiscordWhitelister.useLuckPerms){ + for (String s : PermissionsConfig.getPermissionsConfig().getStringList("perms-on-whitelist")) { + DiscordClient.ExecuteServerCommand("lp user " + targetPlayerName + " permission unset " + s); + } + } + // For LuckPerms: + if(DiscordWhitelister.useUltraPerms){ + for (String s : PermissionsConfig.getPermissionsConfig().getStringList("perms-on-whitelist")) { + DiscordClient.ExecuteServerCommand("upc removePlayerPermission " + targetPlayerName + " " + s); + } } } } diff --git a/src/main/java/uk/co/angrybee/joe/commands/discord/CommandAdd.java b/src/main/java/uk/co/angrybee/joe/commands/discord/CommandAdd.java index fa78dc3..66edd39 100644 --- a/src/main/java/uk/co/angrybee/joe/commands/discord/CommandAdd.java +++ b/src/main/java/uk/co/angrybee/joe/commands/discord/CommandAdd.java @@ -491,11 +491,8 @@ public class CommandAdd // For instructional message successfulWhitelist.set(true); - if(DiscordWhitelister.useLuckPerms) - DiscordClient.LpAssignPermsToUser(finalNameToAdd, PermissionsConfig.getPermissionsConfig().getStringList("perms-on-whitelist")); - - if(DiscordWhitelister.useUltraPerms) - DiscordClient.UpAssignPermsToUser(finalNameToAdd, PermissionsConfig.getPermissionsConfig().getStringList("perms-on-whitelist")); + //Assign perms: + DiscordClient.AssignPerms(finalNameToAdd); if(DiscordWhitelister.useOnWhitelistCommands) { diff --git a/src/main/java/uk/co/angrybee/joe/events/OnBanEvent.java b/src/main/java/uk/co/angrybee/joe/events/OnBanEvent.java index a9d9498..103051d 100644 --- a/src/main/java/uk/co/angrybee/joe/events/OnBanEvent.java +++ b/src/main/java/uk/co/angrybee/joe/events/OnBanEvent.java @@ -145,11 +145,7 @@ public class OnBanEvent implements Listener UserList.getUserList().set(targetDiscordId, null); // Remove perms on ban if enabled - if(DiscordWhitelister.useLuckPerms) - DiscordClient.LpRemovePermsFromUser(banTarget, PermissionsConfig.getPermissionsConfig().getStringList("perms-on-whitelist")); - - if(DiscordWhitelister.useUltraPerms) - DiscordClient.UpRemovePermsFromUser(banTarget, PermissionsConfig.getPermissionsConfig().getStringList("perms-on-whitelist")); + DiscordClient.RemovePerms(banTarget); UserList.SaveStore(); From c07191e18f0349fdf181c280a3369fd4953f403a Mon Sep 17 00:00:00 2001 From: Xyntexx Date: Tue, 16 Mar 2021 23:16:20 +0200 Subject: [PATCH 2/3] add permission removing to startup check --- src/main/java/uk/co/angrybee/joe/DiscordClient.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/uk/co/angrybee/joe/DiscordClient.java b/src/main/java/uk/co/angrybee/joe/DiscordClient.java index 167658e..b55444c 100644 --- a/src/main/java/uk/co/angrybee/joe/DiscordClient.java +++ b/src/main/java/uk/co/angrybee/joe/DiscordClient.java @@ -737,8 +737,7 @@ public class DiscordClient extends ListenerAdapter } // Clear permissions - // Clear permissions - DiscordClient.RemovePerms(splitMessage[userNameIndex]); + RemovePerms(splitMessage[userNameIndex]); } // Success message @@ -1258,7 +1257,8 @@ public class DiscordClient extends ListenerAdapter { DiscordClient.ExecuteServerCommand("easywl remove " + entry.getValue().get(i)); } - + //remove permissions + RemovePerms(entry.getValue().get(i)); DiscordWhitelister.getPluginLogger().info("Removed " + entry.getValue().get(i) + " from the whitelist as Discord ID: " + entry.getKey() + " has left the server."); } From ab6c20b447e956e13883c2757f7692cea9c2ea85 Mon Sep 17 00:00:00 2001 From: Xyntexx Date: Wed, 17 Mar 2021 00:07:33 +0200 Subject: [PATCH 3/3] feat: check for required role at startup --- .../uk/co/angrybee/joe/DiscordClient.java | 181 ++++++++++++------ .../co/angrybee/joe/DiscordWhitelister.java | 14 +- 2 files changed, 122 insertions(+), 73 deletions(-) diff --git a/src/main/java/uk/co/angrybee/joe/DiscordClient.java b/src/main/java/uk/co/angrybee/joe/DiscordClient.java index b55444c..4e15491 100644 --- a/src/main/java/uk/co/angrybee/joe/DiscordClient.java +++ b/src/main/java/uk/co/angrybee/joe/DiscordClient.java @@ -1206,74 +1206,133 @@ public class DiscordClient extends ListenerAdapter } } - public static void StartUpMemberCheck() throws IOException - { - if(!MainConfig.getMainConfig().getBoolean("un-whitelist-on-server-leave")) - return; + public static void RequiredRoleStartupCheck() { + try { + if (!checkForMissingRole) + return; - // Don't attempt to remove members if not connected - if(javaDiscordAPI.getStatus() != JDA.Status.CONNECTED) - return; - - DiscordWhitelister.getPluginLogger().info("Checking Discord IDs for leavers..."); - - Yaml idYaml = new Yaml(); - UserList.SaveStore(); - InputStream inputStream = new FileInputStream(UserList.getUserListFile()); - - PushbackInputStream pushbackInputStream = new PushbackInputStream(inputStream); - int b = pushbackInputStream.read(); - - if(b == -1) - return; - else - pushbackInputStream.unread(b); - - Map> userObject = idYaml.load(pushbackInputStream); - - for(Map.Entry> entry : userObject.entrySet()) - { - // Check if the ID is in any guilds - boolean inGuild = false; - - // Check all guilds - for(int i = 0; i < javaDiscordAPI.getGuilds().size(); i++) - { - if(javaDiscordAPI.getGuilds().get(i).getMemberById(entry.getKey()) != null) - inGuild = true; + if (roleToCheck == null || roleToCheck.equals("")) { + DiscordWhitelister.getPluginLogger().warning("'un-whitelist-if-missing-role' is enabled but " + + "'role-to-check-for' is null or empty, please double check the config"); + return; } - // un-whitelist associated minecraft usernames if not in any guilds - if(!inGuild) - { - for(int i = 0; i < entry.getValue().size(); i++) - { - // un-whitelist - if(!WhitelistedPlayers.usingEasyWhitelist) - { - DiscordClient.ExecuteServerCommand("whitelist remove " + entry.getValue().get(i)); + DiscordWhitelister.getPluginLogger().info("Checking Discord IDs for required roles..."); + + Yaml idYaml = new Yaml(); + UserList.SaveStore(); + InputStream inputStream = new FileInputStream(UserList.getUserListFile()); + + PushbackInputStream pushbackInputStream = new PushbackInputStream(inputStream); + int b = pushbackInputStream.read(); + + if (b == -1) + return; + else + pushbackInputStream.unread(b); + + Map> userObject = idYaml.load(pushbackInputStream); + + for (Map.Entry> entry : userObject.entrySet()) { + // Check if the ID is in any guilds + boolean hasRole = false; + + // Check all guilds + boolean requiredRole = false; + for (int i = 0; i < javaDiscordAPI.getGuilds().size(); i++) { + Member member = javaDiscordAPI.getGuilds().get(i).getMemberById(entry.getKey()); + if (member != null) { + for (Role role : member.getRoles()) { + if (role.getId().equals(roleToCheck)) { + requiredRole = true; + break; + } + } } - else - { - DiscordClient.ExecuteServerCommand("easywl remove " + entry.getValue().get(i)); - } - //remove permissions - RemovePerms(entry.getValue().get(i)); - DiscordWhitelister.getPluginLogger().info("Removed " + entry.getValue().get(i) - + " from the whitelist as Discord ID: " + entry.getKey() + " has left the server."); } - - // Clear entries in user-list - if(userObject.get(entry.getKey()) != null) - { - UserList.getUserList().set(entry.getKey(), null); - - UserList.SaveStore(); - - DiscordWhitelister.getPlugin().getLogger().info("Discord ID: " + entry.getKey() - + " left. Successfully removed their whitelisted entries from the user list."); + if (!requiredRole) { + for (int i = 0; i < entry.getValue().size(); i++) { + // un-whitelist + if (!WhitelistedPlayers.usingEasyWhitelist) { + DiscordClient.ExecuteServerCommand("whitelist remove " + entry.getValue().get(i)); + } else { + DiscordClient.ExecuteServerCommand("easywl remove " + entry.getValue().get(i)); + } + //remove permissions + RemovePerms(entry.getValue().get(i)); + DiscordWhitelister.getPluginLogger().info("Removed " + entry.getValue().get(i) + + " from the whitelist as Discord ID: " + entry.getKey() + " due to missing required role (" + roleToCheck + ")."); + } } } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void ServerLeaveStartupCheck() { + try { + if (MainConfig.getMainConfig().getBoolean("un-whitelist-on-server-leave")) { + + // Don't attempt to remove members if not connected + if (javaDiscordAPI.getStatus() != JDA.Status.CONNECTED) + return; + + DiscordWhitelister.getPluginLogger().info("Checking Discord IDs for leavers..."); + + Yaml idYaml = new Yaml(); + UserList.SaveStore(); + InputStream inputStream = new FileInputStream(UserList.getUserListFile()); + + PushbackInputStream pushbackInputStream = new PushbackInputStream(inputStream); + int b = pushbackInputStream.read(); + + if (b == -1) + return; + else + pushbackInputStream.unread(b); + + Map> userObject = idYaml.load(pushbackInputStream); + + for (Map.Entry> entry : userObject.entrySet()) { + // Check if the ID is in any guilds + boolean inGuild = false; + + // Check all guilds + for (int i = 0; i < javaDiscordAPI.getGuilds().size(); i++) { + if (javaDiscordAPI.getGuilds().get(i).getMemberById(entry.getKey()) != null) + inGuild = true; + } + + // un-whitelist associated minecraft usernames if not in any guilds + if (!inGuild) { + for (int i = 0; i < entry.getValue().size(); i++) { + // un-whitelist + if (!WhitelistedPlayers.usingEasyWhitelist) { + DiscordClient.ExecuteServerCommand("whitelist remove " + entry.getValue().get(i)); + } else { + DiscordClient.ExecuteServerCommand("easywl remove " + entry.getValue().get(i)); + } + //remove permissions + RemovePerms(entry.getValue().get(i)); + DiscordWhitelister.getPluginLogger().info("Removed " + entry.getValue().get(i) + + " from the whitelist as Discord ID: " + entry.getKey() + " has left the server."); + } + + // Clear entries in user-list + if (userObject.get(entry.getKey()) != null) { + UserList.getUserList().set(entry.getKey(), null); + + UserList.SaveStore(); + + DiscordWhitelister.getPlugin().getLogger().info("Discord ID: " + entry.getKey() + + " left. Successfully removed their whitelisted entries from the user list."); + } + } + } + } + } catch (IOException e) { + e.printStackTrace(); } } diff --git a/src/main/java/uk/co/angrybee/joe/DiscordWhitelister.java b/src/main/java/uk/co/angrybee/joe/DiscordWhitelister.java index aa74f52..f937a9a 100755 --- a/src/main/java/uk/co/angrybee/joe/DiscordWhitelister.java +++ b/src/main/java/uk/co/angrybee/joe/DiscordWhitelister.java @@ -15,7 +15,6 @@ import uk.co.angrybee.joe.stores.RemovedList; import uk.co.angrybee.joe.stores.UserList; import uk.co.angrybee.joe.stores.WhitelistedPlayers; -import java.io.IOException; import java.util.List; import java.util.logging.Logger; @@ -69,17 +68,8 @@ public class DiscordWhitelister extends JavaPlugin } // Check for leavers if enabled - if(MainConfig.getMainConfig().getBoolean("un-whitelist-on-server-leave")) - { - try - { - DiscordClient.StartUpMemberCheck(); - } - catch (IOException e) - { - e.printStackTrace(); - } - } + DiscordClient.ServerLeaveStartupCheck(); + DiscordClient.RequiredRoleStartupCheck(); this.getCommand("discordwhitelister").setExecutor(new CommandStatus()); this.getCommand("discordwhitelisterabout").setExecutor(new CommandAbout());