From 56218fdbf204bb9fd3cbf79c74ba35062ca87eea Mon Sep 17 00:00:00 2001 From: minenash Date: Fri, 31 May 2019 20:23:16 -0400 Subject: Allowed abot's file to be edited in game. --- src/main/java/com/redstoner/modules/abot/Abot.cmd | 50 ++++ src/main/java/com/redstoner/modules/abot/Abot.java | 306 ++++++++++++++++++++- 2 files changed, 347 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/redstoner/modules/abot/Abot.cmd b/src/main/java/com/redstoner/modules/abot/Abot.cmd index c8bb2d8..1566a64 100644 --- a/src/main/java/com/redstoner/modules/abot/Abot.cmd +++ b/src/main/java/com/redstoner/modules/abot/Abot.cmd @@ -4,4 +4,54 @@ command abot { run abot_reload; perm utils.abot.reload; } + list [flag:-nh] { + help Lists all the answers. Use -nh to move info from hover to chat, recommended for Console; + run abot_list_nh -nh; + perm utils.abot.list; + } + list { + help Lists all the answers. Use -nh to move info from hover to chat, recommended for Console; + run abot_list -nh; + perm utils.abot.list; + } + get [string:name] { + help Gets the properties of an answer.; + run abot_get name; + perm utils.abot.get; + } + add [string:name] { + help Adds an answer to the bot.; + run abot_add name; + perm utils.abot.add; + } + remove [string:name] { + help Removes an answer to the bot.; + run abot_remove name; + perm utils.abot.remove; + } + edit [string:name] name [string:new] { + help Changes the name of an answer.; + run abot_edit_name name new; + perm utils.abot.edit.name; + } + edit [string:name] message [string:new...] { + help Changes the message of an answer.; + run abot_edit_message name new; + perm utils.abot.edit.name; + } + edit [string:name] permission [string:new] { + help Changes the permission of an answer.; + run abot_edit_permission name new; + perm utils.abot.edit.permission; + } + edit [string:name] regex add [string:regex...] { + help Adds a regex from an answer; + run abot_edit_regex_add name regex; + perm utils.abot.edit.regex; + } + edit [string:name] regex remove [string:regex...] { + help Removed a regex from an answer; + run abot_edit_regex_remove name regex; + perm utils.abot.edit.regex; + } } \ No newline at end of file diff --git a/src/main/java/com/redstoner/modules/abot/Abot.java b/src/main/java/com/redstoner/modules/abot/Abot.java index 3cff0c1..2e058ef 100644 --- a/src/main/java/com/redstoner/modules/abot/Abot.java +++ b/src/main/java/com/redstoner/modules/abot/Abot.java @@ -19,13 +19,22 @@ import com.redstoner.misc.JsonManager; import com.redstoner.misc.Main; import com.redstoner.modules.Module; +import net.nemez.chatapi.ChatAPI; +import net.nemez.chatapi.click.Message; + @Commands(CommandHolderType.File) @AutoRegisterListener @Version(major = 5, minor = 0, revision = 0, compatible = 4) +@SuppressWarnings("unchecked") public class Abot implements Module, Listener { private File answerFile = new File(Main.plugin.getDataFolder(), "abot.json"); JSONArray answers; + @Override + public boolean onEnable() { + return loadAnswers(Bukkit.getConsoleSender()); + } + @EventHandler public void onPlayerChat(AsyncPlayerChatEvent event) { for (Object rawObject : answers) { @@ -47,16 +56,295 @@ public class Abot implements Module, Listener { } @Command(hook = "abot_reload") - public void loadAnswers(CommandSender sender) { - answers = JsonManager.getArray(answerFile); - if (answers == null) answers = new JSONArray(); - - getLogger().message(sender, "Loaded the abot.json file!"); + public void loadAnswersCommand(CommandSender sender) { + loadAnswers(sender); } - @Override - public boolean onEnable() { - loadAnswers(Bukkit.getConsoleSender()); + @Command(hook = "abot_list") + public void listAnswers(CommandSender sender) { + listAnswers(sender, false); + } + + @Command(hook = "abot_list_nh") + public void listAnswers(CommandSender sender, boolean nohover) { + if (answers.isEmpty()) + getLogger().message(sender, "There are no Abot answers to list."); + + if (nohover) { + listAnswersNoHover(sender); + return; + } + + Message msg = ChatAPI.createMessage(sender).appendText(getLogger().getHeader()); + msg.appendText("&6Abot Answers:\n"); + + for (int i = 0; i < answers.size(); i++) { + JSONObject entry = (JSONObject) answers.get(i); + JSONArray regexes = (JSONArray) entry.get("regex"); + + String name = (String) entry.get("name"); + String message = (String) entry.get("message"); + String hover = "&6Name: &e" + name + "\n&6Message:&f " + (message.isEmpty()? "&cNone" : message) + + "\n&6Regexes:" + (regexes.isEmpty()? "&cNone" : "\n"); + + if (regexes.isEmpty()) + continue; + + for (Object regex : regexes) + hover += "&6 - &e" + (String) regex; + + if (i > 0) + msg.appendText("&7, "); + msg.appendTextHover("&e" + name, hover); + } + msg.send(); + + } + + public void listAnswersNoHover(CommandSender sender) { + Message msg = ChatAPI.createMessage(sender).appendText(getLogger().getHeader()); + + for (int i = 0; i < answers.size(); i++) { + JSONObject entry = (JSONObject) answers.get(i); + JSONArray regexes = (JSONArray) entry.get("regex"); + + msg.appendText("\n&6Name: &e" + (String) entry.get("name")); + + String message = (String) entry.get("message"); + msg.appendText("\n&f - &6Message:&f " + (message.isEmpty()? "&cNone" : message) + + "\n&f - &6Regexes:" + (regexes.isEmpty()? "&cNone" : "\n")); + + if (regexes.isEmpty()) + continue; + + for (Object regex : regexes) + msg.appendText("&f - &e" + (String) regex); + } + msg.send(); + } + + @Command(hook = "abot_get") + public void getAnswer(CommandSender sender, String name) { + JSONObject entry = getAnswer(name); + + if (entry == null) { + getLogger().message(sender, "There are no answer with that name."); + return; + } + + Message msg = ChatAPI.createMessage(sender).appendText(getLogger().getHeader()); + + JSONArray regexes = (JSONArray) entry.get("regex"); + + msg.appendText("\n&a" + (String) entry.get("name")); + + String message = (String) entry.get("message"); + msg.appendText("\n &6Message:&f " + (message.isEmpty()? "&cNone" : message) + + "\n &6Regexes:" + (regexes.isEmpty()? "&cNone" : "\n")); + + if (!regexes.isEmpty()) + for (Object regex : regexes) + msg.appendText("&6 - &e" + (String) regex); + + } + + @Command(hook = "abot_add") + public void addAnswer(CommandSender sender, String name) { + if (exists(name)) { + getLogger().message(sender, "That name is already in use."); + return; + } + + JSONObject newEntry = new JSONObject(); + newEntry.put("name", name); + newEntry.put("message", ""); + newEntry.put("hide-perm", null); + newEntry.put("regex", new JSONArray()); + + answers.add(newEntry); + saveAnswers(); + + getLogger().message(sender, "&e" + name + "&7 has been created. Use &e/abot edit &a" + name + + "&e &7to finish setting it up"); + } + + @Command(hook = "abot_remove") + public void removeAnswer(CommandSender sender, String name) { + JSONObject entry = getAnswer(name); + + if (entry == null) { + getLogger().message(sender, "There are no answer with the name &e" + name + "&7."); + return; + } + + answers.remove(entry); + saveAnswers(); + + getLogger().message(sender, "&e"+name+" &7has been removed."); + } + + @Command(hook = "abot_edit_name") + public void editName(CommandSender sender, String name, String newName) { + JSONObject entry = getAnswer(name); + + if (entry == null) { + getLogger().message(sender, "There are no answer with the name &e" + newName + "&7."); + return; + } + + if (exists(newName)) { + getLogger().message(sender, "&e" + newName + " &7is already in use."); + return; + } + + String oldName = (String) entry.get("name"); + + answers.remove(entry); + entry.put("name", newName); + answers.add(entry); + saveAnswers(); + + getLogger().message(sender, "Name changed from &e" + oldName + "&7 to &e" + newName + "&7."); + } + + @Command(hook = "abot_edit_permission") + public void editPermission(CommandSender sender, String name, String permission) { + JSONObject entry = getAnswer(name); + + if (entry == null) { + getLogger().message(sender, "There are no answer with the name &e" + name + "&7."); + return; + } + + String oldPerm = entry.get("hide-perm") == null? "&cNone" : (String) entry.get("hide-perm"); + + answers.remove(entry); + entry.put("hide-perm", permission.equals("null")? null : permission); + answers.add(entry); + saveAnswers(); + + getLogger().message(sender, "Hide Permission changed from &e" + oldPerm + "&7 to &e" + + (permission.equals("null")? "&cNone" : permission) + "&7."); + } + + @Command(hook = "abot_edit_message") + public void editMessage(CommandSender sender, String name, String message) { + JSONObject entry = getAnswer(name); + + if (entry == null) { + getLogger().message(sender, "There are no answer with the name &e" + name + "&7."); + return; + } + + String oldMessage = entry.get("message").equals("")? "&cEmpty String" : (String) entry.get("message"); + + answers.remove(entry); + entry.put("message", message); + answers.add(entry); + saveAnswers(); + + getLogger().message(sender, "Message changed from " + oldMessage + "&7 to &e" + + (message.isEmpty()? "&cEmpty String" : message) + "&7."); + } + + @Command(hook = "abot_edit_regex_add") + public void editRegexAdd(CommandSender sender, String name, String regex) { + JSONObject entry = getAnswer(name); + + if (entry == null) { + getLogger().message(sender, "There are no answer with the name &e" + name + "&7."); + return; + } + + answers.remove(entry); + + JSONArray regexes = (JSONArray) entry.get("regex"); + regexes.add(regex); + entry.put("regex", regexes); + + answers.add(entry); + saveAnswers(); + + getLogger().message(sender, "Added the Regex &e" + regex + "&7."); + } + + @Command(hook = "abot_edit_regex_remove") + public void editRegexRemove(CommandSender sender, String name, String regex) { + JSONObject entry = getAnswer(name); + + if (entry == null) { + getLogger().message(sender, "There are no answer with the name &e" + name + "&7."); + return; + } + + answers.remove(entry); + + JSONArray regexes = (JSONArray) entry.get(regex); + + if (!regexes.remove(regex)) + getLogger().message(sender, "The regex,&e" + regex + "&7, is not associated with that answer."); + + else { + entry.put("regex", regexes); + answers.add(entry); + saveAnswers(); + + getLogger().message(sender, "Removed the Regex &e" + regex + "&7."); + } + } + + public JSONObject getAnswer(String name) { + for (Object rawEntry : answers) { + JSONObject entry = (JSONObject) rawEntry; + if (((String)entry.get("name")).equals(name)) + return entry; + } + return null; + } + + public boolean exists(String name) { + for (Object rawEntry : answers) { + JSONObject entry = (JSONObject) rawEntry; + if (((String)entry.get("name")).equals(name)) + return true; + } + return false; + } + + public boolean loadAnswers(CommandSender sender) { + + try { + JSONObject json = JsonManager.getObject(answerFile); + + if (json == null) { + answers = new JSONArray(); + getLogger().message(sender, "Couldn't find Abot's Answers File, creating one."); + saveAnswers(); + } + else if (!json.get("version").toString().equals("2")) { + getLogger().message(sender, true, "abot.json is not the correct version. Aborting!"); + return false; + } + + answers = (JSONArray) json.get("data"); + + } + catch (ClassCastException e) { + answers = JsonManager.getArray(answerFile); + getLogger().message(sender, "Converting abot.json from version 1 to 2."); + saveAnswers(); + } + + + getLogger().message(sender, "Loaded the abot.json file!"); return true; } -} + + public void saveAnswers() { + JSONObject json = new JSONObject(); + json.put("version", 2); + json.put("data", answers); + + JsonManager.save(json, answerFile); + } +} \ No newline at end of file -- cgit v1.2.3