diff --git a/.classpath b/.classpath index a413789..6174d12 100644 --- a/.classpath +++ b/.classpath @@ -11,7 +11,6 @@ - diff --git a/.gitignore b/.gitignore index 29ada77..b07ca12 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /nopalmo.lock /.classpath /.project +/chaos.lock diff --git a/exit-codes.txt b/exit-codes.txt index e9eaa50..58c0861 100644 --- a/exit-codes.txt +++ b/exit-codes.txt @@ -1,4 +1,8 @@ -3 : Failed to lock -4 : Failed to connect to maria -7 : Shut down by developer -8 : LoggerHelper.crash(Exception e); \ No newline at end of file + + +Failed to lock +Failed to connect to maria + + +Shut down by developer +LoggerHelper.crash(Exception e); \ No newline at end of file diff --git a/src/pkg/deepCurse/nopalmo/command/testing/LiveUpdateTestCommand.java b/src/pkg/deepCurse/nopalmo/command/testing/LiveUpdateTestCommand.java index 73d75bc..f2cfc9a 100644 --- a/src/pkg/deepCurse/nopalmo/command/testing/LiveUpdateTestCommand.java +++ b/src/pkg/deepCurse/nopalmo/command/testing/LiveUpdateTestCommand.java @@ -12,11 +12,11 @@ import pkg.deepCurse.nopalmo.manager.ClassManager.InternalReloadable; import pkg.deepCurse.nopalmo.manager.CommandBlob; import qj.util.ReflectUtil; -public class LiveUpdateTestCommand implements InternalReloadable, DualCommandInterface { - +public class LiveUpdateTestCommand implements InternalReloadable, DualCommandInterface { + @Override public String[] getCommandCalls() { - return new String[] {"test-update"}; + return new String[] { "test-update" }; } @Override @@ -33,20 +33,18 @@ public class LiveUpdateTestCommand implements InternalReloadable, 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 3fd493e..ee3e292 100644 --- a/src/pkg/deepCurse/nopalmo/core/Boot.java +++ b/src/pkg/deepCurse/nopalmo/core/Boot.java @@ -1,9 +1,6 @@ package pkg.deepCurse.nopalmo.core; -import java.io.DataOutputStream; import java.io.IOException; -import java.net.Socket; -import java.util.List; import org.slf4j.Logger; import org.slf4j.impl.SimpleLoggerFactory; @@ -22,12 +19,8 @@ import pkg.deepCurse.nopalmo.core.database.NopalmoDBTools.Tools.GlobalDB; import pkg.deepCurse.nopalmo.listener.MessageReceivedListener; import pkg.deepCurse.nopalmo.manager.CommandManager; import pkg.deepCurse.nopalmo.manager.StatusManager; -import pkg.deepCurse.nopalmo.server.socket.Socks; +import pkg.deepCurse.nopalmo.utils.Locks; import pkg.deepCurse.nopalmo.utils.LogHelper; -import pkg.deepCurse.phoenixRuntime.core.PhoenixCommandManager; -import pkg.deepCurse.phoenixRuntime.core.PhoenixInterface; -import pkg.deepCurse.phoenixRuntime.core.PhoenixRuntime; -import pkg.deepCurse.phoenixRuntime.core.PhoenixSettings; public class Boot { @@ -42,172 +35,149 @@ public class Boot { public static void main(String[] args) { - PhoenixSettings settings = new PhoenixSettings().setAuthentication(args[3]).setCommandSplitRegex(", ") - .setCommandManager(new PhoenixCommandManager()); - // TODO using join and a while last time + 15000 < current time, then kill and // proceed as a failure - settings.commandManager.addCommand("phoenix-update", (PhoenixRuntime runtime, List commandArgs) -> { - logger.info("Received "); - - Socks.sendStringSock(settings.address, settings.commonPort, "phoenix-update-confirm"); - - logger.info("Sent "); - - if (bot != null) { - bot.shutdown(); - } - - runtime.shutdown(9); - }); - // settings.actions.put("phoenix-update-confirm", (PhoenixRuntime runtime) -> { // LogHelper.log("Received "); // }); - PhoenixRuntime runtime = new PhoenixRuntime(settings, new PhoenixInterface() { + logger.info("Booting: <" + pid + ">"); - @Override - public void boot() { - logger.info("Booting: <" + pid + ">"); + long preBootTime = System.currentTimeMillis(); - long preBootTime = System.currentTimeMillis(); + isProd = args[2].contentEquals("prod"); - isProd = args[2].contentEquals("prod"); + logger.info("Locking System"); - try { - logger.info("Connecting to mariadb:nopalmo"+args[1]); - NopalmoDBTools.init(isProd ? "nopalmo" : "chaos", "nopalmo", args[1]); - } catch (Exception e) { - e.printStackTrace(); - logger.info("Failed to connect\nShutting down. . ."); - System.exit(4); - } - logger.info("Connected. . ."); + try { + if (Locks.dirLock(isProd ? "nopalmo.lock" : "chaos.lock")) { + logger.info("Is locked, shutting down. . ."); + System.exit(3); + } + } catch (IOException e1) { + e1.printStackTrace(); + } - try { + logger.info("System locked. . ."); + + try { + logger.info("Connecting to mariadb:nopalmo"); + NopalmoDBTools.init(isProd ? "nopalmo" : "chaos", "nopalmo", args[1]); + } catch (Exception e) { + e.printStackTrace(); + logger.info("Failed to connect\nShutting down. . ."); + System.exit(4); + } + logger.info("Connected. . ."); + + try { // bot = JDABuilder.createDefault(args[0]).setChunkingFilter(ChunkingFilter.ALL) // .setMemberCachePolicy(MemberCachePolicy.ALL).enableIntents(GatewayIntent.GUILD_MEMBERS) // .setActivity(Activity.watching("Loading users...")).setIdle(true) // .addEventListeners(new GuildMessageReceivedListener()) // .addEventListeners(new DirectMessageReceivedListener()).build().awaitReady(); - bot = JDABuilder.createDefault(args[0]) - .setActivity(Activity.of(ActivityType.WATCHING, "the loading bar. . .")) - .setStatus(OnlineStatus.DO_NOT_DISTURB) + bot = JDABuilder.createDefault(args[0]) + .setActivity(Activity.of(ActivityType.WATCHING, "the loading bar. . .")) + .setStatus(OnlineStatus.DO_NOT_DISTURB) - .setMaxBufferSize(Integer.MAX_VALUE) + .setMaxBufferSize(Integer.MAX_VALUE) - .setChunkingFilter(ChunkingFilter.ALL).setMemberCachePolicy(MemberCachePolicy.ALL) + .setChunkingFilter(ChunkingFilter.ALL).setMemberCachePolicy(MemberCachePolicy.ALL) - .enableIntents(GatewayIntent.DIRECT_MESSAGE_REACTIONS, GatewayIntent.DIRECT_MESSAGES, - GatewayIntent.GUILD_BANS, GatewayIntent.GUILD_EMOJIS, GatewayIntent.GUILD_MEMBERS, - GatewayIntent.GUILD_MESSAGE_REACTIONS, GatewayIntent.GUILD_MESSAGES) + .enableIntents(GatewayIntent.DIRECT_MESSAGE_REACTIONS, GatewayIntent.DIRECT_MESSAGES, + GatewayIntent.GUILD_BANS, GatewayIntent.GUILD_EMOJIS, GatewayIntent.GUILD_MEMBERS, + GatewayIntent.GUILD_MESSAGE_REACTIONS, GatewayIntent.GUILD_MESSAGES) - .enableCache(CacheFlag.EMOTE, CacheFlag.MEMBER_OVERRIDES) + .enableCache(CacheFlag.EMOTE, CacheFlag.MEMBER_OVERRIDES) - // .setIdle(true) + // .setIdle(true) - .setAutoReconnect(true) + .setAutoReconnect(true) - .addEventListeners(new MessageReceivedListener()) + .addEventListeners(new MessageReceivedListener()) - .setEnableShutdownHook(true) + .setEnableShutdownHook(true) - .build().awaitReady(); + .build().awaitReady(); - } catch (Exception e) { - LogHelper.crash(e); - } + } catch (Exception e) { + LogHelper.crash(e); + } - Loader.init(); + Loader.init(); - logger.info("Using account: " + bot.getSelfUser().getName()); + logger.info("Using account: " + bot.getSelfUser().getName()); - bot.getPresence().setStatus(OnlineStatus.ONLINE); - bot.getPresence().setActivity(Activity.listening("Infected Mushroom")); + bot.getPresence().setStatus(OnlineStatus.ONLINE); + bot.getPresence().setActivity(Activity.listening("Infected Mushroom")); - long bootTime = System.currentTimeMillis() - preBootTime; + long bootTime = System.currentTimeMillis() - preBootTime; - logger.info("Taken " + bootTime + "ms to boot"); + logger.info("Taken " + bootTime + "ms to boot"); - logger.info("Starting loop"); + logger.info("Starting looping thread"); + Thread loopingThread = new Thread(new Runnable() { + @Override + public void run() { loop(); } + }); + loopingThread.start(); + logger.info("Looping thread started. . ."); + } - public void loop() { + public static void loop() { - long lastTime = System.currentTimeMillis(); - long fifteenMins = lastTime; - long fiveMins = lastTime; - long threeMins = lastTime; - long lastTimeUpdateStatus = lastTime; - long lastTimeCheckUpdate = lastTime; + long lastTime = System.currentTimeMillis(); + long fifteenMins = lastTime; + long fiveMins = lastTime; + long threeMins = lastTime; + long lastTimeUpdateStatus = lastTime; + long lastTimeCheckUpdate = lastTime; - long dynamicWait = Long.parseLong(GlobalDB.getGlobalValue("dynamicwait")); + long dynamicWait = Long.parseLong(GlobalDB.getGlobalValue("dynamicwait")); - while (running) { + while (running) { - long now = System.currentTimeMillis(); - - if (now > lastTime + dynamicWait) { // dynamic wait loop - lastTime = now; - try { - bot.getSelfUser(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - if (now > lastTimeCheckUpdate + 900000) { - lastTimeCheckUpdate = now; - } - - if (now > lastTimeUpdateStatus + dynamicWait - && GlobalDB.getGlobalValue("isshufflestatusenabled").contentEquals("true")) { - lastTimeUpdateStatus = now; - - StatusManager.shuffle(bot); - - } - - if (now > fifteenMins + 900000) { - fifteenMins = now; - - } - - if (now > fiveMins + 300000) { - fiveMins = now; - } - - if (now > threeMins + 180000) { - threeMins = now; - } + long now = System.currentTimeMillis(); + if (now > lastTime + dynamicWait) { // dynamic wait loop + lastTime = now; + try { + bot.getSelfUser(); + } catch (Exception e) { + e.printStackTrace(); } } - }); - runtime.setLockedRunnable(() -> { - logger.info("System is locked\nSending instead. . . "); - - try { - Socket cSocket = new Socket("127.0.0.1", settings.commonPort); - DataOutputStream dOut = new DataOutputStream(cSocket.getOutputStream()); - dOut.writeUTF("phoenix-update"); - dOut.flush(); - dOut.close(); - cSocket.close(); - } catch (IOException e) { - e.printStackTrace(); + if (now > lastTimeCheckUpdate + 900000) { + lastTimeCheckUpdate = now; } - // settings.getRuntime().shutdown(0); + if (now > lastTimeUpdateStatus + dynamicWait + && GlobalDB.getGlobalValue("isshufflestatusenabled").contentEquals("true")) { + lastTimeUpdateStatus = now; - }); + StatusManager.shuffle(bot); - runtime.launch(); + } + + if (now > fifteenMins + 900000) { + fifteenMins = now; + + } + + if (now > fiveMins + 300000) { + fiveMins = now; + } + + if (now > threeMins + 180000) { + threeMins = now; + } + + } } } diff --git a/src/pkg/deepCurse/nopalmo/core/database/NopalmoDBTools.java b/src/pkg/deepCurse/nopalmo/core/database/NopalmoDBTools.java index cdbb90e..5167156 100644 --- a/src/pkg/deepCurse/nopalmo/core/database/NopalmoDBTools.java +++ b/src/pkg/deepCurse/nopalmo/core/database/NopalmoDBTools.java @@ -8,6 +8,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Optional; import java.util.Random; + import org.fluentjdbc.DbContext; import org.fluentjdbc.DbContextConnection; import org.fluentjdbc.DbContextTable; @@ -499,7 +500,8 @@ public class NopalmoDBTools { public class InfractionDB { - public static long createInfraction(long userID, String reason, long expiryDate) { + public static long createInfraction(long userID, String reason, long expiryDate, long guildID, + long invokerID) { try (DbContextConnection idk = context.startConnection(dataSource)) { long time = System.currentTimeMillis(); infractions.insert().setPrimaryKey("userid", userID).setField("reason", reason) @@ -519,7 +521,8 @@ public class NopalmoDBTools { * @param expiryDate * @param infractionID */ - public static void createInfraction(long userID, String reason, long expiryDate, long infractionID) { + public static void createInfraction(long userID, String reason, long expiryDate, long guildID, + long invokerID, long infractionID) { try (DbContextConnection idk = context.startConnection(dataSource)) { infractions.insert().setPrimaryKey("infractionid", infractionID).setField("reason", reason) .setField("epochdate", System.currentTimeMillis()).setField("expirydate", expiryDate) @@ -666,7 +669,7 @@ public class NopalmoDBTools { // public static void test(Runnable runnable) { long userID = 99; - long guildID = 99; +// long guildID = 99; Random random = new Random(); long minutes = 0; @@ -701,7 +704,7 @@ public class NopalmoDBTools { } private class Tests { - + public static long infractionLoop(long time, long count, long userID, Random random) { long userStartTime = System.currentTimeMillis(); @@ -723,7 +726,7 @@ public class NopalmoDBTools { } try { - InfractionDB.createInfraction(userID, String.valueOf(random.nextInt()), 0, i); + InfractionDB.createInfraction(userID, String.valueOf(random.nextInt()), 0, 0, 0, i); } catch (Throwable e) { eLL.add("onCreate"); eL.add(e); diff --git a/src/pkg/deepCurse/nopalmo/core/database/Schemat.ic b/src/pkg/deepCurse/nopalmo/core/database/Schemat.ic deleted file mode 100644 index 9530e3a..0000000 --- a/src/pkg/deepCurse/nopalmo/core/database/Schemat.ic +++ /dev/null @@ -1,111 +0,0 @@ - public static boolean getGuildBoolean(long guildID, String value) { - try (DbContextConnection idk = context.startConnection(dataSource)) { - Optional out = guilds.query().where("guildid", guildID).singleString(value); - return out.isPresent() ? out.get().contentEquals("1") : null; - } - } - - public static String getGuildString(long guildID, String value) { - try (DbContextConnection idk = context.startConnection(dataSource)) { - Optional out = guilds.query().where("guildid", guildID).singleString(value); - return out.isPresent() ? out.get() : null; - } - } - - public static long getGuildLong(long guildID, String value) { - try (DbContextConnection idk = context.startConnection(dataSource)) { - Optional out = guilds.query().where("guildid", guildID).singleLong(value); - return out.isPresent() ? out.get().longValue() : null; - } - } - - public static void setGuildBoolean(long guildID, String columnName, boolean value) { - try (DbContextConnection idk = context.startConnection(dataSource)) { - try { - guilds.insert().setPrimaryKey("guildid", guildID).setField(columnName, value).execute(); - } catch (Exception e) { -// e.printStackTrace(); - try { - guilds.query().where("guildid", guildID).update().setField(columnName, value).execute(); - } catch (Exception e2) { - e2.printStackTrace(); - e.printStackTrace(); - } - } - } - } - - public static void setGuildString(long guildID, String columnName, String value) { - try (DbContextConnection idk = context.startConnection(dataSource)) { - try { - guilds.insert().setPrimaryKey("guildid", guildID).setField(columnName, value).execute(); - } catch (Exception e) { -// e.printStackTrace(); - try { - guilds.query().where("guildid", guildID).update().setField(columnName, value).execute(); - } catch (Exception e2) { - e2.printStackTrace(); - e.printStackTrace(); - } - } - } - } - - public static void setGuildLong(long guildID, String columnName, long value) { - try (DbContextConnection idk = context.startConnection(dataSource)) { - try { - guilds.insert().setPrimaryKey("guildid", guildID).setField(columnName, value).execute(); - } catch (Exception e) { -// e.printStackTrace(); - try { - guilds.query().where("guildid", guildID).update().setField(columnName, value).execute(); - } catch (Exception e2) { - e2.printStackTrace(); - e.printStackTrace(); - } - } - } - } - - public static boolean guildExists(long guildID) { - try (DbContextConnection idk = context.startConnection(dataSource)) { - return guilds.query().where("guildid", guildID).singleLong("guildid").isPresent(); - } - } - - public static void addGuild(long guildID) { - try (DbContextConnection idk = context.startConnection(dataSource)) { - try { - guilds.insert().setPrimaryKey("guildid", guildID).execute(); - } catch (Exception e) { - } - } - } - - public static void removeGuild(long guildID) { - try (DbContextConnection idk = context.startConnection(dataSource)) { - guilds.query().where("guildid", guildID).executeDelete(); - } - } - - - - - - -TYPE - -add -remove -exists -set(long string boolean) -get(long string boolean) - -misc interactions... - - - - - - - diff --git a/src/pkg/deepCurse/nopalmo/manager/CommandLoop.java b/src/pkg/deepCurse/nopalmo/manager/CommandLoop.java index a4f5147..139bb34 100644 --- a/src/pkg/deepCurse/nopalmo/manager/CommandLoop.java +++ b/src/pkg/deepCurse/nopalmo/manager/CommandLoop.java @@ -1,9 +1,9 @@ package pkg.deepCurse.nopalmo.manager; public class CommandLoop { - + // public static add() { // // } - + } diff --git a/src/pkg/deepCurse/nopalmo/manager/CommandManager.java b/src/pkg/deepCurse/nopalmo/manager/CommandManager.java index bf99dfc..62c6f21 100644 --- a/src/pkg/deepCurse/nopalmo/manager/CommandManager.java +++ b/src/pkg/deepCurse/nopalmo/manager/CommandManager.java @@ -90,17 +90,17 @@ public class CommandManager { final String pingPrefix = "<@!" + event.getJDA().getSelfUser().getIdLong() + ">"; String splicer = null; - - if (message.startsWith(pingPrefix + " ")) { - splicer = pingPrefix + " "; - } else if (message.startsWith(prefix)) { - splicer = prefix; - } else if (message.startsWith(pingPrefix)) { - splicer = pingPrefix; - } else { - return; - } - + + if (message.startsWith(pingPrefix + " ")) { + splicer = pingPrefix + " "; + } else if (message.startsWith(prefix)) { + splicer = prefix; + } else if (message.startsWith(pingPrefix)) { + splicer = pingPrefix; + } else { + return; + } + final String[] split = message.replaceFirst("(?i)" + Pattern.quote(splicer), "").split("\\s+"); final String commandCall = split[0].toLowerCase(); @@ -158,10 +158,10 @@ public class CommandManager { break; } } - + if (DeveloperDB.developerExists(commandBlob.getAuthorID())) { - commandBlob.setDeveloper( - DeveloperDB.getDeveloperBoolean(commandBlob.getAuthorID(), "developercommandpermission")); + commandBlob.setDeveloper(DeveloperDB.getDeveloperBoolean(commandBlob.getAuthorID(), + "developercommandpermission")); } for (int i = 0; i < newArgs.size(); i++) { String x = newArgs.get(i); @@ -182,7 +182,8 @@ public class CommandManager { pre = arg.getArgName(); } } - } // TODO RIP ROOT ALIAS PREFIX IN FAVOR OF "--long-name" "-s (shortname)" "wildcard" + } // TODO RIP ROOT ALIAS PREFIX IN FAVOR OF "--long-name" "-s (shortname)" + // "wildcard" if (command.getArguments().keySet().contains(pre)) { @@ -211,7 +212,7 @@ public class CommandManager { //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } else { - + if (!command.getArguments().keySet().contains(x)) { for (Argument arg : command.getArguments().values()) { if (arg.getAliases().contains(x)) { @@ -219,8 +220,9 @@ public class CommandManager { x = arg.getArgName(); } } - } // TODO RIP ROOT ALIAS PREFIX IN FAVOR OF "--long-name" "-s (shortname)" "wildcard" - + } // TODO RIP ROOT ALIAS PREFIX IN FAVOR OF "--long-name" "-s (shortname)" + // "wildcard" + if (command.getArguments().get(x) != null) { if (command.getArguments().get(x).isPrefixRequired()) { Tools.wrongUsage(event.getChannel(), command); @@ -246,9 +248,9 @@ public class CommandManager { //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } else { - + Argument posix = positionalArgs.get(i - offset); - + // if (!command.getArguments().keySet().contains(x)) { // for (Argument arg : command.getArguments().values()) { // if (arg.getAliases().contains(x)) { @@ -257,23 +259,20 @@ public class CommandManager { // } // } // } // TODO RIP ROOT ALIAS PREFIX IN FAVOR OF "--long-name" "-s (shortname)" "wildcard" - + if (posix != null) { - if (posix.getPermission() == null - || DeveloperDB.hasPermission(commandBlob.getAuthorID(), - posix.getPermission())) { + if (posix.getPermission() == null || DeveloperDB + .hasPermission(commandBlob.getAuthorID(), posix.getPermission())) { if (posix.isSkipOriginalTaskOnRunnable()) { remainsValid = false; } if (posix.getIsWildcard()) { - argumentMap.put(posix.getArgName(), - posix.setWildCardString(x)); + argumentMap.put(posix.getArgName(), posix.setWildCardString(x)); } else { Tools.wrongUsage(event.getChannel(), command); remainsValid = false; } - if (posix.isAutoStartRunnable() - && posix.getRunnableArg() != null) { + if (posix.isAutoStartRunnable() && posix.getRunnableArg() != null) { posix.getRunnableArg().run(commandBlob); } } else { diff --git a/src/pkg/deepCurse/nopalmo/utils/Locks.java b/src/pkg/deepCurse/nopalmo/utils/Locks.java index 9990543..5e6387c 100644 --- a/src/pkg/deepCurse/nopalmo/utils/Locks.java +++ b/src/pkg/deepCurse/nopalmo/utils/Locks.java @@ -2,6 +2,7 @@ package pkg.deepCurse.nopalmo.utils; import java.io.File; import java.io.FileWriter; +import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; @@ -13,9 +14,10 @@ public class Locks { * * @param lockName * @return true on exists, false on vacant + * @throws IOException * @throws Exception */ - public static boolean dirLock(String lockName) throws Exception { + public static boolean dirLock(String lockName) throws IOException { long pid = 0L;