Skip to content

Commit

Permalink
Merge pull request #43 from Xyntexx/feature/rolecheck_at_startup
Browse files Browse the repository at this point in the history
Feature/role check at startup
  • Loading branch information
Shimell committed Mar 17, 2021
2 parents 0efbb9e + ab6c20b commit b14beba
Show file tree
Hide file tree
Showing 4 changed files with 145 additions and 115 deletions.
233 changes: 140 additions & 93 deletions src/main/java/uk/co/angrybee/joe/DiscordClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -489,15 +489,8 @@ public void onMessageReceived(MessageReceivedEvent messageReceivedEvent)
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)
{
Expand Down Expand Up @@ -744,12 +737,8 @@ else if (whitelistRoles.isEmpty())
}

// 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"));
}
RemovePerms(splitMessage[userNameIndex]);
}

// Success message
if(DiscordWhitelister.useCustomMessages)
Expand Down Expand Up @@ -1217,73 +1206,133 @@ private static void CheckForRequiredRole(GuildMemberRoleRemoveEvent e)
}
}

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

DiscordWhitelister.getPluginLogger().info("Checking Discord IDs for leavers...");
DiscordWhitelister.getPluginLogger().info("Checking Discord IDs for required roles...");

Yaml idYaml = new Yaml();
UserList.SaveStore();
InputStream inputStream = new FileInputStream(UserList.getUserListFile());
Yaml idYaml = new Yaml();
UserList.SaveStore();
InputStream inputStream = new FileInputStream(UserList.getUserListFile());

PushbackInputStream pushbackInputStream = new PushbackInputStream(inputStream);
int b = pushbackInputStream.read();
PushbackInputStream pushbackInputStream = new PushbackInputStream(inputStream);
int b = pushbackInputStream.read();

if(b == -1)
return;
else
pushbackInputStream.unread(b);
if (b == -1)
return;
else
pushbackInputStream.unread(b);

Map<String, List<String>> userObject = idYaml.load(pushbackInputStream);
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;

// 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;
}
}
}
}
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();
}
}

for(Map.Entry<String, List<String>> entry : userObject.entrySet())
{
// Check if the ID is in any guilds
boolean inGuild = false;
public static void ServerLeaveStartupCheck() {
try {
if (MainConfig.getMainConfig().getBoolean("un-whitelist-on-server-leave")) {

// Check all guilds
for(int i = 0; i < javaDiscordAPI.getGuilds().size(); i++)
{
if(javaDiscordAPI.getGuilds().get(i).getMemberById(entry.getKey()) != null)
inGuild = true;
}
// Don't attempt to remove members if not connected
if (javaDiscordAPI.getStatus() != JDA.Status.CONNECTED)
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));
}
else
{
DiscordClient.ExecuteServerCommand("easywl remove " + entry.getValue().get(i));
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<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 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;
}

DiscordWhitelister.getPluginLogger().info("Removed " + entry.getValue().get(i)
+ " from the whitelist as Discord ID: " + entry.getKey() + " has left the server.");
}
// 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);
// Clear entries in user-list
if (userObject.get(entry.getKey()) != null) {
UserList.getUserList().set(entry.getKey(), null);

UserList.SaveStore();
UserList.SaveStore();

DiscordWhitelister.getPlugin().getLogger().info("Discord ID: " + entry.getKey()
+ " left. Successfully removed their whitelisted entries from the user list.");
DiscordWhitelister.getPlugin().getLogger().info("Discord ID: " + entry.getKey()
+ " left. Successfully removed their whitelisted entries from the user list.");
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}

Expand Down Expand Up @@ -1518,23 +1567,7 @@ public static void RemoveRolesFromUser(Guild targetGuild, String targetUserId, L
}
}
}
// TODO: improve, not go through console commands
// For ultra perms
public static void LpAssignPermsToUser(String targetPlayerName, List<String> 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<String> 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)
{
Expand Down Expand Up @@ -1568,21 +1601,35 @@ public static void TempRemoveOriginalMessageAfterSeconds(MessageReceivedEvent me
RemoveMessageAfterSeconds(messageReceivedEvent, DiscordWhitelister.removeMessageWaitTime);
}


// TODO: improve, not go through console commands
// For ultra perms
public static void UpAssignPermsToUser(String targetPlayerName, List<String> 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<String> 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);
}
}
}
}
14 changes: 2 additions & 12 deletions src/main/java/uk/co/angrybee/joe/DiscordWhitelister.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
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;

Expand Down Expand Up @@ -69,17 +68,8 @@ else if(initSuccess == 1)
}

// 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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -491,11 +491,8 @@ convert username into UUID to avoid depreciation and rate limits (according to h
// 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)
{
Expand Down
6 changes: 1 addition & 5 deletions src/main/java/uk/co/angrybee/joe/events/OnBanEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,7 @@ public void onCommandBan(PlayerCommandPreprocessEvent e) throws IOException
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();

Expand Down

0 comments on commit b14beba

Please sign in to comment.