From b01b4be00f5ba30dcf6c245e0e8b3f7b06f2a10d Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Sun, 21 Apr 2019 01:29:23 -0700 Subject: [PATCH] + Added lua user and stats --- src/commands/CommandStats.java | 28 ++++++++++++++++------------ src/core/lua/Plugin.java | 5 +++-- src/core/lua/PluginManager.java | 6 ++++-- src/core/lua/PluginStructure.java | 12 ++++++++++++ src/core/lua/PluginUser.java | 13 +++++++++++++ src/main/Main.java | 10 ++++------ 6 files changed, 52 insertions(+), 22 deletions(-) create mode 100644 src/core/lua/PluginStructure.java create mode 100644 src/core/lua/PluginUser.java diff --git a/src/commands/CommandStats.java b/src/commands/CommandStats.java index 7f4f254..593ff66 100644 --- a/src/commands/CommandStats.java +++ b/src/commands/CommandStats.java @@ -26,13 +26,17 @@ public class CommandStats extends Command String out = "```\n"; Stats stats = Stats.instance; + long seen = stats.GetMessagesSeen(); + long processed = stats.GetCommandsProcessed(); + out += "----- [General] -----\n"; - out += " Messages observed: " + stats.GetMessagesSeen() + "\n"; - out += "Commands processed: " + stats.GetCommandsProcessed() + "\n"; + out += " Messages observed: " + seen + "\n"; + out += "Commands processed: " + processed + "\n"; + out += " Command invoke %: " + ((int)((processed / (float)seen) * 1000)) / 10.0f + "%\n"; out += " KittyBot uptime: " + stats.GetFormattedUptime() + "\n"; out += "\n"; out += "----- [Health] -----\n"; - out += " SMT cores: " + stats.GetCPUAvailable() + "\n"; + out += " SMT cores: " + stats.GetCPUAvailable() + "\n"; // If CPU load works on this OS, list it. double CPULoad = stats.GetSystemCPULoad(); @@ -46,20 +50,20 @@ public class CommandStats extends Command Integer timed_waiting = data.states.get(Thread.State.TIMED_WAITING); Integer waiting = data.states.get(Thread.State.WAITING); - out += " Child threads:" - + " run: " + (runnable == null ? 0 : runnable) - + " block: " + (blocked == null ? 0 : blocked) - + " sleep: " + (timed_waiting == null ? 0 : timed_waiting) - + " wait: " + (waiting == null ? 0 : waiting) - + " term: " + (terminated == null ? 0 : terminated) + out += " Threads:" + + " run-" + (runnable == null ? 0 : runnable) + + " block-" + (blocked == null ? 0 : blocked) + + " sleep-" + (timed_waiting == null ? 0 : timed_waiting) + + " wait-" + (waiting == null ? 0 : waiting) + + " term-" + (terminated == null ? 0 : terminated) + "\n"; Integer guildCount = stats.GetGuildCount(); Integer userCount = stats.GetUserCount(); - out += "\n----- [Counts] -----\n" - + "Guilds: " + guildCount + "\n" - + " Users: " + userCount; + out += "\n----- [Cache] -----\n" + + "Cached Guilds: " + guildCount + "\n" + + " Cached Users: " + userCount; out += "\n```"; res.Call(out); diff --git a/src/core/lua/Plugin.java b/src/core/lua/Plugin.java index b58a87c..67c97d9 100644 --- a/src/core/lua/Plugin.java +++ b/src/core/lua/Plugin.java @@ -8,6 +8,7 @@ import java.util.stream.Stream; import org.luaj.vm2.Globals; import org.luaj.vm2.LuaValue; +import org.luaj.vm2.lib.jse.CoerceJavaToLua; import org.luaj.vm2.lib.jse.JsePlatform; // To promote flexibility, plugins are lua file with predefined callbacks. @@ -47,11 +48,11 @@ public class Plugin } } - public String Run(String args) + public String Run(String args, PluginUser user) { try { - LuaValue res = func_plugin.call(LuaValue.valueOf(args)); + LuaValue res = func_plugin.call(LuaValue.valueOf(args), user.AsLua()); if(!res.isnil()) return res.toString(); diff --git a/src/core/lua/PluginManager.java b/src/core/lua/PluginManager.java index 90593c3..a0e98a2 100644 --- a/src/core/lua/PluginManager.java +++ b/src/core/lua/PluginManager.java @@ -6,6 +6,8 @@ import java.nio.file.Paths; import java.util.ArrayList; import java.util.stream.Stream; +import dataStructures.KittyUser; + // Reads in, handles, and manipulates plugins. Plugins are loaded in the order they appear in the folder. public class PluginManager { @@ -37,12 +39,12 @@ public class PluginManager // Runs all plugins, returning when it gets a non-nill result. // Otherwise, returns null. - public String RunAll(String input) + public String RunAll(String input, KittyUser user) { for(int i = 0; i < plugins.size(); ++i) { Plugin plugin = plugins.get(i); - String out = plugin.Run(input); + String out = plugin.Run(input, new PluginUser(user)); if(out != null) { diff --git a/src/core/lua/PluginStructure.java b/src/core/lua/PluginStructure.java new file mode 100644 index 0000000..989d46d --- /dev/null +++ b/src/core/lua/PluginStructure.java @@ -0,0 +1,12 @@ +package core.lua; + +import org.luaj.vm2.LuaValue; +import org.luaj.vm2.lib.jse.CoerceJavaToLua; + +public class PluginStructure +{ + public LuaValue AsLua() + { + return CoerceJavaToLua.coerce(this); + } +} diff --git a/src/core/lua/PluginUser.java b/src/core/lua/PluginUser.java new file mode 100644 index 0000000..2a46fc2 --- /dev/null +++ b/src/core/lua/PluginUser.java @@ -0,0 +1,13 @@ +package core.lua; + +import dataStructures.KittyUser; + +public class PluginUser extends PluginStructure +{ + public String name; + + public PluginUser(KittyUser user) + { + this.name = user.name; + } +} diff --git a/src/main/Main.java b/src/main/Main.java index d3093e8..aa432e0 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -3,6 +3,7 @@ package main; import javax.security.auth.login.LoginException; import core.*; import core.lua.PluginManager; +import core.lua.PluginUser; import dataStructures.KittyChannel; import dataStructures.KittyGuild; import dataStructures.KittyRole; @@ -52,7 +53,7 @@ public class Main extends ListenerAdapter @Override public void onGuildMessageReceived(GuildMessageReceivedEvent event) - { + { // Tweak the event as necessary if(!PreProcessSetup(event)) return; @@ -71,19 +72,16 @@ public class Main extends ListenerAdapter return; // Track beans! - user.ChangeBeans(1); + user.ChangeBeans(1); // RP logging system RPManager.instance.addLine(channel, user, input); - // - - // Attempt to spin up a command. If the command doesn't exist. // Run plugins right before invoking the commands but after all other setup. if(commandManager.InvokeOnNewThread(guild, channel, user, input, response) == false) { - String pluginOutput = pluginManager.RunAll(input.message); + String pluginOutput = pluginManager.RunAll(input.message, user); if(pluginOutput != null) response.Call(pluginOutput);