Skip to content
This repository was archived by the owner on Aug 26, 2024. It is now read-only.

Commit dabffb1

Browse files
committed
Added !whitelist clear command for limited whitelisters, changed logging solution to logback, re-shaded deps
1 parent af2a949 commit dabffb1

File tree

11 files changed

+290
-23
lines changed

11 files changed

+290
-23
lines changed

pom.xml

Lines changed: 99 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>uk.co.angrybee.joe</groupId>
88
<artifactId>discord-whitelister</artifactId>
9-
<version>1.4.1</version>
9+
<version>1.4.2</version>
1010

1111
<name>discord-whitelister</name>
1212
<url>https://github.com/JoeShimell/DiscordWhitelisterSpigot</url>
@@ -61,21 +61,9 @@
6161
</dependency>
6262

6363
<dependency>
64-
<groupId>org.apache.logging.log4j</groupId>
65-
<artifactId>log4j-api</artifactId>
66-
<version>2.13.3</version>
67-
</dependency>
68-
69-
<dependency>
70-
<groupId>org.apache.logging.log4j</groupId>
71-
<artifactId>log4j-core</artifactId>
72-
<version>2.13.3</version>
73-
</dependency>
74-
75-
<dependency>
76-
<groupId>org.apache.logging.log4j</groupId>
77-
<artifactId>log4j-slf4j-impl</artifactId>
78-
<version>2.13.3</version>
64+
<groupId>ch.qos.logback</groupId>
65+
<artifactId>logback-classic</artifactId>
66+
<version>1.2.3</version>
7967
</dependency>
8068

8169
<dependency>
@@ -144,6 +132,7 @@
144132
<plugin>
145133
<groupId>org.apache.maven.plugins</groupId>
146134
<artifactId>maven-shade-plugin</artifactId>
135+
<version>3.2.4</version>
147136
<executions>
148137
<execution>
149138
<phase>package</phase>
@@ -156,6 +145,100 @@
156145
<finalName>${project.artifactId}-${project.version}</finalName>
157146
<minimizeJar>true</minimizeJar>
158147
<relocations>
148+
<relocation>
149+
<pattern>com.fasterxml.jackson</pattern>
150+
<shadedPattern>uk.co.angrybee.joe.shaded.com.fasterxml.jackson</shadedPattern>
151+
</relocation>
152+
153+
<relocation>
154+
<pattern>net.dv8tion.jda</pattern>
155+
<shadedPattern>uk.co.angrybee.joe.shaded.net.dv8tion.jda</shadedPattern>
156+
</relocation>
157+
158+
<relocation>
159+
<pattern>gnu.trove</pattern>
160+
<shadedPattern>uk.co.angrybee.joe.shaded.gnu.trove</shadedPattern>
161+
</relocation>
162+
163+
<relocation>
164+
<pattern>javax.annotation</pattern>
165+
<shadedPattern>uk.co.angrybee.joe.shaded.javax.annotation</shadedPattern>
166+
</relocation>
167+
168+
<relocation>
169+
<pattern>org.slf4j</pattern>
170+
<shadedPattern>uk.co.angrybee.joe.shaded.org.slf4j</shadedPattern>
171+
</relocation>
172+
173+
<relocation>
174+
<pattern>org.yaml.snakeyaml</pattern>
175+
<shadedPattern>uk.co.angrybee.joe.shaded.org.yaml.snakeyaml</shadedPattern>
176+
</relocation>
177+
178+
<relocation>
179+
<pattern>org.json.simple</pattern>
180+
<shadedPattern>uk.co.angrybee.joe.shaded.org.json.simple</shadedPattern>
181+
</relocation>
182+
183+
<relocation>
184+
<pattern>org.jetbrains.annotations</pattern>
185+
<shadedPattern>uk.co.angrybee.joe.shaded.org.jetbrains.annotations</shadedPattern>
186+
</relocation>
187+
188+
<relocation>
189+
<pattern>org.jdom2</pattern>
190+
<shadedPattern>uk.co.angrybee.joe.shaded.org.jdom2</shadedPattern>
191+
</relocation>
192+
193+
<relocation>
194+
<pattern>org.hamcrest</pattern>
195+
<shadedPattern>uk.co.angrybee.joe.shaded.org.hamcrest</shadedPattern>
196+
</relocation>
197+
198+
<relocation>
199+
<pattern>org.junit</pattern>
200+
<shadedPattern>uk.co.angrybee.joe.shaded.org.junit</shadedPattern>
201+
</relocation>
202+
203+
<relocation>
204+
<pattern>org.apache</pattern>
205+
<shadedPattern>uk.co.angrybee.joe.shaded.org.apache</shadedPattern>
206+
</relocation>
207+
208+
<relocation>
209+
<pattern>com.google.common</pattern>
210+
<shadedPattern>uk.co.angrybee.joe.shaded.com.google.common</shadedPattern>
211+
</relocation>
212+
213+
<relocation>
214+
<pattern>com.iwebpp.crypto</pattern>
215+
<shadedPattern>uk.co.angrybee.joe.shaded.com.iwebpp.crypto</shadedPattern>
216+
</relocation>
217+
218+
<relocation>
219+
<pattern>com.neovisionaries.ws.client</pattern>
220+
<shadedPattern>uk.co.angrybee.joe.shaded.com.neovisionaries.ws.client</shadedPattern>
221+
</relocation>
222+
223+
<relocation>
224+
<pattern>junit</pattern>
225+
<shadedPattern>uk.co.angrybee.joe.shaded.junit</shadedPattern>
226+
</relocation>
227+
228+
<relocation>
229+
<pattern>okhttp3</pattern>
230+
<shadedPattern>uk.co.angrybee.joe.shaded.okhttp3</shadedPattern>
231+
</relocation>
232+
233+
<relocation>
234+
<pattern>okio</pattern>
235+
<shadedPattern>uk.co.angrybee.joe.shaded.okio</shadedPattern>
236+
</relocation>
237+
238+
<relocation>
239+
<pattern>ch.qos.logback</pattern>
240+
<shadedPattern>uk.co.angrybee.joe.shaded.ch.qos.logback</shadedPattern>
241+
</relocation>
159242
</relocations>
160243
</configuration>
161244
</plugin>

src/main/java/uk/co/angrybee/joe/AuthorPermissions.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ public boolean isUserCanUseCommand()
3636

3737
public AuthorPermissions(MessageReceivedEvent event)
3838
{
39-
// TODO: merge these all together? why calling more times than needed
4039
for (Role role : event.getGuild().getMember(event.getAuthor()).getRoles())
4140
{
4241
if(!DiscordWhitelister.useIdForRoles)

src/main/java/uk/co/angrybee/joe/Configs/CustomMessagesConfig.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,12 @@ private static void CheckEntries()
124124

125125
CheckEntry("instructional-message-title", "How to Whitelist");
126126
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.");
127+
128+
CheckEntry("whitelist-clear-success-title", "Successfully Removed {Sender}'s Whitelisted Entries");
129+
CheckEntry("whitelist-clear-success-message", "{Sender} successfully removed the following users from the whitelist: \n{RemovedEntries}\nYou now have **{MaxWhitelistAmount} whitelist(s) remaining**.");
130+
131+
CheckEntry("whitelist-clear-failure-title", "No Entries to Remove");
132+
CheckEntry("whitelist-clear-failure-message", "{Sender}, you do not have any whitelisted entries to remove. ");
127133
}
128134
}
129135

src/main/java/uk/co/angrybee/joe/Configs/CustomPrefixConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ private static void CheckEntries()
6868

6969
CheckEntry("clear-name-prefix", "!clearname");
7070

71+
CheckEntry("limited-whitelist-clear-prefix", "!whitelist clear");
72+
7173
CheckEntry("clear-ban-prefix", "!clearban");
7274
}
7375
}

src/main/java/uk/co/angrybee/joe/Configs/MainConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ private static void CheckEntries()
9696
// EasyWhitelist support (https://www.spigotmc.org/resources/easywhitelist-name-based-whitelist.65222/)
9797
CheckEntry("use-easy-whitelist", false);
9898

99+
CheckEntry("allow-limited-whitelisters-to-unwhitelist-self", true);
100+
99101
// If adding the whitelisted role to the discord user is enabled
100102
CheckEntry("whitelisted-role-auto-add", false);
101103

src/main/java/uk/co/angrybee/joe/DiscordClient.java

Lines changed: 147 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public class DiscordClient extends ListenerAdapter
4444
public static String whitelistAddPrefix;
4545
public static String whitelistRemovePrefix;
4646
public static String clearNamePrefix;
47+
public static String limitedWhitelistClearPrefix;
4748
public static String clearBanPrefix;
4849

4950
private static MessageEmbed botInfo;
@@ -1474,13 +1475,156 @@ convert username into UUID to avoid depreciation and rate limits (according to h
14741475
}
14751476
}
14761477

1478+
// Clear whitelists for limited-whitelisters
1479+
if(messageContents.toLowerCase().startsWith("!whitelist clear") && !DiscordWhitelister.getUseCustomPrefixes()
1480+
|| DiscordWhitelister.getUseCustomPrefixes() && messageContents.toLowerCase().startsWith(limitedWhitelistClearPrefix))
1481+
{
1482+
if(!MainConfig.getMainConfig().getBoolean("allow-limited-whitelisters-to-unwhitelist-self"))
1483+
return;
1484+
1485+
// just inform staff, can add custom messages later if really needed
1486+
if(authorPermissions.isUserCanAddRemove() && !authorPermissions.isUserIsBanned() || authorPermissions.isUserCanAdd() && !authorPermissions.isUserIsBanned())
1487+
{
1488+
EmbedBuilder onlyForLimitedWhitelisters = new EmbedBuilder();
1489+
onlyForLimitedWhitelisters.addField("This Command is Only Available for Limited Whitelister Roles",
1490+
"If staff members need to clear a name from the whitelist please use `!clearname <mcName>`.", false);
1491+
onlyForLimitedWhitelisters.setColor(new Color(104, 109, 224));
1492+
channel.sendMessage(onlyForLimitedWhitelisters.build()).queue();
1493+
return;
1494+
}
1495+
1496+
if(authorPermissions.isUserHasLimitedAdd() && !authorPermissions.isUserIsBanned())
1497+
{
1498+
List<?> ls = UserList.getRegisteredUsers(author.getId());
1499+
1500+
// check for names whitelisted
1501+
if(ls != null)
1502+
{
1503+
for (Object minecraftNameToRemove : ls)
1504+
{
1505+
if (WhitelistedPlayers.usingEasyWhitelist)
1506+
{
1507+
ExecuteServerCommand("easywl remove " + minecraftNameToRemove.toString());
1508+
}
1509+
else
1510+
{
1511+
ExecuteServerCommand("whitelist remove " + minecraftNameToRemove.toString());
1512+
}
1513+
}
1514+
1515+
try
1516+
{
1517+
UserList.resetRegisteredUsers(author.getId());
1518+
}
1519+
catch (IOException e)
1520+
{
1521+
DiscordWhitelister.getPluginLogger().severe("Failed to remove" + author.getId() + "'s entries.");
1522+
e.printStackTrace();
1523+
return;
1524+
}
1525+
1526+
DiscordWhitelister.getPlugin().getLogger().info( author.getName() + "(" + author.getId() + ") triggered whitelist clear. " +
1527+
"Successfully removed their whitelisted entries from the user list.");
1528+
1529+
// Log in Discord channel
1530+
EmbedBuilder clearSuccess = new EmbedBuilder();
1531+
clearSuccess.setColor(new Color(46, 204, 113));
1532+
if(!DiscordWhitelister.useCustomMessages)
1533+
{
1534+
String message = author.getAsMention() + " successfully removed the following users from the whitelist: \n";
1535+
for (Object minercaftName : ls)
1536+
{
1537+
message += "- " + minercaftName.toString() + "\n";
1538+
}
1539+
message += "\n You now have **" + maxWhitelistAmount + " whitelist(s) remaining**.";
1540+
1541+
clearSuccess.addField("Successfully Removed " + author.getName() + "'s Whitelisted Entries",
1542+
message, false);
1543+
}
1544+
else
1545+
{
1546+
String customTitle = DiscordWhitelister.getCustomMessagesConfig().getString("whitelist-clear-success-title");
1547+
customTitle = customTitle.replaceAll("\\{Sender}", author.getName());
1548+
1549+
String removedNames = "";
1550+
for (Object minercaftName : ls)
1551+
{
1552+
removedNames += "- " + minercaftName.toString() + "\n";
1553+
}
1554+
1555+
String customMessage = DiscordWhitelister.getCustomMessagesConfig().getString("whitelist-clear-success-message");
1556+
customMessage = customMessage.replaceAll("\\{Sender}", author.getAsMention());
1557+
customMessage = customMessage.replaceAll("\\{RemovedEntries}", removedNames);
1558+
customMessage = customMessage.replaceAll("\\{MaxWhitelistAmount}", String.valueOf(maxWhitelistAmount));
1559+
1560+
clearSuccess.addField(customTitle, customMessage, false);
1561+
}
1562+
1563+
channel.sendMessage(clearSuccess.build()).queue();
1564+
1565+
if(MainConfig.getMainConfig().getBoolean("whitelisted-role-auto-remove"))
1566+
{
1567+
// Find all servers bot is in, remove whitelisted roles
1568+
for(int i = 0; i < javaDiscordAPI.getGuilds().size(); i++)
1569+
{
1570+
// Remove the whitelisted role(s)
1571+
RemoveRolesFromUser(javaDiscordAPI.getGuilds().get(i), author.getId(), Arrays.asList(whitelistedRoleNames));
1572+
}
1573+
}
1574+
}
1575+
else
1576+
{
1577+
DiscordWhitelister.getPlugin().getLogger().info( author.getName() + "(" + author.getId() + ") triggered whitelist clear. " +
1578+
"Could not remove any whitelisted entries as they do not have any.");
1579+
1580+
// Log in Discord channel
1581+
EmbedBuilder noEntries = new EmbedBuilder();
1582+
noEntries.setColor(new Color(231, 76, 60));
1583+
if(!DiscordWhitelister.useCustomMessages)
1584+
{
1585+
noEntries.addField("No Entries to Remove", (author.getAsMention() + ", you do not have any whitelisted entries to remove."), false);
1586+
}
1587+
else
1588+
{
1589+
String customTitle = DiscordWhitelister.getCustomMessagesConfig().getString("whitelist-clear-failure-title");
1590+
String customMessage = DiscordWhitelister.getCustomMessagesConfig().getString("whitelist-clear-failure-message");
1591+
customMessage = customMessage.replaceAll("\\{Sender}", author.getAsMention());
1592+
1593+
noEntries.addField(customTitle, customMessage, false);
1594+
}
1595+
1596+
channel.sendMessage(noEntries.build()).queue();
1597+
}
1598+
}
1599+
1600+
if(!authorPermissions.isUserCanAddRemove() && !authorPermissions.isUserCanAdd() && !authorPermissions.isUserHasLimitedAdd() || authorPermissions.isUserIsBanned())
1601+
{
1602+
EmbedBuilder insufficientPermission = new EmbedBuilder();
1603+
insufficientPermission.setColor(new Color(231, 76, 60));
1604+
1605+
if(!DiscordWhitelister.useCustomMessages)
1606+
{
1607+
insufficientPermission.addField("Insufficient Permissions", (author.getAsMention() + ", you do not have permission to use this command."), false);
1608+
}
1609+
else
1610+
{
1611+
String customTitle = DiscordWhitelister.getCustomMessagesConfig().getString("insufficient-permissions-title");
1612+
String customMessage = DiscordWhitelister.getCustomMessagesConfig().getString("insufficient-permissions");
1613+
customMessage = customMessage.replaceAll("\\{Sender}", author.getAsMention()); // Only checking for {Sender}
1614+
1615+
insufficientPermission.addField(customTitle, customMessage, false);
1616+
}
1617+
1618+
channel.sendMessage(insufficientPermission.build()).queue();
1619+
return;
1620+
}
1621+
}
1622+
14771623
if(messageContents.toLowerCase().startsWith("!clearban") && !DiscordWhitelister.getUseCustomPrefixes()
14781624
|| DiscordWhitelister.getUseCustomPrefixes() && messageContents.toLowerCase().startsWith(clearBanPrefix))
14791625
{
14801626
if(authorPermissions.isUserCanUseClear())
14811627
{
1482-
1483-
14841628
// Check if empty command
14851629
if(messageContents.toLowerCase().trim().equals("!clearban") && !DiscordWhitelister.getUseCustomPrefixes()
14861630
|| messageContents.toLowerCase().trim().equals(clearBanPrefix) && DiscordWhitelister.getUseCustomPrefixes())
@@ -1641,7 +1785,7 @@ public void onGuildMemberRemove(@Nonnull GuildMemberRemoveEvent event)
16411785
}
16421786
else
16431787
{
1644-
DiscordWhitelister.getPlugin().getLogger().warning(discordUserToRemove + " left. Could not removed their whitelisted entries as they did not whitelist through this plugin.");
1788+
DiscordWhitelister.getPlugin().getLogger().warning(discordUserToRemove + " left. Could not remove any whitelisted entries as they did not whitelist through this plugin.");
16451789
}
16461790
}
16471791

src/main/java/uk/co/angrybee/joe/DiscordWhitelister.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ public static int InitBot(boolean firstInit)
147147
DiscordClient.whitelistAddPrefix = CustomPrefixConfig.getCustomPrefixesConfig().getString("whitelist-add-prefix").toLowerCase();
148148
DiscordClient.whitelistRemovePrefix = CustomPrefixConfig.getCustomPrefixesConfig().getString("whitelist-remove-prefix").toLowerCase();
149149
DiscordClient.clearNamePrefix = CustomPrefixConfig.getCustomPrefixesConfig().getString("clear-name-prefix").toLowerCase();
150+
DiscordClient.limitedWhitelistClearPrefix = CustomPrefixConfig.getCustomPrefixesConfig().getString("limited-whitelist-clear-prefix").toLowerCase();
150151
DiscordClient.clearBanPrefix = CustomPrefixConfig.getCustomPrefixesConfig().getString("clear-ban-prefix").toLowerCase();
151152

152153
if(!botEnabled)

src/main/java/uk/co/angrybee/joe/Events/OnBanEvent.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package uk.co.angrybee.joe.Events;
22

3+
import org.bukkit.OfflinePlayer;
34
import org.bukkit.Server;
45
import org.bukkit.entity.Player;
56
import org.bukkit.event.EventHandler;
@@ -58,7 +59,24 @@ public void onCommandBan(PlayerCommandPreprocessEvent e) throws IOException
5859

5960
// Check if the player has ever joined the server or is on the whitelist
6061
Server server = DiscordWhitelister.getPlugin().getServer();
61-
if(!server.getOnlinePlayers().contains(banTarget) || !server.getOnlinePlayers().contains(banTarget))
62+
boolean nameInOfflinePlayers = false;
63+
64+
// Check offline players for banTarget
65+
OfflinePlayer[] offlinePlayers = server.getOfflinePlayers();
66+
for(int i = 0; i < server.getOfflinePlayers().length; i++)
67+
{
68+
if(offlinePlayers[i].getName().equals(banTarget))
69+
nameInOfflinePlayers = true;
70+
}
71+
72+
boolean nameInOnlinePlayers = false;
73+
for(Player onlinePlayer : server.getOnlinePlayers())
74+
{
75+
if(onlinePlayer.getName().equals(banTarget))
76+
nameInOnlinePlayers = true;
77+
}
78+
79+
if(!nameInOnlinePlayers && !nameInOfflinePlayers)
6280
{
6381
if(!WhitelistedPlayers.usingEasyWhitelist && !WhitelistedPlayers.CheckForPlayer(banTarget)
6482
|| WhitelistedPlayers.usingEasyWhitelist && !WhitelistedPlayers.CheckForPlayerEasyWhitelist(banTarget))

0 commit comments

Comments
 (0)