Added !whitelist clear command for limited whitelisters, changed logging solution to logback, re-shaded deps
This commit is contained in:
parent
af2a949e58
commit
dabffb1a1f
115
pom.xml
115
pom.xml
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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. ");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -68,6 +68,8 @@ public class CustomPrefixConfig
|
|||
|
||||
CheckEntry("clear-name-prefix", "!clearname");
|
||||
|
||||
CheckEntry("limited-whitelist-clear-prefix", "!whitelist clear");
|
||||
|
||||
CheckEntry("clear-ban-prefix", "!clearban");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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.");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -10,5 +10,5 @@ public class VersionInfo
|
|||
return "v." + getVersion();
|
||||
}
|
||||
|
||||
private static String version = "1.4.1";
|
||||
private static String version = "1.4.2";
|
||||
}
|
||||
|
|
|
@ -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>
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue