From 9435d8610673de0d45f8c3850f9677284f92d51d Mon Sep 17 00:00:00 2001 From: Joe Shimell <49585339+JoeShimell@users.noreply.github.com> Date: Tue, 27 Oct 2020 23:14:54 +0000 Subject: [PATCH] quick fix for start-up hang when the bot does not have the 'GUILD_MEMBERS' intent --- dependency-reduced-pom.xml | 124 ++++++++++++++++++ pom.xml | 53 ++++++-- .../java/uk/co/angrybee/joe/CheckIntents.java | 40 ++++++ .../uk/co/angrybee/joe/DiscordClient.java | 14 +- .../java/uk/co/angrybee/joe/VersionInfo.java | 2 +- plugin.yml => src/main/resources/plugin.yml | 2 +- 6 files changed, 220 insertions(+), 15 deletions(-) create mode 100644 dependency-reduced-pom.xml create mode 100644 src/main/java/uk/co/angrybee/joe/CheckIntents.java rename plugin.yml => src/main/resources/plugin.yml (92%) mode change 100755 => 100644 diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml new file mode 100644 index 0000000..d638c32 --- /dev/null +++ b/dependency-reduced-pom.xml @@ -0,0 +1,124 @@ + + + 4.0.0 + uk.co.angrybee.joe + discord-whitelister + discord-whitelister + 1.3.8 + https://github.com/JoeShimell/DiscordWhitelisterSpigot + + + + + maven-clean-plugin + 3.1.0 + + + maven-resources-plugin + 3.0.2 + + + maven-compiler-plugin + 3.8.0 + + + maven-surefire-plugin + 2.22.1 + + + maven-jar-plugin + 3.0.2 + + + maven-install-plugin + 2.5.2 + + + maven-deploy-plugin + 2.8.2 + + + maven-site-plugin + 3.7.1 + + + maven-project-info-reports-plugin + 3.0.0 + + + maven-shade-plugin + + + package + + shade + + + + + ${project.artifactId}-${project.version} + true + + + + + maven-antrun-plugin + 1.8 + + + install + + run + + + + + + + + + + + + + + maven-compiler-plugin + + 8 + 8 + + + + maven-shade-plugin + 3.2.4 + + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + false + + bintray-dv8fromtheworld-maven + bintray + https://dl.bintray.com/dv8fromtheworld/maven + + + + + org.spigotmc + spigot-api + 1.16.3-R0.1-SNAPSHOT + provided + + + + 1.8 + UTF-8 + 1.8 + + diff --git a/pom.xml b/pom.xml index baf7952..fbd0dab 100644 --- a/pom.xml +++ b/pom.xml @@ -6,15 +6,15 @@ uk.co.angrybee.joe discord-whitelister - 1.3.6 + 1.3.8 discord-whitelister https://github.com/JoeShimell/DiscordWhitelisterSpigot UTF-8 - 1.7 - 1.7 + 1.8 + 1.8 @@ -34,22 +34,16 @@ - - junit - junit - 4.11 - test - org.spigotmc spigot-api - 1.14.2-R0.1-SNAPSHOT + 1.16.3-R0.1-SNAPSHOT provided net.dv8tion JDA - 4.BETA.0_30 + 4.2.0_211 club.minnced @@ -77,6 +71,12 @@ log4j-slf4j-impl 2.12.1 + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + @@ -133,10 +133,33 @@ - uber-${project.artifactId}-${project.version} + ${project.artifactId}-${project.version} + true + + + + + org.apache.maven.plugins + maven-antrun-plugin + 1.8 + + + install + + run + + + + + + + + + + @@ -147,6 +170,12 @@ 8 + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + diff --git a/src/main/java/uk/co/angrybee/joe/CheckIntents.java b/src/main/java/uk/co/angrybee/joe/CheckIntents.java new file mode 100644 index 0000000..92c874a --- /dev/null +++ b/src/main/java/uk/co/angrybee/joe/CheckIntents.java @@ -0,0 +1,40 @@ +package uk.co.angrybee.joe; + +import net.dv8tion.jda.api.events.DisconnectEvent; +import net.dv8tion.jda.api.events.ShutdownEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import net.dv8tion.jda.api.requests.CloseCode; +import net.dv8tion.jda.api.requests.GatewayIntent; +import org.bukkit.Bukkit; + +import java.util.List; + +// Check for privileged intents on disconnect +public class CheckIntents extends ListenerAdapter +{ + @Override + public void onShutdown(ShutdownEvent shutdownEvent) + { + CheckIntents(shutdownEvent.getCloseCode()); + } + + @Override + public void onDisconnect(DisconnectEvent disconnectEvent) + { + CheckIntents(disconnectEvent.getCloseCode()); + } + + private void CheckIntents(CloseCode closeCode) + { + if(closeCode == null) + return; + + if(closeCode == CloseCode.DISALLOWED_INTENTS) + { + DiscordClient.ShutdownClient(); + + DiscordWhitelister.getPluginLogger().severe("[DiscordWhitelister] Cannot connect as this bot is not eligible to request the privileged intent 'GUILD_MEMBERS'"); + DiscordWhitelister.getPluginLogger().severe("[DiscordWhitelister] To correct this please go to your bot located at: https://discord.com/developers/applications and enable 'Server Members Intent'"); + } + } +} diff --git a/src/main/java/uk/co/angrybee/joe/DiscordClient.java b/src/main/java/uk/co/angrybee/joe/DiscordClient.java index 48b6a54..5c7f949 100644 --- a/src/main/java/uk/co/angrybee/joe/DiscordClient.java +++ b/src/main/java/uk/co/angrybee/joe/DiscordClient.java @@ -8,6 +8,8 @@ import net.dv8tion.jda.api.entities.*; import net.dv8tion.jda.api.events.guild.member.GuildMemberLeaveEvent; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; +import net.dv8tion.jda.api.requests.GatewayIntent; +import net.dv8tion.jda.internal.utils.PermissionUtil; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -62,9 +64,19 @@ public class DiscordClient extends ListenerAdapter try { - javaDiscordAPI = new JDABuilder(AccountType.BOT).setToken(clientToken).addEventListeners(new DiscordClient()).build(); + //javaDiscordAPI = new JDABuilder(AccountType.BOT).setToken(clientToken).addEventListeners(new DiscordClient()).build(); + + javaDiscordAPI = JDABuilder + .createDefault(clientToken) + .addEventListeners(new DiscordClient()) + .addEventListeners(new CheckIntents()) + .enableIntents(GatewayIntent.GUILD_MEMBERS) + .build(); + javaDiscordAPI.awaitReady(); + + return 0; } catch (LoginException | InterruptedException e) diff --git a/src/main/java/uk/co/angrybee/joe/VersionInfo.java b/src/main/java/uk/co/angrybee/joe/VersionInfo.java index 9e71fff..4fdc037 100644 --- a/src/main/java/uk/co/angrybee/joe/VersionInfo.java +++ b/src/main/java/uk/co/angrybee/joe/VersionInfo.java @@ -10,5 +10,5 @@ public class VersionInfo return "v." + getVersion(); } - private static String version = "1.3.7"; + private static String version = "1.3.8"; } diff --git a/plugin.yml b/src/main/resources/plugin.yml old mode 100755 new mode 100644 similarity index 92% rename from plugin.yml rename to src/main/resources/plugin.yml index 09f979b..422c6f3 --- a/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: DiscordWhitelister -version: 1.3.7 +version: 1.3.8 author: Joe Shimell main: uk.co.angrybee.joe.DiscordWhitelister description: Discord whitelister bot.