diff --git a/.classpath b/.classpath
index 3a153ed..a413789 100644
--- a/.classpath
+++ b/.classpath
@@ -6,8 +6,13 @@
-
-
+
+
+
+
+
+
+
diff --git a/compile-external-sources.sh b/compile-external-sources.sh
new file mode 100755
index 0000000..e747510
--- /dev/null
+++ b/compile-external-sources.sh
@@ -0,0 +1 @@
+javac $(find ./* | grep .java); echo Done!
\ No newline at end of file
diff --git a/external-src/testing/Testing.class b/external-src/testing/Testing.class
new file mode 100644
index 0000000..6249a7e
Binary files /dev/null and b/external-src/testing/Testing.class differ
diff --git a/external-src/testing/Testing.java b/external-src/testing/Testing.java
new file mode 100644
index 0000000..ec580f5
--- /dev/null
+++ b/external-src/testing/Testing.java
@@ -0,0 +1,7 @@
+package testing;
+
+public class Testing {
+
+ public static String string = "deawuidhaw";
+
+}
diff --git a/src/pkg/deepCurse/nopalmo/command/testing/LiveUpdateTestCommand.java b/src/pkg/deepCurse/nopalmo/command/testing/LiveUpdateTestCommand.java
new file mode 100644
index 0000000..73d75bc
--- /dev/null
+++ b/src/pkg/deepCurse/nopalmo/command/testing/LiveUpdateTestCommand.java
@@ -0,0 +1,52 @@
+package pkg.deepCurse.nopalmo.command.testing;
+
+import java.io.File;
+import java.util.HashMap;
+
+import org.jetbrains.annotations.Nullable;
+
+import pkg.deepCurse.nopalmo.command.CommandInterface.DualCommandInterface;
+import pkg.deepCurse.nopalmo.manager.Argument;
+import pkg.deepCurse.nopalmo.manager.ClassManager;
+import pkg.deepCurse.nopalmo.manager.ClassManager.InternalReloadable;
+import pkg.deepCurse.nopalmo.manager.CommandBlob;
+import qj.util.ReflectUtil;
+
+public class LiveUpdateTestCommand implements InternalReloadable, DualCommandInterface {
+
+ @Override
+ public String[] getCommandCalls() {
+ return new String[] {"test-update"};
+ }
+
+ @Override
+ public HelpPage getHelpPage() {
+ return HelpPage.TESTING;
+ }
+
+ @Override
+ public String getHelp() {
+ return "Used to test the live updater";
+ }
+
+ @Override
+ public void runDualCommand(CommandBlob blob, HashMap argumentMap) throws Exception {
+ File file = new File(System.getProperty("user.dir") + "/external-src/");
+ ClassManager> manager = new ClassManager>();
+
+ manager.addFile("testing", "testing.Testing", file);
+
+ String string = (String) ReflectUtil.getField("string", manager.getClass("testing")).get(null);
+
+ blob.getChannel().sendMessage(string).queue();
+
+ }
+
+ @Override
+ public @Nullable HashMap getArguments() {
+ return null;
+ }
+
+
+
+}
diff --git a/src/pkg/deepCurse/nopalmo/core/Boot.java b/src/pkg/deepCurse/nopalmo/core/Boot.java
index 438a585..3fd493e 100644
--- a/src/pkg/deepCurse/nopalmo/core/Boot.java
+++ b/src/pkg/deepCurse/nopalmo/core/Boot.java
@@ -77,7 +77,7 @@ public class Boot {
isProd = args[2].contentEquals("prod");
try {
- logger.info("Connecting to mariadb:nopalmo");
+ logger.info("Connecting to mariadb:nopalmo"+args[1]);
NopalmoDBTools.init(isProd ? "nopalmo" : "chaos", "nopalmo", args[1]);
} catch (Exception e) {
e.printStackTrace();
diff --git a/src/pkg/deepCurse/nopalmo/manager/ClassManager.java b/src/pkg/deepCurse/nopalmo/manager/ClassManager.java
new file mode 100644
index 0000000..e89c5c7
--- /dev/null
+++ b/src/pkg/deepCurse/nopalmo/manager/ClassManager.java
@@ -0,0 +1,78 @@
+package pkg.deepCurse.nopalmo.manager;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URLClassLoader;
+import java.util.HashMap;
+
+import qj.util.lang.DynamicClassLoader;
+
+/**
+ *
+ * @author u1d
+ *
+ * @param access key, typically the name of the class for simplicity
+ * @param class type, supply InternalReloadable if you are unsure of what
+ * to use
+ */
+public class ClassManager {
+
+ private HashMap> classMap;
+ private ClassLoader classLoader;
+ private URLClassLoader urlClassLoader;
+
+ public ClassManager() {
+ classLoader = getClass().getClassLoader();
+ classMap = new HashMap>();
+ }
+
+ public void add(K key, String path) throws ClassNotFoundException {
+ Class loadedMyClass = (Class) classLoader.loadClass(path);
+ classMap.put(key, loadedMyClass);
+ }
+
+ public void addFile(K key, String name, File file) throws ClassNotFoundException, IOException {
+ classMap.put(key, (Class) new DynamicClassLoader(file.getPath()).load(name));
+// Class loadedMyClass = (Class) Class.forName(name, true, urlClassLoader.newInstance(new URL[] {file.toURI().toURL()}));
+// classMap.put(key, loadedMyClass);
+ }
+
+ public void remove(String path) {
+
+ }
+
+ public void removeFile(File file) {
+
+ }
+
+ /**
+ * This reloadable is for internal use, if you wish to add to its functionality,
+ * simply create a new interface that implements this one (InternalReloadable)
+ *
+ * @author u1d
+ */
+ public interface InternalReloadable {
+ /**
+ * a data bus for use with dumping data that need to persist across reloads
+ *
+ * @return
+ */
+ default public HashMap dump() {
+ return null;
+ }
+
+ /**
+ * a data bus for use with loading data that need to persist across reloads
+ *
+ * @param bulk
+ */
+ default public void load(HashMap dBus) {
+ }
+
+ }
+
+ public Class getClass(K key) {
+ return classMap.get(key);
+ }
+
+}
diff --git a/src/pkg/deepCurse/nopalmo/manager/CommandLoop.java b/src/pkg/deepCurse/nopalmo/manager/CommandLoop.java
index cb24747..a4f5147 100644
--- a/src/pkg/deepCurse/nopalmo/manager/CommandLoop.java
+++ b/src/pkg/deepCurse/nopalmo/manager/CommandLoop.java
@@ -2,8 +2,8 @@ package pkg.deepCurse.nopalmo.manager;
public class CommandLoop {
- public static add() {
-
- }
+// public static add() {
+//
+// }
}
diff --git a/src/pkg/deepCurse/nopalmo/manager/CommandManager.java b/src/pkg/deepCurse/nopalmo/manager/CommandManager.java
index 1001f0d..bf99dfc 100644
--- a/src/pkg/deepCurse/nopalmo/manager/CommandManager.java
+++ b/src/pkg/deepCurse/nopalmo/manager/CommandManager.java
@@ -28,6 +28,7 @@ import pkg.deepCurse.nopalmo.command.commands.info.Ping;
import pkg.deepCurse.nopalmo.command.commands.info.Reload;
import pkg.deepCurse.nopalmo.command.commands.testing.GuildCommand;
import pkg.deepCurse.nopalmo.command.commands.testing.PrivateCommand;
+import pkg.deepCurse.nopalmo.command.testing.LiveUpdateTestCommand;
import pkg.deepCurse.nopalmo.core.Boot;
import pkg.deepCurse.nopalmo.core.database.NopalmoDBTools.Tools.DeveloperDB;
import pkg.deepCurse.nopalmo.core.database.NopalmoDBTools.Tools.GlobalDB;
@@ -60,6 +61,7 @@ public class CommandManager {
addCommand(new Reload()); // dual
// addCommand(new BontebokInterpret()); // dual
addCommand(new Stupid()); // guild
+ addCommand(new LiveUpdateTestCommand());
}
private void addCommand(CommandInterface c) {
@@ -156,9 +158,11 @@ public class CommandManager {
break;
}
}
-
+
+ if (DeveloperDB.developerExists(commandBlob.getAuthorID())) {
commandBlob.setDeveloper(
DeveloperDB.getDeveloperBoolean(commandBlob.getAuthorID(), "developercommandpermission"));
+ }
for (int i = 0; i < newArgs.size(); i++) {
String x = newArgs.get(i);
x = x.toLowerCase();