combine all roles into array once at start up, added extra checks for role startup check, fixed sending the Unwhitelist function discord ID instead of their minecraft names, fixed role check not triggering due to checking for role id not role name
This commit is contained in:
parent
c0fdcaa63c
commit
6d147ce2b3
|
@ -12,7 +12,6 @@ import net.dv8tion.jda.api.requests.GatewayIntent;
|
|||
import net.dv8tion.jda.api.utils.ChunkingFilter;
|
||||
import net.dv8tion.jda.api.utils.MemberCachePolicy;
|
||||
import net.dv8tion.jda.api.utils.cache.CacheFlag;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.JSONValue;
|
||||
|
@ -44,6 +43,8 @@ public class DiscordClient extends ListenerAdapter
|
|||
public static String[] allowedToAddLimitedRoles;
|
||||
public static String[] allowedToClearNamesRoles;
|
||||
|
||||
public static String[] combinedRoles;
|
||||
|
||||
private static String[] targetTextChannels;
|
||||
|
||||
// TODO: remove in favour of split versions
|
||||
|
@ -1115,45 +1116,82 @@ public class DiscordClient extends ListenerAdapter
|
|||
{
|
||||
if(!checkForMissingRole)
|
||||
return;
|
||||
if(checkAllRoles){
|
||||
String[] allRoles = ArrayUtils.addAll(allowedToAddRemoveRoles, ArrayUtils.addAll(allowedToAddRoles, ArrayUtils.addAll(allowedToAddLimitedRoles, allowedToClearNamesRoles)));
|
||||
|
||||
String discordUserId= e.getMember().getId();
|
||||
String disName = e.getMember().getEffectiveName();
|
||||
String disId = e.getMember().getId();
|
||||
String nameForLogger = disName + "(" + disId + ")";
|
||||
|
||||
if(checkAllRoles)
|
||||
{
|
||||
List<Role> removedRoles = e.getRoles();
|
||||
boolean limitedRoleRemoved = false;
|
||||
for(Role role:removedRoles){
|
||||
if(Arrays.asList(allowedToAddLimitedRoles).contains(role.getId())){
|
||||
|
||||
// Check if removed roles contain a limited-add role
|
||||
for(Role role:removedRoles)
|
||||
{
|
||||
if(Arrays.asList(allowedToAddLimitedRoles).contains(role.getName()))
|
||||
{
|
||||
limitedRoleRemoved = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!limitedRoleRemoved){
|
||||
DiscordWhitelister.getPlugin().getLogger().info(discordUserId + " unrelated role removed. Doing nothing...");
|
||||
|
||||
if(!limitedRoleRemoved)
|
||||
return;
|
||||
}
|
||||
DiscordWhitelister.getPlugin().getLogger().info(discordUserId + " weak role removed. Checking remaining roles...");
|
||||
|
||||
DiscordWhitelister.getPlugin().getLogger().info(nameForLogger + "'s limited role(s) has been removed. Checking for remaining roles...");
|
||||
boolean rolesRemaining= false;
|
||||
for(int i = 0; i < javaDiscordAPI.getGuilds().size(); i++)
|
||||
{
|
||||
Member member = javaDiscordAPI.getGuilds().get(i).getMemberById(discordUserId);
|
||||
if(member != null){
|
||||
Member member = javaDiscordAPI.getGuilds().get(i).getMemberById(disId);
|
||||
if(member != null)
|
||||
{
|
||||
List<Role> roles = member.getRoles();
|
||||
for(Role role:roles){
|
||||
if(Arrays.asList(allRoles).contains(role.getId())){
|
||||
for(Role role:roles)
|
||||
{
|
||||
if(Arrays.asList(combinedRoles).contains(role.getName()))
|
||||
{
|
||||
rolesRemaining = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!rolesRemaining){
|
||||
DiscordWhitelister.getPlugin().getLogger().info(discordUserId + " has no roles remaining. Removing their whitelisted entries...");
|
||||
UnWhitelist(discordUserId);
|
||||
|
||||
if(!rolesRemaining)
|
||||
{
|
||||
DiscordWhitelister.getPlugin().getLogger().info(nameForLogger + " has no roles remaining. Removing their whitelisted entries...");
|
||||
|
||||
List<?> ls = UserList.getRegisteredUsers(disId);
|
||||
if(ls != null)
|
||||
{
|
||||
for (Object minecraftNameToRemove : ls)
|
||||
{
|
||||
UnWhitelist(minecraftNameToRemove.toString());
|
||||
}
|
||||
else{
|
||||
DiscordWhitelister.getPlugin().getLogger().info(discordUserId + " has role(s) remaining. Doing nothing...");
|
||||
|
||||
try
|
||||
{
|
||||
UserList.resetRegisteredUsers(disId);
|
||||
}
|
||||
}else if(roleToCheck == null || roleToCheck.equals(""))
|
||||
catch (IOException ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DiscordWhitelister.getPlugin().getLogger().warning(nameForLogger + " does not have any whitelisted entries doing nothing...");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DiscordWhitelister.getPlugin().getLogger().info(nameForLogger + " has role(s) remaining. Doing nothing...");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
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");
|
||||
|
@ -1167,10 +1205,6 @@ public class DiscordClient extends ListenerAdapter
|
|||
return;
|
||||
}
|
||||
|
||||
String disName = e.getMember().getEffectiveName();
|
||||
String disId = e.getMember().getId();
|
||||
String nameForLogger = disName + "(" + disId + ")";
|
||||
|
||||
DiscordWhitelister.getPluginLogger().info(nameForLogger + " does not have the required " +
|
||||
"role (" + roleToCheck + "). Attempting to remove their whitelisted entries...");
|
||||
|
||||
|
@ -1209,15 +1243,22 @@ public class DiscordClient extends ListenerAdapter
|
|||
nameForLogger + " as they did not whitelist through this plugin");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void RequiredRoleStartupCheck() {
|
||||
try {
|
||||
public static void RequiredRoleStartupCheck()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!checkForMissingRole)
|
||||
return;
|
||||
|
||||
if (checkAllRoles) {
|
||||
// Don't attempt to remove roles if not connected
|
||||
if (javaDiscordAPI.getStatus() != JDA.Status.CONNECTED)
|
||||
return;
|
||||
|
||||
if (checkAllRoles)
|
||||
{
|
||||
DiscordWhitelister.getPluginLogger().info("Checking Discord IDs for required roles...");
|
||||
String[] allRoles = ArrayUtils.addAll(allowedToAddRemoveRoles, ArrayUtils.addAll(allowedToAddRoles, ArrayUtils.addAll(allowedToAddLimitedRoles, allowedToClearNamesRoles)));
|
||||
|
||||
Yaml idYaml = new Yaml();
|
||||
UserList.SaveStore();
|
||||
|
@ -1233,34 +1274,59 @@ public class DiscordClient extends ListenerAdapter
|
|||
|
||||
Map<String, List<String>> userObject = idYaml.load(pushbackInputStream);
|
||||
|
||||
for (Map.Entry<String, List<String>> entry : userObject.entrySet()) {
|
||||
// Check if the ID is in any guilds
|
||||
|
||||
for (Map.Entry<String, List<String>> entry : userObject.entrySet())
|
||||
{
|
||||
// Check all guilds
|
||||
boolean rolesRemaining = false;
|
||||
for (int i = 0; i < javaDiscordAPI.getGuilds().size(); i++) {
|
||||
for (int i = 0; i < javaDiscordAPI.getGuilds().size(); i++)
|
||||
{
|
||||
Member member = javaDiscordAPI.getGuilds().get(i).getMemberById(entry.getKey());
|
||||
if (member != null) {
|
||||
|
||||
if (member != null)
|
||||
{
|
||||
List<Role> roles = member.getRoles();
|
||||
for (Role role : roles) {
|
||||
if (Arrays.asList(allRoles).contains(role.getId())) {
|
||||
for (Role role : roles)
|
||||
{
|
||||
if (Arrays.asList(combinedRoles).contains(role.getName()))
|
||||
{
|
||||
rolesRemaining = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!rolesRemaining) {
|
||||
|
||||
if (!rolesRemaining)
|
||||
{
|
||||
DiscordWhitelister.getPlugin().getLogger().info(entry.getKey() + " has no roles remaining. Removing their whitelisted entries...");
|
||||
UnWhitelist(entry.getKey());
|
||||
|
||||
if(entry.getValue() == null || entry.getValue().size() <= 0)
|
||||
{
|
||||
DiscordWhitelister.getPluginLogger().info("User ID: " + entry.getKey() + "has no whitelisted users, doing nothing...");
|
||||
}
|
||||
}
|
||||
return;
|
||||
else
|
||||
{
|
||||
for(String wUser : entry.getValue())
|
||||
{
|
||||
UnWhitelist(wUser);
|
||||
}
|
||||
|
||||
// Clear entries in user-list
|
||||
if (userObject.get(entry.getKey()) != null)
|
||||
{
|
||||
UserList.getUserList().set(entry.getKey(), null);
|
||||
UserList.SaveStore();
|
||||
|
||||
|
||||
if (roleToCheck == null || roleToCheck.equals("")) {
|
||||
DiscordWhitelister.getPlugin().getLogger().info("Successfully removed " + entry.getKey() + " whitelisted entries from the user list.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
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;
|
||||
|
@ -1282,41 +1348,57 @@ public class DiscordClient extends ListenerAdapter
|
|||
|
||||
Map<String, List<String>> userObject = idYaml.load(pushbackInputStream);
|
||||
|
||||
for (Map.Entry<String, List<String>> entry : userObject.entrySet()) {
|
||||
// Check if the ID is in any guilds
|
||||
boolean hasRole = false;
|
||||
|
||||
for (Map.Entry<String, List<String>> entry : userObject.entrySet())
|
||||
{
|
||||
// Check all guilds
|
||||
boolean requiredRole = false;
|
||||
for (int i = 0; i < javaDiscordAPI.getGuilds().size(); i++) {
|
||||
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)) {
|
||||
if (member != null)
|
||||
{
|
||||
for (Role role : member.getRoles())
|
||||
{
|
||||
if (role.getId().equals(roleToCheck))
|
||||
{
|
||||
requiredRole = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!requiredRole) {
|
||||
for (int i = 0; i < entry.getValue().size(); i++) {
|
||||
|
||||
if (!requiredRole)
|
||||
{
|
||||
if(entry.getValue() != null && entry.getValue().size() <= 0)
|
||||
{
|
||||
DiscordWhitelister.getPluginLogger().info("User ID: " + entry.getKey() + "has no whitelisted users, doing nothing...");
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < entry.getValue().size(); i++)
|
||||
{
|
||||
// un-whitelist
|
||||
UnWhitelist(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 + ").");
|
||||
}
|
||||
// Clear entries in user-list
|
||||
if (userObject.get(entry.getKey()) != null) {
|
||||
UserList.getUserList().set(entry.getKey(), null);
|
||||
}
|
||||
|
||||
// Clear entries in user-list
|
||||
if (userObject.get(entry.getKey()) != null)
|
||||
{
|
||||
UserList.getUserList().set(entry.getKey(), null);
|
||||
UserList.SaveStore();
|
||||
|
||||
DiscordWhitelister.getPlugin().getLogger().info("Successfully removed " +entry.getKey() + " whitelisted entries from the user list.");
|
||||
DiscordWhitelister.getPlugin().getLogger().info("Successfully removed " + entry.getKey() + " whitelisted entries from the user list.");
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ import uk.co.angrybee.joe.stores.WhitelistedPlayers;
|
|||
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class DiscordWhitelister extends JavaPlugin
|
||||
{
|
||||
|
@ -219,6 +220,11 @@ public class DiscordWhitelister extends JavaPlugin
|
|||
DiscordClient.allowedToClearNamesRoles[roles] = MainConfig.getMainConfig().getStringList("clear-command-roles").get(roles);
|
||||
}
|
||||
|
||||
// All roles combined for role check
|
||||
DiscordClient.combinedRoles = Stream.of(DiscordClient.allowedToAddRemoveRoles, DiscordClient.allowedToAddRoles,
|
||||
DiscordClient.allowedToAddLimitedRoles, DiscordClient.allowedToClearNamesRoles)
|
||||
.flatMap(Stream::of).toArray(String[]::new);
|
||||
|
||||
// Custom messages check
|
||||
useCustomMessages = MainConfig.getMainConfig().getBoolean("use-custom-messages");
|
||||
useCustomPrefixes = MainConfig.getMainConfig().getBoolean("use-custom-prefixes");
|
||||
|
|
Loading…
Reference in New Issue