diff --git a/build.gradle b/build.gradle index 0cbe586..0755d8f 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ plugins { mainClassName = 'net.nevet5gi.buzzbot.Bot' group 'net.nevet5gi' -version '0.5.0' +version '0.5.1' sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 diff --git a/src/main/java/net/nevet5gi/buzzbot/Bot.java b/src/main/java/net/nevet5gi/buzzbot/BuzzBot.java similarity index 91% rename from src/main/java/net/nevet5gi/buzzbot/Bot.java rename to src/main/java/net/nevet5gi/buzzbot/BuzzBot.java index 43be8ed..d76d72a 100644 --- a/src/main/java/net/nevet5gi/buzzbot/Bot.java +++ b/src/main/java/net/nevet5gi/buzzbot/BuzzBot.java @@ -17,11 +17,11 @@ import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.EnumSet; -public class Bot { +public class BuzzBot { //TODO Make shutdown sequence public static JDA jda; - private static final Logger LOGGER = LoggerFactory.getLogger(Bot.class); - public static final ArrayList PLUGINS = new ArrayList<>(); + private static final Logger LOGGER = LoggerFactory.getLogger(BuzzBot.class); + public static final ArrayList PLUGIN_LISTENERS = new ArrayList<>(); private static ArrayList modules; public static void main(String[] args) { @@ -43,7 +43,7 @@ public class Bot { )) .enableCache(CacheFlag.VOICE_STATE); - for (ListenerAdapter listener : PLUGINS) { + for (ListenerAdapter listener : PLUGIN_LISTENERS) { builder.addEventListeners(listener); } @@ -77,5 +77,9 @@ public class Bot { jda.getPresence().setActivity(Activity.playing("with myself!")); } } + + public static void addListener(ListenerAdapter listener) { + PLUGIN_LISTENERS.add(listener); + } } diff --git a/src/main/java/net/nevet5gi/buzzbot/commands/BanCmd.java b/src/main/java/net/nevet5gi/buzzbot/commands/BanCmd.java index fbc48e2..6a1ec90 100644 --- a/src/main/java/net/nevet5gi/buzzbot/commands/BanCmd.java +++ b/src/main/java/net/nevet5gi/buzzbot/commands/BanCmd.java @@ -1,6 +1,6 @@ package net.nevet5gi.buzzbot.commands; -import net.nevet5gi.buzzbot.Bot; +import net.nevet5gi.buzzbot.BuzzBot; import net.nevet5gi.buzzbot.commands.utils.CommandContext; import net.nevet5gi.buzzbot.commands.utils.ICommand; import net.nevet5gi.buzzbot.database.SqlDB; @@ -69,7 +69,7 @@ public class BanCmd implements ICommand { ctx.getChannel().sendMessage("<@" + ctx.getMessage().getAuthor().getId() + "> banned <@" + ban.getUserId() + "> for " + ban.getBanLength() + " hours. Reason: " + ban.getReason()).queue(); } - Bot.jda.retrieveUserById(ban.getUserId()).queue(user -> { ban.setUserName(user.getName()); }); + BuzzBot.jda.retrieveUserById(ban.getUserId()).queue(user -> { ban.setUserName(user.getName()); }); ban.setModId(ctx.getMessage().getAuthor().getIdLong()); ban.setModName(ctx.getMessage().getAuthor().getName()); ban.setServerId(ctx.getGuild().getIdLong()); diff --git a/src/main/java/net/nevet5gi/buzzbot/commands/PingCmd.java b/src/main/java/net/nevet5gi/buzzbot/commands/PingCmd.java index 0e3c871..623ff87 100644 --- a/src/main/java/net/nevet5gi/buzzbot/commands/PingCmd.java +++ b/src/main/java/net/nevet5gi/buzzbot/commands/PingCmd.java @@ -2,7 +2,7 @@ package net.nevet5gi.buzzbot.commands; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.interactions.commands.build.CommandData; -import net.nevet5gi.buzzbot.Bot; +import net.nevet5gi.buzzbot.BuzzBot; import net.nevet5gi.buzzbot.Config; import net.nevet5gi.buzzbot.commands.utils.CommandContext; import net.nevet5gi.buzzbot.commands.utils.ICommand; @@ -28,7 +28,7 @@ public class PingCmd implements ICommand, ISlashCommand { @Override public void handleSlash(CommandContext ctx) { - JDA jda = Bot.jda; + JDA jda = BuzzBot.jda; jda.getRestPing().queue(ping -> ctx.getHook().sendMessageFormat("Rest API Ping: %sms\nWebSocket Ping: %sms", ping, jda.getGatewayPing()).queue()); } diff --git a/src/main/java/net/nevet5gi/buzzbot/commands/WarnCmd.java b/src/main/java/net/nevet5gi/buzzbot/commands/WarnCmd.java index 1362817..4a7bb48 100644 --- a/src/main/java/net/nevet5gi/buzzbot/commands/WarnCmd.java +++ b/src/main/java/net/nevet5gi/buzzbot/commands/WarnCmd.java @@ -1,6 +1,6 @@ package net.nevet5gi.buzzbot.commands; -import net.nevet5gi.buzzbot.Bot; +import net.nevet5gi.buzzbot.BuzzBot; import net.nevet5gi.buzzbot.commands.utils.CommandContext; import net.nevet5gi.buzzbot.commands.utils.ICommand; import net.nevet5gi.buzzbot.database.SqlDB; @@ -37,7 +37,7 @@ public class WarnCmd implements ICommand { ctx.getChannel().sendMessage("<@" + ctx.getMessage().getAuthor().getId() + "> warned <@" + warn.getUserId() + "> for reason: " + warn.getReason()).queue(); - Bot.jda.retrieveUserById(warn.getUserId()).queue(user -> { warn.setUserName(user.getName()); }); + BuzzBot.jda.retrieveUserById(warn.getUserId()).queue(user -> { warn.setUserName(user.getName()); }); warn.setModId(ctx.getMessage().getAuthor().getIdLong()); warn.setModName(ctx.getMessage().getAuthor().getName()); warn.setServerId(ctx.getGuild().getIdLong()); diff --git a/src/main/java/net/nevet5gi/buzzbot/commands/utils/CommandManager.java b/src/main/java/net/nevet5gi/buzzbot/commands/utils/CommandManager.java index 56a1466..223197e 100644 --- a/src/main/java/net/nevet5gi/buzzbot/commands/utils/CommandManager.java +++ b/src/main/java/net/nevet5gi/buzzbot/commands/utils/CommandManager.java @@ -1,12 +1,11 @@ package net.nevet5gi.buzzbot.commands.utils; -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.events.interaction.SlashCommandEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.interactions.commands.build.CommandData; -import net.nevet5gi.buzzbot.Bot; +import net.nevet5gi.buzzbot.BuzzBot; import net.nevet5gi.buzzbot.Config; import net.nevet5gi.buzzbot.commands.*; import net.nevet5gi.buzzbot.database.SqlDB; @@ -62,7 +61,7 @@ public class CommandManager { for (ISlashCommand slashCmd : slashList) { cmdDataList.add(slashCmd.getCommandData()); } - Bot.jda.updateCommands().addCommands(cmdDataList).queue(); + BuzzBot.jda.updateCommands().addCommands(cmdDataList).queue(); } } diff --git a/src/main/java/net/nevet5gi/buzzbot/modules/ModuleLoader.java b/src/main/java/net/nevet5gi/buzzbot/modules/ModuleLoader.java index c5cd0a7..4fd4f0b 100644 --- a/src/main/java/net/nevet5gi/buzzbot/modules/ModuleLoader.java +++ b/src/main/java/net/nevet5gi/buzzbot/modules/ModuleLoader.java @@ -29,10 +29,6 @@ public class ModuleLoader { Files.walk(Paths.get("./modules/")) .filter(Files::isRegularFile) .forEach(modules::add); - - for (Path path : modules) { - System.out.println("Module path: " + path.toString()); - } } catch (IOException e) { System.out.println("Unable to get module list"); e.printStackTrace(); @@ -49,22 +45,30 @@ public class ModuleLoader { JarInputStream jarStream = new JarInputStream(new FileInputStream(String.valueOf(module))); Manifest mf = jarStream.getManifest(); Attributes attributes = mf.getMainAttributes(); - String mainClassString = attributes.getValue("Main-Class"); - if (mainClassString == null) { + String className = attributes.getValue("Main-Class"); + if (className == null) { LOGGER.error("Unable to get Main Class from module " + module.toString()); } - String[] packages = mainClassString.split("\\."); - String className = packages[packages.length - 1]; File file = module.toFile(); URL[] urls = {file.toURI().toURL()}; URLClassLoader urlClassLoader = URLClassLoader.newInstance(urls); - Class mainClass = (Class) Class.forName(className, true, urlClassLoader); - BuzzyModule newModule = mainClass.getDeclaredConstructor().newInstance(); + if (urlClassLoader == null) { + System.out.println("Classloader is null"); + } + + Class mainClass = Class.forName(className, true, urlClassLoader); + BuzzyModule newModule = (BuzzyModule) mainClass.getDeclaredConstructor().newInstance(); newModule.onPreEnable(); modules.add(newModule); + if (jarStream != null ) { + jarStream.close(); + } + if (urlClassLoader != null) { + urlClassLoader.close(); + } } return modules; }