diff --git a/.idea/misc.xml b/.idea/misc.xml index 7122aeb..2dbd315 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,5 +4,5 @@ - + \ No newline at end of file diff --git a/src/main/java/Controll/Controller.java b/src/main/java/Controll/Controller.java index 0324de1..3202212 100644 --- a/src/main/java/Controll/Controller.java +++ b/src/main/java/Controll/Controller.java @@ -4,6 +4,7 @@ import IO.JSON; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.events.GenericEvent; import net.dv8tion.jda.api.events.ReadyEvent; +import net.dv8tion.jda.api.events.ShutdownEvent; import net.dv8tion.jda.api.events.guild.GenericGuildEvent; import net.dv8tion.jda.api.events.guild.GuildJoinEvent; import net.dv8tion.jda.api.events.guild.GuildLeaveEvent; @@ -133,6 +134,7 @@ public class Controller extends ListenerAdapter { reload(event.getJDA()); } + @Override public void onGuildJoin(@NotNull GuildJoinEvent event){ //Check if guild exists for (GuildController guildController : guilds){ @@ -156,6 +158,7 @@ public class Controller extends ListenerAdapter { } + @Override public void onGuildLeave(@NotNull GuildLeaveEvent event){ JSONArray guilds = JSON.loadJson(GUILD_CONFIG_FILE); @@ -170,4 +173,12 @@ public class Controller extends ListenerAdapter { } JSON.saveJson(guilds, GUILD_CONFIG_FILE); } + + @Override + public void onShutdown(@NotNull ShutdownEvent shutdownEvent){ + for (GuildController guildController: guilds){ + guildController.shutdown(); + } + logger.debug("Shutdown complete"); + } } diff --git a/src/main/java/Controll/GuildController.java b/src/main/java/Controll/GuildController.java index 93445d3..5a47e29 100644 --- a/src/main/java/Controll/GuildController.java +++ b/src/main/java/Controll/GuildController.java @@ -141,6 +141,14 @@ public class GuildController { modules.add(new Help(this)); } + protected void shutdown(){ + for (Module module: modules){ + if (module instanceof SuperModule) + ((SuperModule) module).shutdown(); + } + logger.debug("Shutdown Modules for Guild: " + getGUILD_ID()); + } + private boolean checkForActivate(String moduleName){ if (moduleConf.containsKey(moduleName)){ logger.info("activate " + moduleName + " in " +getGUILD_ID()); diff --git a/src/main/java/Controll/SuperModule.java b/src/main/java/Controll/SuperModule.java index 88135e8..03c3c89 100644 --- a/src/main/java/Controll/SuperModule.java +++ b/src/main/java/Controll/SuperModule.java @@ -5,6 +5,9 @@ import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Message; import org.json.simple.JSONObject; +import java.util.HashMap; +import java.util.Map; +import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -13,6 +16,10 @@ public abstract class SuperModule implements Module { private GuildController guildController; private JSONObject config; private final String command; + /** + * May temporary data but save worthy (active timer etc) + */ + private Map temporaryData; /** * Construcker of a Module @@ -23,12 +30,24 @@ public abstract class SuperModule implements Module { this.command = command; this.guildController = guildController; this.config = config; + + temporaryData = (Map)config.get("TemporaryData"); + if (temporaryData != null) { + this.config.remove("TemporaryData"); + safeConfig(); + } else { + temporaryData = new HashMap<>(); + } + + } public SuperModule(String command, GuildController guildController){ this.command = command; this.guildController = guildController; this.config = null; + + temporaryData = new HashMap<>(); } /** @@ -118,4 +137,16 @@ public abstract class SuperModule implements Module { protected void safeConfig(){ safeConfig(getConfig()); } + + /** + * On shutdown safe temporary data what should be saved + */ + protected void shutdown(){ + getConfig().put("TemporaryData", temporaryData); + safeConfig(); + } + + protected Map getTemporaryData(){ + return temporaryData; + } }