From 22b43a93a5e57a32cddffabe470fc38de0b31978 Mon Sep 17 00:00:00 2001 From: thmsdy Date: Fri, 29 Apr 2022 21:01:11 -0500 Subject: [PATCH] Make whitelist changes --- dependency-reduced-pom.xml | 20 ++- pom.xml | 150 +++++++++--------- src/main/java/com/fpghoti/bcraftbot/Main.java | 26 ++- .../fpghoti/bcraftbot/bot/BotListener.java | 10 +- .../com/fpghoti/bcraftbot/bot/Command.java | 2 +- .../com/fpghoti/bcraftbot/bot/ServerBot.java | 26 ++- .../bcraftbot/bot/command/AddMeCommand.java | 3 +- .../bcraftbot/bot/util/CommandParser.java | 2 +- .../fpghoti/bcraftbot/command/AddExempt.java | 2 +- .../bcraftbot/command/BCWhitelist.java | 75 +++++++++ .../bcraftbot/listener/PlayerListener.java | 25 +-- src/main/resources/plugin.yml | 7 +- 12 files changed, 238 insertions(+), 110 deletions(-) create mode 100644 src/main/java/com/fpghoti/bcraftbot/command/BCWhitelist.java diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index 6b7f5d1..9b9d8c6 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.fpghoti BCraftBot - 1.1 + 1.2 @@ -43,22 +43,22 @@ jcenter-bintray http://jcenter.bintray.com + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + - org.bukkit - bukkit - 1.13.2-R0.1-SNAPSHOT + org.spigotmc + spigot-api + 1.18.2-R0.1-SNAPSHOT provided commons-lang commons-lang - - json-simple - com.googlecode.json-simple - guava com.google.guava @@ -67,6 +67,10 @@ gson com.google.code.gson + + bungeecord-chat + net.md-5 + snakeyaml org.yaml diff --git a/pom.xml b/pom.xml index 4a48daf..37b1769 100644 --- a/pom.xml +++ b/pom.xml @@ -1,74 +1,80 @@ - - 4.0.0 - com.fpghoti - BCraftBot - 1.1 - - - jcenter - jcenter-bintray - http://jcenter.bintray.com - - - - - - src/main/resources - true - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - 1.8 - 1.8 - - - - org.apache.maven.plugins - maven-shade-plugin - 3.1.0 - - - package - - shade - - - true - - - - - - - - - net.dv8tion - JDA - 3.5.0_327 - - - org.bukkit - bukkit - 1.13.2-R0.1-SNAPSHOT - provided - - - org.apache.commons - commons-collections4 - 4.1 - pom - - - org.apache.commons - commons-lang3 - 3.6 - pom - - + + 4.0.0 + com.fpghoti + BCraftBot + 1.2 + + + jcenter + jcenter-bintray + http://jcenter.bintray.com + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + + + src/main/resources + true + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + package + + shade + + + true + + + + + + + + + net.dv8tion + JDA + 5.0.0-alpha.9 + + + org.spigotmc + spigot-api + 1.18.2-R0.1-SNAPSHOT + provided + + + org.apache.commons + commons-collections4 + 4.1 + pom + + + org.apache.commons + commons-lang3 + 3.6 + pom + + \ No newline at end of file diff --git a/src/main/java/com/fpghoti/bcraftbot/Main.java b/src/main/java/com/fpghoti/bcraftbot/Main.java index 27a357e..66af251 100644 --- a/src/main/java/com/fpghoti/bcraftbot/Main.java +++ b/src/main/java/com/fpghoti/bcraftbot/Main.java @@ -13,11 +13,12 @@ import org.bukkit.scheduler.BukkitRunnable; import com.fpghoti.bcraftbot.bot.ServerBot; import com.fpghoti.bcraftbot.command.AddExempt; +import com.fpghoti.bcraftbot.command.BCWhitelist; import com.fpghoti.bcraftbot.listener.PlayerListener; import com.fpghoti.bcraftbot.sql.MySQLConnection; -import net.dv8tion.jda.core.entities.Guild; -import net.dv8tion.jda.core.entities.User; +import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.User; public class Main extends JavaPlugin { @@ -65,6 +66,7 @@ public class Main extends JavaPlugin { bot = new ServerBot(this); bot.runBot(); getCommand("AddExempt").setExecutor(new AddExempt(this)); + getCommand("BCWhitelist").setExecutor(new BCWhitelist(this)); } public void onDisable() { @@ -183,6 +185,10 @@ public class Main extends JavaPlugin { config.createSection("MainRecordKeeper"); config.set("MainRecordKeeper", true); } + if (config.get("Whitelist") == null){ + config.createSection("Whitelist"); + config.set("Whitelist", true); + } this.saveConfig(); } @@ -229,6 +235,22 @@ public class Main extends JavaPlugin { } setExemptList(updated); } + + public void setBCWhitelist(Boolean b) { + if (config.get("Whitelist") != null){ + config.set("Whitelist", b); + this.saveConfig(); + }else { + log.severe("BCraftBot failed to update the whitelist in the config!"); + } + } + + public boolean getBCWhitelist() { + if (config.get("Whitelist") != null){ + return config.getBoolean("Whitelist"); + } + return false; + } public ServerBot getBot() { return bot; diff --git a/src/main/java/com/fpghoti/bcraftbot/bot/BotListener.java b/src/main/java/com/fpghoti/bcraftbot/bot/BotListener.java index 5a99409..af26ca6 100644 --- a/src/main/java/com/fpghoti/bcraftbot/bot/BotListener.java +++ b/src/main/java/com/fpghoti/bcraftbot/bot/BotListener.java @@ -2,12 +2,10 @@ package com.fpghoti.bcraftbot.bot; import java.util.logging.Level; -import com.fpghoti.bcraftbot.bot.ServerBot; - -import net.dv8tion.jda.core.entities.ChannelType; -import net.dv8tion.jda.core.events.ReadyEvent; -import net.dv8tion.jda.core.events.message.MessageReceivedEvent; -import net.dv8tion.jda.core.hooks.ListenerAdapter; +import net.dv8tion.jda.api.entities.ChannelType; +import net.dv8tion.jda.api.events.ReadyEvent; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; public class BotListener extends ListenerAdapter{ diff --git a/src/main/java/com/fpghoti/bcraftbot/bot/Command.java b/src/main/java/com/fpghoti/bcraftbot/bot/Command.java index ec32422..6af14db 100644 --- a/src/main/java/com/fpghoti/bcraftbot/bot/Command.java +++ b/src/main/java/com/fpghoti/bcraftbot/bot/Command.java @@ -1,6 +1,6 @@ package com.fpghoti.bcraftbot.bot; -import net.dv8tion.jda.core.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; public interface Command { diff --git a/src/main/java/com/fpghoti/bcraftbot/bot/ServerBot.java b/src/main/java/com/fpghoti/bcraftbot/bot/ServerBot.java index f42b2f1..28da199 100644 --- a/src/main/java/com/fpghoti/bcraftbot/bot/ServerBot.java +++ b/src/main/java/com/fpghoti/bcraftbot/bot/ServerBot.java @@ -4,21 +4,23 @@ import java.util.HashMap; import java.util.logging.Level; import com.fpghoti.bcraftbot.Main; -import com.fpghoti.bcraftbot.bot.BotListener; -import com.fpghoti.bcraftbot.bot.Command; import com.fpghoti.bcraftbot.bot.command.AddMeCommand; import com.fpghoti.bcraftbot.bot.util.CommandParser; import com.fpghoti.bcraftbot.sql.MySQLConnection; -import net.dv8tion.jda.core.AccountType; -import net.dv8tion.jda.core.JDA; -import net.dv8tion.jda.core.JDABuilder; +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.requests.GatewayIntent; +import net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder; +import net.dv8tion.jda.api.sharding.ShardManager; +import net.dv8tion.jda.api.utils.ChunkingFilter; +import net.dv8tion.jda.api.utils.MemberCachePolicy; public class ServerBot { private Main plugin; private JDA jda; + private static ShardManager shardm; private CommandParser parser; @@ -34,7 +36,19 @@ public class ServerBot { String token = plugin.getBotToken(); plugin.log(Level.INFO, "Connecting bot to Discord..."); try{ - jda = new JDABuilder(AccountType.BOT).setToken(token).buildBlocking(); + shardm = DefaultShardManagerBuilder.createDefault(token) + .setChunkingFilter(ChunkingFilter.ALL) + .setMemberCachePolicy(MemberCachePolicy.ALL) + .enableIntents(GatewayIntent.getIntents(GatewayIntent.DEFAULT)) + .enableIntents(GatewayIntent.GUILD_MEMBERS) + .enableIntents(GatewayIntent.GUILD_MESSAGES) + .build(); + jda = shardm.getShardById(0); + try { + jda.awaitReady(); + } catch (InterruptedException e) { + e.printStackTrace(); + } jda.addEventListener(new BotListener(this)); jda.setAutoReconnect(true); String link = "https://discordapp.com/oauth2/authorize?&client_id=" + jda.getSelfUser().getId(); diff --git a/src/main/java/com/fpghoti/bcraftbot/bot/command/AddMeCommand.java b/src/main/java/com/fpghoti/bcraftbot/bot/command/AddMeCommand.java index ccd31f5..f1a8f8b 100644 --- a/src/main/java/com/fpghoti/bcraftbot/bot/command/AddMeCommand.java +++ b/src/main/java/com/fpghoti/bcraftbot/bot/command/AddMeCommand.java @@ -5,7 +5,7 @@ import java.util.logging.Level; import com.fpghoti.bcraftbot.bot.Command; import com.fpghoti.bcraftbot.bot.ServerBot; -import net.dv8tion.jda.core.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; public class AddMeCommand implements Command{ @@ -19,7 +19,6 @@ public class AddMeCommand implements Command{ @Override public boolean called(String[] args, MessageReceivedEvent event) { - return true; } diff --git a/src/main/java/com/fpghoti/bcraftbot/bot/util/CommandParser.java b/src/main/java/com/fpghoti/bcraftbot/bot/util/CommandParser.java index a3e7266..92cfc28 100644 --- a/src/main/java/com/fpghoti/bcraftbot/bot/util/CommandParser.java +++ b/src/main/java/com/fpghoti/bcraftbot/bot/util/CommandParser.java @@ -2,7 +2,7 @@ package com.fpghoti.bcraftbot.bot.util; import java.util.ArrayList; -import net.dv8tion.jda.core.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; public class CommandParser { public CommandContainer parse(String rw, MessageReceivedEvent e){ diff --git a/src/main/java/com/fpghoti/bcraftbot/command/AddExempt.java b/src/main/java/com/fpghoti/bcraftbot/command/AddExempt.java index 8e84609..7dabaec 100644 --- a/src/main/java/com/fpghoti/bcraftbot/command/AddExempt.java +++ b/src/main/java/com/fpghoti/bcraftbot/command/AddExempt.java @@ -32,7 +32,7 @@ public class AddExempt implements CommandExecutor{ } }else { if(args.length != 1) { - plugin.log(Level.INFO, "Usage: addexempt "); + plugin.log(Level.INFO, "Usage: /addexempt "); plugin.log(Level.INFO, "There was an issue with your syntax."); return true; } diff --git a/src/main/java/com/fpghoti/bcraftbot/command/BCWhitelist.java b/src/main/java/com/fpghoti/bcraftbot/command/BCWhitelist.java new file mode 100644 index 0000000..a6f48a9 --- /dev/null +++ b/src/main/java/com/fpghoti/bcraftbot/command/BCWhitelist.java @@ -0,0 +1,75 @@ +package com.fpghoti.bcraftbot.command; + +import java.util.logging.Level; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.fpghoti.bcraftbot.Main; + +public class BCWhitelist implements CommandExecutor{ + + private Main plugin; + + public BCWhitelist(Main plugin) { + this.plugin = plugin; + } + + public boolean onCommand(CommandSender sender, Command command, String label, String[] args){ + if(label.equalsIgnoreCase("bcwhitelist")){ + if(sender instanceof Player) { + if(!((Player)sender).hasPermission("bcraftbot.whitelist")) { + ((Player)sender).sendMessage(ChatColor.RED + "[BCraftBot] You do not have permission to do this!"); + return true; + } + if(args.length != 1) { + ((Player)sender).sendMessage(ChatColor.GOLD + "[BCraftBot] Usage: /bcwhitelist "); + ((Player)sender).sendMessage(ChatColor.RED + "[BCraftBot] There was an issue with your syntax."); + return true; + } + }else { + if(args.length != 1) { + plugin.log(Level.INFO, "Usage: /bcwhitelist "); + plugin.log(Level.INFO, "There was an issue with your syntax."); + return true; + } + } + + String arg = args[0].toLowerCase(); + int status = 0; + + if(arg.equals("on") || arg.equals("true") || arg.equals("enable")) { + status = 1; + plugin.setBCWhitelist(true); + }else if(arg.equals("off") || arg.equals("false") || arg.equals("disable")) { + status = 2; + plugin.setBCWhitelist(false); + } + + if(sender instanceof Player) { + if(status == 1) { + ((Player)sender).sendMessage(ChatColor.GREEN + "[BCraftBot] Whitelist enabled."); + }else if(status == 2) { + ((Player)sender).sendMessage(ChatColor.GREEN + "[BCraftBot] Whitelist disabled."); + }else { + ((Player)sender).sendMessage(ChatColor.GOLD + "[BCraftBot] Usage: /bcwhitelist "); + ((Player)sender).sendMessage(ChatColor.RED + "[BCraftBot] There was an issue with your syntax."); + } + }else { + if(status == 1) { + plugin.log(Level.INFO, "[BCraftBot] Whitelist enabled."); + }else if(status == 2) { + plugin.log(Level.INFO, "[BCraftBot] Whitelist disabled."); + }else { + plugin.log(Level.INFO, "[BCraftBot] Usage: /bcwhitelist "); + plugin.log(Level.INFO, "[BCraftBot] There was an issue with your syntax."); + } + } + } + return true; + } + +} \ No newline at end of file diff --git a/src/main/java/com/fpghoti/bcraftbot/listener/PlayerListener.java b/src/main/java/com/fpghoti/bcraftbot/listener/PlayerListener.java index 645ace8..e0d9045 100644 --- a/src/main/java/com/fpghoti/bcraftbot/listener/PlayerListener.java +++ b/src/main/java/com/fpghoti/bcraftbot/listener/PlayerListener.java @@ -8,10 +8,10 @@ import org.bukkit.event.player.PlayerLoginEvent.Result; import com.fpghoti.bcraftbot.Main; -import net.dv8tion.jda.core.entities.Guild; -import net.dv8tion.jda.core.entities.Member; -import net.dv8tion.jda.core.entities.Role; -import net.dv8tion.jda.core.entities.User; +import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.Role; +import net.dv8tion.jda.api.entities.User; public class PlayerListener implements Listener { @@ -28,19 +28,20 @@ public class PlayerListener implements Listener { if(player.hasPermission("bcraftbot.bypasscheck")) { return; } - + if(!plugin.isMember(player) && !plugin.isExempt(player.getName())) { - event.disallow(Result.KICK_OTHER, plugin.getKickMessage()); + if(!player.isWhitelisted() && plugin.getBCWhitelist()) { + event.disallow(Result.KICK_OTHER, plugin.getKickMessage()); + } return; } if(plugin.checkRole() && !plugin.isExempt(player.getName())) { boolean allow = false; - + for(Guild guild : plugin.getBot().getJDA().getGuilds()) { for(String rolename : plugin.getRequiredRole().split(",")) { - Role role = null; for(Role r : guild.getRoles()) { if(r.getName().equalsIgnoreCase(rolename)) { @@ -51,6 +52,12 @@ public class PlayerListener implements Listener { User user = plugin.getDiscordUser(player); Member mem = guild.getMember(user); + if(!plugin.getBCWhitelist()) { + allow = true; + } + if(player.isWhitelisted()) { + allow = true; + } if(user != null && user.getMutualGuilds().contains(guild) && role != null) { if(mem.getRoles().contains(role)) { allow = true; @@ -80,7 +87,7 @@ public class PlayerListener implements Listener { Member mem = guild.getMember(user); if(user != null && user.getMutualGuilds().contains(guild) && role != null) { - guild.getController().addRolesToMember(mem, role).queue(); + guild.addRoleToMember(mem.getUser().getId(), role).queue(); } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index eccaa81..4d22604 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ main: com.fpghoti.bcraftbot.Main -version: 1.1 +version: 1.2 api-version: 1.13 name: BCraftBot descripion: Discord-based whitelisting system for Minecraft @@ -7,4 +7,7 @@ author: Ghoti_Mayo commands: AddExempt: description: Add a player to the exempt list. Exempted users are permanently allowed to join, as long as they remain in the exempted list. - usage: /addexempt \ No newline at end of file + usage: /addexempt + BCWhitelist: + description: Toggles plugin whitelist. + usage: /bcwhitelist \ No newline at end of file