From 1df71ef61dcdc90dfd1e6c5faaf49a33e513e897 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Mon, 20 May 2019 15:21:23 -0700 Subject: [PATCH 1/2] = Changed lua plugins to run with arrays of output. --- src/core/lua/Plugin.java | 31 +++++++++++++++++++++++++++++-- src/core/lua/PluginManager.java | 10 +++++++--- src/main/Main.java | 7 ++++--- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/core/lua/Plugin.java b/src/core/lua/Plugin.java index 24add7a..3c89e4a 100644 --- a/src/core/lua/Plugin.java +++ b/src/core/lua/Plugin.java @@ -4,10 +4,13 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; +import java.util.List; +import java.util.Vector; import java.util.stream.Stream; import org.luaj.vm2.Globals; import org.luaj.vm2.LuaValue; +import org.luaj.vm2.Varargs; import org.luaj.vm2.lib.jse.JsePlatform; // To promote flexibility, plugins are lua file with predefined callbacks. @@ -45,14 +48,38 @@ public class Plugin } } - public String Run(String args, PluginUser user) + public List Run(String args, PluginUser user) { + List outputs = new Vector(); + try { LuaValue res = func_plugin.call(LuaValue.valueOf(args), user.AsLua()); if(!res.isnil()) - return res.toString(); + { + if(res.istable()) + { + while(true) + { + LuaValue key = LuaValue.NIL; + while (true) + { + Varargs n = res.next(key); + key = n.arg1(); + if (key.isnil()) + break; + + LuaValue value = n.arg(2); + outputs.add(value.toString()); + } + } + } + else + { + outputs.add(res.toString()); + } + } } catch(Exception e) { diff --git a/src/core/lua/PluginManager.java b/src/core/lua/PluginManager.java index a0e98a2..d53d96d 100644 --- a/src/core/lua/PluginManager.java +++ b/src/core/lua/PluginManager.java @@ -4,6 +4,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.List; import java.util.stream.Stream; import dataStructures.KittyUser; @@ -37,14 +38,17 @@ public class PluginManager } } - // Runs all plugins, returning when it gets a non-nill result. + // Runs all plugins, returning when it gets a non-nill result. If there + // are mutliple strings returned in the list, it is because the plugin + // that was run returned multiple strings. Since plugins don't stack, it + // will never indicate that multiple // Otherwise, returns null. - public String RunAll(String input, KittyUser user) + public List RunAll(String input, KittyUser user) { for(int i = 0; i < plugins.size(); ++i) { Plugin plugin = plugins.get(i); - String out = plugin.Run(input, new PluginUser(user)); + List out = plugin.Run(input, new PluginUser(user)); if(out != null) { diff --git a/src/main/Main.java b/src/main/Main.java index 6ef60c9..962a07a 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -18,6 +18,7 @@ import net.dv8tion.jda.core.hooks.ListenerAdapter; import offline.*; import utils.GlobalLog; import net.dv8tion.jda.core.*; +import java.util.*; // http://www.slf4j.org/ - this JDA logging tool has been disabled by specifying NOP implementation. // This is the application entry point, and bot startup location! @@ -86,10 +87,10 @@ public class Main extends ListenerAdapter // 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, user); + List pluginOutput = pluginManager.RunAll(input.message, user); - if(pluginOutput != null) - response.Call(pluginOutput); + if(pluginOutput != null && pluginOutput.size() > 0) + response.Call(pluginOutput.get(0)); } // Run any upkeep in post we need to From b71debb9d2c60bddbcbf54e314810f6c877277b4 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Mon, 20 May 2019 15:21:39 -0700 Subject: [PATCH 2/2] = Fixed plugin output --- locStrings.config | 18 ++++++++++-------- src/core/lua/Plugin.java | 32 ++++++++++++++++++-------------- src/core/lua/PluginManager.java | 2 +- src/main/Main.java | 5 ++++- 4 files changed, 33 insertions(+), 24 deletions(-) diff --git a/locStrings.config b/locStrings.config index b2d61a8..14e8611 100644 --- a/locStrings.config +++ b/locStrings.config @@ -82,6 +82,15 @@ StarkInfo=Snaps your icon or the icon of a friend you mentioned [CommandYeet] YeetInfo=Yeet yourself or yeet a friend with @! +[CommandTradeBeans] +TradeBeanseStealingBeans=Stealing is wrong! *Steals 10 beans from %s* +TradeBeansNoTargetError=You have to give *someone* your beans! +TradeBeansSuccess=%s gave %s %s of their beans! +TradeBeansStealingBeans= +TradeBeansInfo=Gives another person some of your beans! Use is `tradebeans amount @person`! +TradeBeansIntParseError=That's not a real number! +TradeBeansNotEnoughError=You don't have enough beans! + [CommandPollVote] PollVoteNotValidNumber=That's not a vaild number! PollVoteInfo=Vote in a poll with the choice number, won't work if no poll is running, you can't change your vote once you have cast it! Be careful! @@ -228,11 +237,4 @@ MapVersion=Using mapgen v0.1 MapWidth=Width MapHeight=Height -[CommandTradeBeans] -TradeBeansInfo=Gives another person some of your beans! Use is `tradebeans amount @person`! -TradeBeansNoTargetError=You have to give *someone* your beans! -TradeBeansIntParseError=That's not a real number! -TradeBeansNotEnoughError=You don't have enough beans! -TradeBeanseStealingBeans=Stealing is wrong! *Steals 10 beans from %s* -TradeBeansSuccess=%s gave %s %s of their beans! - \ No newline at end of file + diff --git a/src/core/lua/Plugin.java b/src/core/lua/Plugin.java index 3c89e4a..86a959a 100644 --- a/src/core/lua/Plugin.java +++ b/src/core/lua/Plugin.java @@ -50,36 +50,40 @@ public class Plugin public List Run(String args, PluginUser user) { - List outputs = new Vector(); - try { + List outputs = new Vector(); + LuaValue res = func_plugin.call(LuaValue.valueOf(args), user.AsLua()); if(!res.isnil()) { if(res.istable()) { - while(true) + LuaValue key = LuaValue.NIL; + while (true) { - LuaValue key = LuaValue.NIL; - while (true) - { - Varargs n = res.next(key); - key = n.arg1(); - if (key.isnil()) - break; - - LuaValue value = n.arg(2); - outputs.add(value.toString()); - } + Varargs n = res.next(key); + key = n.arg1(); + if (key.isnil()) + break; + + LuaValue value = n.arg(2); + outputs.add(value.toString()); } } else { + System.out.println("Loc2.5 " + res.toString()); outputs.add(res.toString()); } } + + if(outputs.size() <= 0) + return null; + + return outputs; + } catch(Exception e) { diff --git a/src/core/lua/PluginManager.java b/src/core/lua/PluginManager.java index d53d96d..984728e 100644 --- a/src/core/lua/PluginManager.java +++ b/src/core/lua/PluginManager.java @@ -49,7 +49,7 @@ public class PluginManager { Plugin plugin = plugins.get(i); List out = plugin.Run(input, new PluginUser(user)); - + if(out != null) { PluginLog.Log("Executed plugin at " + plugin.filepath); diff --git a/src/main/Main.java b/src/main/Main.java index 962a07a..8be398f 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -90,7 +90,10 @@ public class Main extends ListenerAdapter List pluginOutput = pluginManager.RunAll(input.message, user); if(pluginOutput != null && pluginOutput.size() > 0) - response.Call(pluginOutput.get(0)); + { + for(int i = 0; i < pluginOutput.size(); ++i) + response.Call(pluginOutput.get(i)); + } } // Run any upkeep in post we need to