Added !whitelist clear command for limited whitelisters, changed logging solution to logback, re-shaded deps

This commit is contained in:
Joe Shimell 2020-11-18 00:57:09 +00:00
parent af2a949e58
commit dabffb1a1f
11 changed files with 290 additions and 23 deletions

115
pom.xml
View File

@ -6,7 +6,7 @@
<groupId>uk.co.angrybee.joe</groupId>
<artifactId>discord-whitelister</artifactId>
<version>1.4.1</version>
<version>1.4.2</version>
<name>discord-whitelister</name>
<url>https://github.com/JoeShimell/DiscordWhitelisterSpigot</url>
@ -61,21 +61,9 @@
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.13.3</version>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
@ -144,6 +132,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
@ -156,6 +145,100 @@
<finalName>${project.artifactId}-${project.version}</finalName>
<minimizeJar>true</minimizeJar>
<relocations>
<relocation>
<pattern>com.fasterxml.jackson</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.com.fasterxml.jackson</shadedPattern>
</relocation>
<relocation>
<pattern>net.dv8tion.jda</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.net.dv8tion.jda</shadedPattern>
</relocation>
<relocation>
<pattern>gnu.trove</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.gnu.trove</shadedPattern>
</relocation>
<relocation>
<pattern>javax.annotation</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.javax.annotation</shadedPattern>
</relocation>
<relocation>
<pattern>org.slf4j</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.org.slf4j</shadedPattern>
</relocation>
<relocation>
<pattern>org.yaml.snakeyaml</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.org.yaml.snakeyaml</shadedPattern>
</relocation>
<relocation>
<pattern>org.json.simple</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.org.json.simple</shadedPattern>
</relocation>
<relocation>
<pattern>org.jetbrains.annotations</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.org.jetbrains.annotations</shadedPattern>
</relocation>
<relocation>
<pattern>org.jdom2</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.org.jdom2</shadedPattern>
</relocation>
<relocation>
<pattern>org.hamcrest</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.org.hamcrest</shadedPattern>
</relocation>
<relocation>
<pattern>org.junit</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.org.junit</shadedPattern>
</relocation>
<relocation>
<pattern>org.apache</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.org.apache</shadedPattern>
</relocation>
<relocation>
<pattern>com.google.common</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.com.google.common</shadedPattern>
</relocation>
<relocation>
<pattern>com.iwebpp.crypto</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.com.iwebpp.crypto</shadedPattern>
</relocation>
<relocation>
<pattern>com.neovisionaries.ws.client</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.com.neovisionaries.ws.client</shadedPattern>
</relocation>
<relocation>
<pattern>junit</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.junit</shadedPattern>
</relocation>
<relocation>
<pattern>okhttp3</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.okhttp3</shadedPattern>
</relocation>
<relocation>
<pattern>okio</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.okio</shadedPattern>
</relocation>
<relocation>
<pattern>ch.qos.logback</pattern>
<shadedPattern>uk.co.angrybee.joe.shaded.ch.qos.logback</shadedPattern>
</relocation>
</relocations>
</configuration>
</plugin>

View File

@ -36,7 +36,6 @@ public class AuthorPermissions
public AuthorPermissions(MessageReceivedEvent event)
{
// TODO: merge these all together? why calling more times than needed
for (Role role : event.getGuild().getMember(event.getAuthor()).getRoles())
{
if(!DiscordWhitelister.useIdForRoles)

View File

@ -124,6 +124,12 @@ public class CustomMessagesConfig
CheckEntry("instructional-message-title", "How to Whitelist");
CheckEntry("instructional-message", "Use `!whitelist add <minecraftUsername>` to whitelist yourself. In the case of whitelisting an incorrect name, please contact a staff member to clear it from the whitelist.");
CheckEntry("whitelist-clear-success-title", "Successfully Removed {Sender}'s Whitelisted Entries");
CheckEntry("whitelist-clear-success-message", "{Sender} successfully removed the following users from the whitelist: \n{RemovedEntries}\nYou now have **{MaxWhitelistAmount} whitelist(s) remaining**.");
CheckEntry("whitelist-clear-failure-title", "No Entries to Remove");
CheckEntry("whitelist-clear-failure-message", "{Sender}, you do not have any whitelisted entries to remove. ");
}
}

View File

@ -68,6 +68,8 @@ public class CustomPrefixConfig
CheckEntry("clear-name-prefix", "!clearname");
CheckEntry("limited-whitelist-clear-prefix", "!whitelist clear");
CheckEntry("clear-ban-prefix", "!clearban");
}
}

View File

@ -96,6 +96,8 @@ public class MainConfig
// EasyWhitelist support (https://www.spigotmc.org/resources/easywhitelist-name-based-whitelist.65222/)
CheckEntry("use-easy-whitelist", false);
CheckEntry("allow-limited-whitelisters-to-unwhitelist-self", true);
// If adding the whitelisted role to the discord user is enabled
CheckEntry("whitelisted-role-auto-add", false);

View File

@ -44,6 +44,7 @@ public class DiscordClient extends ListenerAdapter
public static String whitelistAddPrefix;
public static String whitelistRemovePrefix;
public static String clearNamePrefix;
public static String limitedWhitelistClearPrefix;
public static String clearBanPrefix;
private static MessageEmbed botInfo;
@ -1474,13 +1475,156 @@ public class DiscordClient extends ListenerAdapter
}
}
// Clear whitelists for limited-whitelisters
if(messageContents.toLowerCase().startsWith("!whitelist clear") && !DiscordWhitelister.getUseCustomPrefixes()
|| DiscordWhitelister.getUseCustomPrefixes() && messageContents.toLowerCase().startsWith(limitedWhitelistClearPrefix))
{
if(!MainConfig.getMainConfig().getBoolean("allow-limited-whitelisters-to-unwhitelist-self"))
return;
// just inform staff, can add custom messages later if really needed
if(authorPermissions.isUserCanAddRemove() && !authorPermissions.isUserIsBanned() || authorPermissions.isUserCanAdd() && !authorPermissions.isUserIsBanned())
{
EmbedBuilder onlyForLimitedWhitelisters = new EmbedBuilder();
onlyForLimitedWhitelisters.addField("This Command is Only Available for Limited Whitelister Roles",
"If staff members need to clear a name from the whitelist please use `!clearname <mcName>`.", false);
onlyForLimitedWhitelisters.setColor(new Color(104, 109, 224));
channel.sendMessage(onlyForLimitedWhitelisters.build()).queue();
return;
}
if(authorPermissions.isUserHasLimitedAdd() && !authorPermissions.isUserIsBanned())
{
List<?> ls = UserList.getRegisteredUsers(author.getId());
// check for names whitelisted
if(ls != null)
{
for (Object minecraftNameToRemove : ls)
{
if (WhitelistedPlayers.usingEasyWhitelist)
{
ExecuteServerCommand("easywl remove " + minecraftNameToRemove.toString());
}
else
{
ExecuteServerCommand("whitelist remove " + minecraftNameToRemove.toString());
}
}
try
{
UserList.resetRegisteredUsers(author.getId());
}
catch (IOException e)
{
DiscordWhitelister.getPluginLogger().severe("Failed to remove" + author.getId() + "'s entries.");
e.printStackTrace();
return;
}
DiscordWhitelister.getPlugin().getLogger().info( author.getName() + "(" + author.getId() + ") triggered whitelist clear. " +
"Successfully removed their whitelisted entries from the user list.");
// Log in Discord channel
EmbedBuilder clearSuccess = new EmbedBuilder();
clearSuccess.setColor(new Color(46, 204, 113));
if(!DiscordWhitelister.useCustomMessages)
{
String message = author.getAsMention() + " successfully removed the following users from the whitelist: \n";
for (Object minercaftName : ls)
{
message += "- " + minercaftName.toString() + "\n";
}
message += "\n You now have **" + maxWhitelistAmount + " whitelist(s) remaining**.";
clearSuccess.addField("Successfully Removed " + author.getName() + "'s Whitelisted Entries",
message, false);
}
else
{
String customTitle = DiscordWhitelister.getCustomMessagesConfig().getString("whitelist-clear-success-title");
customTitle = customTitle.replaceAll("\\{Sender}", author.getName());
String removedNames = "";
for (Object minercaftName : ls)
{
removedNames += "- " + minercaftName.toString() + "\n";
}
String customMessage = DiscordWhitelister.getCustomMessagesConfig().getString("whitelist-clear-success-message");
customMessage = customMessage.replaceAll("\\{Sender}", author.getAsMention());
customMessage = customMessage.replaceAll("\\{RemovedEntries}", removedNames);
customMessage = customMessage.replaceAll("\\{MaxWhitelistAmount}", String.valueOf(maxWhitelistAmount));
clearSuccess.addField(customTitle, customMessage, false);
}
channel.sendMessage(clearSuccess.build()).queue();
if(MainConfig.getMainConfig().getBoolean("whitelisted-role-auto-remove"))
{
// Find all servers bot is in, remove whitelisted roles
for(int i = 0; i < javaDiscordAPI.getGuilds().size(); i++)
{
// Remove the whitelisted role(s)
RemoveRolesFromUser(javaDiscordAPI.getGuilds().get(i), author.getId(), Arrays.asList(whitelistedRoleNames));
}
}
}
else
{
DiscordWhitelister.getPlugin().getLogger().info( author.getName() + "(" + author.getId() + ") triggered whitelist clear. " +
"Could not remove any whitelisted entries as they do not have any.");
// Log in Discord channel
EmbedBuilder noEntries = new EmbedBuilder();
noEntries.setColor(new Color(231, 76, 60));
if(!DiscordWhitelister.useCustomMessages)
{
noEntries.addField("No Entries to Remove", (author.getAsMention() + ", you do not have any whitelisted entries to remove."), false);
}
else
{
String customTitle = DiscordWhitelister.getCustomMessagesConfig().getString("whitelist-clear-failure-title");
String customMessage = DiscordWhitelister.getCustomMessagesConfig().getString("whitelist-clear-failure-message");
customMessage = customMessage.replaceAll("\\{Sender}", author.getAsMention());
noEntries.addField(customTitle, customMessage, false);
}
channel.sendMessage(noEntries.build()).queue();
}
}
if(!authorPermissions.isUserCanAddRemove() && !authorPermissions.isUserCanAdd() && !authorPermissions.isUserHasLimitedAdd() || authorPermissions.isUserIsBanned())
{
EmbedBuilder insufficientPermission = new EmbedBuilder();
insufficientPermission.setColor(new Color(231, 76, 60));
if(!DiscordWhitelister.useCustomMessages)
{
insufficientPermission.addField("Insufficient Permissions", (author.getAsMention() + ", you do not have permission to use this command."), false);
}
else
{
String customTitle = DiscordWhitelister.getCustomMessagesConfig().getString("insufficient-permissions-title");
String customMessage = DiscordWhitelister.getCustomMessagesConfig().getString("insufficient-permissions");
customMessage = customMessage.replaceAll("\\{Sender}", author.getAsMention()); // Only checking for {Sender}
insufficientPermission.addField(customTitle, customMessage, false);
}
channel.sendMessage(insufficientPermission.build()).queue();
return;
}
}
if(messageContents.toLowerCase().startsWith("!clearban") && !DiscordWhitelister.getUseCustomPrefixes()
|| DiscordWhitelister.getUseCustomPrefixes() && messageContents.toLowerCase().startsWith(clearBanPrefix))
{
if(authorPermissions.isUserCanUseClear())
{
// Check if empty command
if(messageContents.toLowerCase().trim().equals("!clearban") && !DiscordWhitelister.getUseCustomPrefixes()
|| messageContents.toLowerCase().trim().equals(clearBanPrefix) && DiscordWhitelister.getUseCustomPrefixes())
@ -1641,7 +1785,7 @@ public class DiscordClient extends ListenerAdapter
}
else
{
DiscordWhitelister.getPlugin().getLogger().warning(discordUserToRemove + " left. Could not removed their whitelisted entries as they did not whitelist through this plugin.");
DiscordWhitelister.getPlugin().getLogger().warning(discordUserToRemove + " left. Could not remove any whitelisted entries as they did not whitelist through this plugin.");
}
}

View File

@ -147,6 +147,7 @@ public class DiscordWhitelister extends JavaPlugin
DiscordClient.whitelistAddPrefix = CustomPrefixConfig.getCustomPrefixesConfig().getString("whitelist-add-prefix").toLowerCase();
DiscordClient.whitelistRemovePrefix = CustomPrefixConfig.getCustomPrefixesConfig().getString("whitelist-remove-prefix").toLowerCase();
DiscordClient.clearNamePrefix = CustomPrefixConfig.getCustomPrefixesConfig().getString("clear-name-prefix").toLowerCase();
DiscordClient.limitedWhitelistClearPrefix = CustomPrefixConfig.getCustomPrefixesConfig().getString("limited-whitelist-clear-prefix").toLowerCase();
DiscordClient.clearBanPrefix = CustomPrefixConfig.getCustomPrefixesConfig().getString("clear-ban-prefix").toLowerCase();
if(!botEnabled)

View File

@ -1,5 +1,6 @@
package uk.co.angrybee.joe.Events;
import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -58,7 +59,24 @@ public class OnBanEvent implements Listener
// Check if the player has ever joined the server or is on the whitelist
Server server = DiscordWhitelister.getPlugin().getServer();
if(!server.getOnlinePlayers().contains(banTarget) || !server.getOnlinePlayers().contains(banTarget))
boolean nameInOfflinePlayers = false;
// Check offline players for banTarget
OfflinePlayer[] offlinePlayers = server.getOfflinePlayers();
for(int i = 0; i < server.getOfflinePlayers().length; i++)
{
if(offlinePlayers[i].getName().equals(banTarget))
nameInOfflinePlayers = true;
}
boolean nameInOnlinePlayers = false;
for(Player onlinePlayer : server.getOnlinePlayers())
{
if(onlinePlayer.getName().equals(banTarget))
nameInOnlinePlayers = true;
}
if(!nameInOnlinePlayers && !nameInOfflinePlayers)
{
if(!WhitelistedPlayers.usingEasyWhitelist && !WhitelistedPlayers.CheckForPlayer(banTarget)
|| WhitelistedPlayers.usingEasyWhitelist && !WhitelistedPlayers.CheckForPlayerEasyWhitelist(banTarget))

View File

@ -10,5 +10,5 @@ public class VersionInfo
return "v." + getVersion();
}
private static String version = "1.4.1";
private static String version = "1.4.2";
}

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="uk.co.angrybee.joe.shaded.ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[DiscordWhitelister] %boldCyan(%-34.-34thread) %red(%10.10X{jda.shard}) %boldGreen(%-15.-15logger{0}) %highlight(%-6level) %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>

View File

@ -1,5 +1,5 @@
name: DiscordWhitelister
version: 1.4.1
version: 1.4.2
author: Joe Shimell
main: uk.co.angrybee.joe.DiscordWhitelister
description: Discord Whitelister.