From f00160714a4350204c522f5bd5bd6e61585825ad Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Sat, 13 Apr 2019 23:54:21 -0700 Subject: [PATCH 1/8] + Added localization support for commands --- locCommands.config | 38 ++++++ src/core/CommandManager.java | 13 +- src/core/LocBase.java | 190 +++++++++++++++++++++++++++++ src/core/LocCommands.java | 37 ++++++ src/core/Localizer.java | 164 +++---------------------- src/core/ObjectBuilderFactory.java | 70 +++++------ src/main/Main.java | 8 +- src/utils/FileUtils.java | 10 +- 8 files changed, 340 insertions(+), 190 deletions(-) create mode 100644 locCommands.config create mode 100644 src/core/LocBase.java create mode 100644 src/core/LocCommands.java diff --git a/locCommands.config b/locCommands.config new file mode 100644 index 0000000..4266161 --- /dev/null +++ b/locCommands.config @@ -0,0 +1,38 @@ +[ObjectBuilderFactory] +indicator= +boop=bap, spaghetti, turboyeet +tony, stark, dontfeelgood, dontfeelsogood= +yeet= +role= +ping= +rating= +roll= +blur= +choose= +poll= +rpstart= +bet= +perish, thenperish= +teey= +stats= +beans= +eightball, 8ball= +vote= +results= +wolfram= +map= +info, about= +givebeans= +c++, g++, cplus, cpp= +work= +showpoll= +rpend= +rpg= +tweet= +java, jdoodle= +help= +buildHelp= +invite= +shutdown= + + diff --git a/src/core/CommandManager.java b/src/core/CommandManager.java index e3e8970..53a5f5a 100644 --- a/src/core/CommandManager.java +++ b/src/core/CommandManager.java @@ -29,9 +29,16 @@ public class CommandManager // Allows the command manager to keep track of a command. public void Register(String key, Command command) - { + { if(key == null) - return; + return; + + if(key.contains(",")) + { + String[] keys = key.split(","); + Register(keys, command); + return; + } key = key.toLowerCase(); command.registeredNames.add(key); @@ -51,7 +58,7 @@ public class CommandManager public void Register(String[] keys, Command command) { for(int i = 0; i < keys.length; ++i) - Register(keys[i], command); + Register(keys[i].trim(), command); } // Calls the command but on a whole new thread! diff --git a/src/core/LocBase.java b/src/core/LocBase.java new file mode 100644 index 0000000..6fdcd49 --- /dev/null +++ b/src/core/LocBase.java @@ -0,0 +1,190 @@ +package core; + +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import dataStructures.SectionedKeyValueStore; +import utils.FileUtils; +import utils.GlobalLog; +import utils.LogFilter; + +// A quick-and-dirty localization tool that scrapes the project for calls to itself, then +// generates/updates a file externally with all the stub values as keys that are localized. +public abstract class LocBase +{ + // Pre-defined values + public static final String KittySourceDirectory = "./src"; + + // Filename + public final String filename; // Example: "localization.config"; + public final String functionName; // Example: "Localizer.Stub"; + + // Local translation storage + private SectionedKeyValueStore stringStore; + + // Logging + private void Log(String str) { GlobalLog.Log(LogFilter.Strings, str); } + private void Warn(String str) { GlobalLog.Warn(LogFilter.Strings, str); } + private void Error(String str) { GlobalLog.Error(LogFilter.Strings, str); } + + // Ok... so this is an array because if it's not an array, the parser will parse the string + public LocBase(String filename, String functionName) + { + this.filename = filename; + this.functionName = functionName; + } + + // Structure used for holding a pair of strings and any other info we need + // about localized information that is being looked up. + private class LocInfo + { + public String file; + public String phrase; + + public LocInfo(String f, String p) + { + this.file = f; + this.phrase = p; + } + } + + // Do processing on each path in the scraped directory here, assuming it's .java + public void StripForContents(Path path, ArrayList strings) + { + String filename = path.getFileName().toString(); + if(filename.contains(".java")) + { + String contents = FileUtils.ReadContent(path); + String[] split = contents.split(functionName); + + // Identify all localizer function calls + for(int i = 1; i < split.length; ++i) + { + int loc = split[i].indexOf(")"); + String noWhitespace = split[i].replaceAll("\\s+",""); + + if(loc != -1) + { + if(noWhitespace.charAt(noWhitespace.indexOf(")") - 1) == '"' && split[i].charAt(loc - 2) != '\\') + { + // At this point, we find the first ), then verify there's a ") behind it, and that + // the " is not an escaped character. + try + { + String toLocalize = split[i].substring(2, loc - 1); + + strings.add(new LocInfo(filename.substring(0, filename.lastIndexOf('.')), toLocalize)); + + Log("Found lookup call in " + path + ": " + toLocalize); + } + catch(IndexOutOfBoundsException e) + { + Warn("Found phrase but couldn't parse in file " + path); + } + } + } + } + } + } + + // Nothing for now, but in the future will return a parsed and localized version of + // the string in question if one can be found. If the localized string is empty, + // returns a the key instead which is the default phrase. + public String GetKey(String input) + { + if(stringStore == null) + return input; + + String value = stringStore.GetKey(input); + if(value == null || value.trim().length() < 1) + return input; + + return value; + } + + // Reads a file to string, adapted from https://stackoverflow.com/a/326440/5383198 + private String ReadFileAsString(String path, Charset encoding) + { + try + { + byte[] encoded = Files.readAllBytes(Paths.get(path)); + return new String(encoded, encoding); + } + catch (IOException e) + { + Warn("No file found to read from!"); + } + + return null; + } + + // Update localization from the disk on file. Creates the file if it doesn't exist. + // This file is internally formatted as an ini file. + public void UpdateLocFromDisk() + { + Log("Attempting to read localization file: " + filename); + + try + { + String fileContents = ReadFileAsString(filename, Charset.defaultCharset()); + + if(fileContents == null) + { + File file = new File(filename); + file.createNewFile(); + } + + stringStore = new SectionedKeyValueStore(fileContents); + } + catch(IOException e) + { + Error("IO exception during localization file read"); + } + } + + // Rewrites out at the specified filename with existing stubs. + // This preserves existing localized phrases. + public void SaveLocToDisk() + { + Log("Attempting to write updated localization file"); + + try + { + PrintWriter pw = new PrintWriter(filename); + pw.println(stringStore.toString()); + pw.close(); + } + catch(IOException e) + { + Error("IO exception during localization file write"); + } + } + + private void TryStripSpecified(Path path, ArrayList toFill) + { + try + { + StripForContents(path, toFill); + } + catch(Exception e) + { + Error("issue with file: " + path.toString()); + } + } + + // Scrape the project and generate all the possible localizeable phrases. + // This stubs out phrases to be localized. + public void ScrapeAll() + { + ArrayList localizeList = new ArrayList(); + FileUtils.AcquireAllFiles(KittySourceDirectory).forEach((path) -> TryStripSpecified(path, localizeList)); + + for(LocInfo toStub : localizeList) + stringStore.AddKeyValue(toStub.file, toStub.phrase, toStub.phrase); + } +} diff --git a/src/core/LocCommands.java b/src/core/LocCommands.java new file mode 100644 index 0000000..d01ff7b --- /dev/null +++ b/src/core/LocCommands.java @@ -0,0 +1,37 @@ +package core; + +import utils.GlobalLog; +import utils.LogFilter; + +public class LocCommands extends LocBase +{ + public static final String fileName = "locCommands.config"; + public static final String function = "LocCommands.Stub"; + + private static LocCommands instance; + + public LocCommands() + { + super(fileName, function); + + GlobalLog.Log(LogFilter.Core, "Initializing " + this.getClass().getSimpleName()); + + if(instance == null) + { + instance = this; + + UpdateLocFromDisk(); + ScrapeAll(); + SaveLocToDisk(); + } + else + { + GlobalLog.Error(LogFilter.Core, "You can't have two of the following: " + this.getClass().getSimpleName()); + } + } + + public static String Stub(String toStub) + { + return instance.GetKey(toStub); + } +} diff --git a/src/core/Localizer.java b/src/core/Localizer.java index 9487b2e..ba8e536 100644 --- a/src/core/Localizer.java +++ b/src/core/Localizer.java @@ -1,170 +1,40 @@ package core; -import java.io.File; -import java.io.IOException; -import java.io.PrintWriter; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import dataStructures.SectionedKeyValueStore; -import utils.FileUtils; import utils.GlobalLog; import utils.LogFilter; // A quick-and-dirty localization tool that scrapes the project for calls to itself, then // generates/updates a file externally (phrases.config) with all the stub values as keys that // can then be localized. -public class Localizer +public class Localizer extends LocBase { - // Filename - public final static String filename = "localization.config"; - public final static String functionName = "Localizer.Stub"; + public static final String fileName = "localization.config"; + public static final String function = "Localizer.Stub"; - // Local translation storage - private static SectionedKeyValueStore stringStore; + private static Localizer instance; - // Logging - private static void Log(String str) { GlobalLog.Log(LogFilter.Strings, str); } - private static void Warn(String str) { GlobalLog.Warn(LogFilter.Strings, str); } - private static void Error(String str) { GlobalLog.Error(LogFilter.Strings, str); } - - - // Structure used for holding a pair of strings and any other info we need - // about localized information that is being looked up. - private static class LocInfo + public Localizer() { - public String file; - public String phrase; + super(fileName, function); - public LocInfo(String f, String p) + GlobalLog.Log(LogFilter.Core, "Initializing " + this.getClass().getSimpleName()); + + if(instance == null) { - this.file = f; - this.phrase = p; - } - } - - // Do processing on each path in the scraped directory here, assuming it's .java - public static void StripForContents(Path path, ArrayList strings) - { - String filename = path.getFileName().toString(); - if(filename.contains(".java")) - { - String contents = FileUtils.ReadContent(path); - String[] split = contents.split(functionName); + instance = this; - // Identify all localizer function calls - for(int i = 1; i < split.length; ++i) - { - int loc = split[i].indexOf(")"); - - if(loc != -1) - { - if(split[i].charAt(loc - 1) == '"' && split[i].charAt(loc - 2) != '\\') - { - // At this point, we find the first ), then verify there's a ") behind it, and that - // the " is not an escaped character. - try - { - String toLocalize = split[i].substring(2, loc - 1); - - strings.add(new LocInfo(filename.substring(0, filename.lastIndexOf('.')), toLocalize)); - - Log("Found stubbed phrase in " + path + " : " + toLocalize); - } - catch(IndexOutOfBoundsException e) - { - Warn("Found phrase but couldn't parse in file " + path); - } - } - } - } + UpdateLocFromDisk(); + ScrapeAll(); + SaveLocToDisk(); } - } - - // Nothing for now, but in the future will return a parsed and localized version of - // the string in question if one can be found. If the localized string is empty, - // returns a the key instead which is the default phrase. - public static String Stub(String input) - { - if(stringStore == null) - return input; - - String value = stringStore.GetKey(input); - if(value == null || value.trim().length() < 1) - return input; - - return value; - } - - // Reads a file to string, adapted from https://stackoverflow.com/a/326440/5383198 - static String ReadFileAsString(String path, Charset encoding) - { - try + else { - byte[] encoded = Files.readAllBytes(Paths.get(path)); - return new String(encoded, encoding); - } - catch (IOException e) - { - Warn("No file found to read from!"); - } - - return null; - } - - // Update localization from the disk on file. Creates the file if it doesn't exist. - // This file is internally formatted as an ini file. - public static void UpdateLocFromDisk() - { - Log("Attempting to read localization file"); - - try - { - String fileContents = ReadFileAsString(filename, Charset.defaultCharset()); - System.out.println("File contents: " + fileContents); - - if(fileContents == null) - { - File file = new File(filename); - file.createNewFile(); - } - - stringStore = new SectionedKeyValueStore(fileContents); - } - catch(IOException e) - { - Error("IO exception during localization file read"); - } - } - - // Rewrites out at the specified filename with existing stubs. - // This preserves existing localized phrases. - public static void SaveLocToDisk() - { - Log("Attempting to write updated localization file"); - - try - { - PrintWriter pw = new PrintWriter(filename); - pw.println(stringStore.toString()); - pw.close(); - } - catch(IOException e) - { - Error("IO exception during localization file write"); + GlobalLog.Error(LogFilter.Core, "You can't have two of the following: " + this.getClass().getSimpleName()); } } - // Scrape the project and generate all the possible localizeable phrases. - // This stubs out phrases to be localized. - public static void ScrapeAll() + public static String Stub(String toStub) { - ArrayList localizeList = new ArrayList(); - FileUtils.AcquireAllFiles(".\\src").forEach((path) -> StripForContents(path, localizeList)); - - for(LocInfo toStub : localizeList) - stringStore.AddKeyValue(toStub.file, toStub.phrase, toStub.phrase); + return instance.GetKey(toStub); } } \ No newline at end of file diff --git a/src/core/ObjectBuilderFactory.java b/src/core/ObjectBuilderFactory.java index e568f71..89c285c 100644 --- a/src/core/ObjectBuilderFactory.java +++ b/src/core/ObjectBuilderFactory.java @@ -286,44 +286,44 @@ public class ObjectBuilderFactory CommandManager manager = new CommandManager(); - manager.Register("work", new CommandDoWork(KittyRole.Dev, KittyRating.Safe)); - manager.Register("shutdown", new CommandShutdown(KittyRole.Dev, KittyRating.Safe)); - manager.Register("stats", new CommandStats(KittyRole.Dev, KittyRating.Safe)); - manager.Register("invite", new CommandInvite(KittyRole.Dev, KittyRating.Safe)); - manager.Register("buildHelp", new CommandHelpBuilder(KittyRole.Dev, KittyRating.Safe)); - manager.Register("tweet", new CommandTweet(KittyRole.Dev, KittyRating.Safe)); + manager.Register(LocCommands.Stub("work"), new CommandDoWork(KittyRole.Dev, KittyRating.Safe)); + manager.Register(LocCommands.Stub("shutdown"), new CommandShutdown(KittyRole.Dev, KittyRating.Safe)); + manager.Register(LocCommands.Stub("stats"), new CommandStats(KittyRole.Dev, KittyRating.Safe)); + manager.Register(LocCommands.Stub("invite"), new CommandInvite(KittyRole.Dev, KittyRating.Safe)); + manager.Register(LocCommands.Stub("buildHelp"), new CommandHelpBuilder(KittyRole.Dev, KittyRating.Safe)); + manager.Register(LocCommands.Stub("tweet"), new CommandTweet(KittyRole.Dev, KittyRating.Safe)); - manager.Register("rating", new CommandRating(KittyRole.Admin, KittyRating.Safe)); - manager.Register("indicator", new CommandChangeIndicator(KittyRole.Admin, KittyRating.Safe)); + manager.Register(LocCommands.Stub("rating"), new CommandRating(KittyRole.Admin, KittyRating.Safe)); + manager.Register(LocCommands.Stub("indicator"), new CommandChangeIndicator(KittyRole.Admin, KittyRating.Safe)); - manager.Register("poll", new CommandPollManage(KittyRole.Mod, KittyRating.Safe)); - manager.Register("givebeans", new CommandGiveBeans(KittyRole.Mod, KittyRating.Safe)); - manager.Register("rpg", new CommandRPG(KittyRole.Mod, KittyRating.Safe)); + manager.Register(LocCommands.Stub("poll"), new CommandPollManage(KittyRole.Mod, KittyRating.Safe)); + manager.Register(LocCommands.Stub("givebeans"), new CommandGiveBeans(KittyRole.Mod, KittyRating.Safe)); + manager.Register(LocCommands.Stub("rpg"), new CommandRPG(KittyRole.Mod, KittyRating.Safe)); - manager.Register("teey", new CommandTeey(KittyRole.General, KittyRating.Safe)); - manager.Register(new String[]{"perish", "thenperish"}, new CommandPerish(KittyRole.General, KittyRating.Safe)); - manager.Register("yeet", new CommandYeet(KittyRole.General, KittyRating.Safe)); - manager.Register("ping", new CommandPing(KittyRole.General, KittyRating.Safe)); - manager.Register("boop", new CommandBoop(KittyRole.General, KittyRating.Safe)); - manager.Register("roll", new CommandRoll(KittyRole.General, KittyRating.Safe)); - manager.Register("choose", new CommandChoose(KittyRole.General, KittyRating.Safe)); - manager.Register("help", new CommandHelp(KittyRole.General, KittyRating.Safe)); - manager.Register(new String[] {"info", "about"}, new CommandInfo(KittyRole.General, KittyRating.Safe)); - manager.Register("vote", new CommandPollVote(KittyRole.General, KittyRating.Safe)); - manager.Register("results", new CommandPollResults(KittyRole.General, KittyRating.Safe)); - manager.Register("showpoll", new CommandPollShow(KittyRole.General, KittyRating.Safe)); - manager.Register("wolfram", new CommandWolfram(KittyRole.General, KittyRating.Safe)); - manager.Register(new String[] {"c++", "g++", "cplus","cpp"}, new CommandColiru(KittyRole.General, KittyRating.Safe)); - manager.Register(new String[] {"java", "jdoodle" }, new CommandJDoodle(KittyRole.General, KittyRating.Safe)); - manager.Register("beans", new CommandBeansShow(KittyRole.General, KittyRating.Safe)); - manager.Register("role", new CommandRole(KittyRole.General, KittyRating.Safe)); - manager.Register("bet", new CommandBetBeans(KittyRole.General, KittyRating.Safe)); - manager.Register("map", new CommandMap(KittyRole.General, KittyRating.Safe)); - manager.Register("rpstart", new CommandRPStart(KittyRole.General, KittyRating.Safe)); - manager.Register("rpend", new CommandRPEnd(KittyRole.General, KittyRating.Safe)); - manager.Register(new String[] {"tony", "stark", "dontfeelgood", "dontfeelsogood"}, new CommandStark(KittyRole.General, KittyRating.Safe)); - manager.Register("blur", new CommandBlurry(KittyRole.General, KittyRating.Safe)); - manager.Register(new String [] {"eightball", "8ball"}, new CommandEightBall(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("teey"), new CommandTeey(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("perish, thenperish"), new CommandPerish(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("yeet"), new CommandYeet(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("ping"), new CommandPing(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("boop"), new CommandBoop(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("roll"), new CommandRoll(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("choose"), new CommandChoose(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("help"), new CommandHelp(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("info, about"), new CommandInfo(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("vote"), new CommandPollVote(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("results"), new CommandPollResults(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("showpoll"), new CommandPollShow(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("wolfram"), new CommandWolfram(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("c++, g++, cplus, cpp"), new CommandColiru(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("java, jdoodle"), new CommandJDoodle(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("beans"), new CommandBeansShow(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("role"), new CommandRole(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("bet"), new CommandBetBeans(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("map"), new CommandMap(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("rpstart"), new CommandRPStart(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("rpend"), new CommandRPEnd(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("tony, stark, dontfeelgood, dontfeelsogood"), new CommandStark(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("blur"), new CommandBlurry(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("eightball, 8ball"), new CommandEightBall(KittyRole.General, KittyRating.Safe)); return manager; } diff --git a/src/main/Main.java b/src/main/Main.java index ff780a7..653667c 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -29,14 +29,16 @@ public class Main extends ListenerAdapter private static DatabaseManager databaseManager; private static Stats stats; private static RPManager rpManager; + private static Localizer locStrings; + private static LocCommands locCommands; // Main test location public static void main(String[] args) throws InterruptedException, LoginException, Exception { // Localizer startup - Potentially integrate with the factory. Needs to happen first tho. - Localizer.UpdateLocFromDisk(); - Localizer.ScrapeAll(); - Localizer.SaveLocToDisk(); + locStrings = new Localizer(); + locCommands = new LocCommands(); + // Factory startup databaseManager = ObjectBuilderFactory.ConstructDatabaseManager(); diff --git a/src/utils/FileUtils.java b/src/utils/FileUtils.java index 4d3ef48..ba70d6a 100644 --- a/src/utils/FileUtils.java +++ b/src/utils/FileUtils.java @@ -1,5 +1,6 @@ package utils; +import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -24,7 +25,7 @@ public class FileUtils } catch (IOException e) { - e.printStackTrace(); + GlobalLog.Error(LogFilter.Util, e.getMessage()); } return contentBuilder.toString(); @@ -35,13 +36,18 @@ public class FileUtils { ArrayList items = new ArrayList(); + File tmpDir = new File(startingDir); + if(!tmpDir.exists()) + return new ArrayList(); + + try { Files.find(Paths.get(startingDir), 999, (path, attributes) -> attributes.isRegularFile()).forEach(items::add); } catch (IOException e) { - e.printStackTrace(); + GlobalLog.Error(LogFilter.Util, e.getMessage()); } return items; From 841cc51ed117056c43b0d731882ae7a18e6c4441 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Sun, 14 Apr 2019 00:29:31 -0700 Subject: [PATCH 2/8] = Updated initialization of ObjectBuilderFactory to include localizers --- src/core/CommandEnabler.java | 17 ++++++ src/core/LocBase.java | 6 +-- src/core/LocCommands.java | 12 +++++ src/core/ObjectBuilderFactory.java | 27 +++++++--- ...eyValueStore.java => TaggedPairStore.java} | 52 +++++++++---------- src/main/Main.java | 12 +---- 6 files changed, 80 insertions(+), 46 deletions(-) create mode 100644 src/core/CommandEnabler.java rename src/dataStructures/{SectionedKeyValueStore.java => TaggedPairStore.java} (78%) diff --git a/src/core/CommandEnabler.java b/src/core/CommandEnabler.java new file mode 100644 index 0000000..174a5d1 --- /dev/null +++ b/src/core/CommandEnabler.java @@ -0,0 +1,17 @@ +package core; + +import java.util.HashMap; + +public class CommandEnabler +{ + // Config/const variables + public static final String filename = "commands.config"; + + // Local variables + private HashMap enabledMap; + + public CommandEnabler() + { + enabledMap = new HashMap<>(); + } +} diff --git a/src/core/LocBase.java b/src/core/LocBase.java index 6fdcd49..8106779 100644 --- a/src/core/LocBase.java +++ b/src/core/LocBase.java @@ -8,7 +8,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; -import dataStructures.SectionedKeyValueStore; +import dataStructures.TaggedPairStore; import utils.FileUtils; import utils.GlobalLog; import utils.LogFilter; @@ -25,7 +25,7 @@ public abstract class LocBase public final String functionName; // Example: "Localizer.Stub"; // Local translation storage - private SectionedKeyValueStore stringStore; + protected TaggedPairStore stringStore; // Logging private void Log(String str) { GlobalLog.Log(LogFilter.Strings, str); } @@ -139,7 +139,7 @@ public abstract class LocBase file.createNewFile(); } - stringStore = new SectionedKeyValueStore(fileContents); + stringStore = new TaggedPairStore(fileContents); } catch(IOException e) { diff --git a/src/core/LocCommands.java b/src/core/LocCommands.java index d01ff7b..42fb5ac 100644 --- a/src/core/LocCommands.java +++ b/src/core/LocCommands.java @@ -1,8 +1,12 @@ package core; +import java.util.ArrayList; import utils.GlobalLog; import utils.LogFilter; +import dataStructures.Pair; +// Performs the same localization for the strings associated with command names as +// is performed with general strings in the application public class LocCommands extends LocBase { public static final String fileName = "locCommands.config"; @@ -34,4 +38,12 @@ public class LocCommands extends LocBase { return instance.GetKey(toStub); } + + // Gets all of the un-translated defaults in the commands list. + public static ArrayList GetUnlocalizedCommands() + { + ArrayList raw = new ArrayList<>(); + instance.stringStore.ForEach((pair) -> raw.add((String)((Pair)pair).First )); + return raw; + } } diff --git a/src/core/ObjectBuilderFactory.java b/src/core/ObjectBuilderFactory.java index 89c285c..a07be59 100644 --- a/src/core/ObjectBuilderFactory.java +++ b/src/core/ObjectBuilderFactory.java @@ -13,7 +13,7 @@ import utils.LogFilter; // NOTE(wisp): Isolated factory to assist with storage and caching if needed. // This also minimizes the number of places JDA interacts with our codebase. // As it stands, if the object name begins with Kitty, it's constructed here. -// TODO: Make all methods ID based instead of event based +// TODO: Make all methods ID based instead of event based public class ObjectBuilderFactory { // Key: guild string id, Value: guild information @@ -34,9 +34,17 @@ public class ObjectBuilderFactory // RPManger for tracking RP system private static RPManager rpManager; - // Lazy initialization style for + // Localization classes - these are singletons, but should be initialized before almost all other + // things so their inclusion in the factory is to ensure they're started at the correct time. + @SuppressWarnings("unused") private static Localizer locStrings; + @SuppressWarnings("unused") private static LocCommands locCommands; + + // Lazy initialization multithreaded mutex stuff to prevent explosions. + // TODO: Investigate using 'synchronized' instead potentially private static boolean hasInitialized; private static Semaphore initMutex = new Semaphore(1); + + // This is it, this is how the lazy init starts! private static void LazyInit() { if(hasInitialized) @@ -47,26 +55,31 @@ public class ObjectBuilderFactory initMutex.acquire(); try { - // Initialization here. This is where we could read from something external. + // structure initialization + // Construct necessary data structures. guildCache = new HashMap(); userCache = new HashMap(); channelCache = new HashMap(); database = null; stats = null; + + // Start by reading from things that are external. Because + // we require these things to be resolved before the rest of the application, + // we place them here. + locStrings = new Localizer(); + locCommands = new LocCommands(); } finally { initMutex.release(); + hasInitialized = true; } } catch(InterruptedException ie) { GlobalLog.Error(LogFilter.Core, "Issue during object builder lazy initialization." - + " The factory was not initialized, " - + "and kitty will not be able to continue functionally."); + + " The factory was not initialized, and kitty will not be able to continue functionally."); } - - hasInitialized = true; } // Explicitly locks: guildCache diff --git a/src/dataStructures/SectionedKeyValueStore.java b/src/dataStructures/TaggedPairStore.java similarity index 78% rename from src/dataStructures/SectionedKeyValueStore.java rename to src/dataStructures/TaggedPairStore.java index 058ed3c..25b6a87 100644 --- a/src/dataStructures/SectionedKeyValueStore.java +++ b/src/dataStructures/TaggedPairStore.java @@ -18,25 +18,25 @@ import java.util.function.Consumer; // Note that the sections are NOT designed to allow for duplicate keys across them. // This is a restriction of the structure, but can be changed later potentially. // The only value not allowed in a key or value is the KeyValueSplit. -public class SectionedKeyValueStore +public class TaggedPairStore { // Variables public final char SectionStart = '['; public final char SectionEnd = ']'; - public final char KeyValueLineSeparator = '\n'; - public final String KeyValueSplit = "="; + public final char PairLineSeparator = '\n'; + public final String PairSplit = "="; // [Key: SectionName, [Key: KeyString, Value: ValueString]] - private HashMap> sectionKeyValue; + private HashMap> taggedPairs; // [Key: KeyString, Value: ValueString]] - private HashMap keyValue; + private HashMap allPairs; // String constructor that parses the input string into the object - public SectionedKeyValueStore(String input) + public TaggedPairStore(String input) { - sectionKeyValue = new HashMap>(); - keyValue = new HashMap(); + taggedPairs = new HashMap>(); + allPairs = new HashMap(); Parse(input); } @@ -44,7 +44,7 @@ public class SectionedKeyValueStore @SuppressWarnings({"rawtypes", "unchecked"}) public void ForEach(BiConsumer> action) { - Iterator it = sectionKeyValue.entrySet().iterator(); + Iterator it = taggedPairs.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = (Map.Entry)it.next(); @@ -62,7 +62,7 @@ public class SectionedKeyValueStore @SuppressWarnings({"rawtypes"}) public void ForEach(Consumer> action) { - Iterator it = keyValue.entrySet().iterator(); + Iterator it = allPairs.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = (Map.Entry)it.next(); @@ -79,11 +79,11 @@ public class SectionedKeyValueStore String out = ""; // Iterates over the sections and - Iterator it = sectionKeyValue.entrySet().iterator(); + Iterator it = taggedPairs.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = (Map.Entry)it.next(); - out += ("" + SectionStart + pair.getKey() + SectionEnd + KeyValueLineSeparator); + out += ("" + SectionStart + pair.getKey() + SectionEnd + PairLineSeparator); Iterator internal = ((HashMap)pair.getValue()).entrySet().iterator(); while(internal.hasNext()) @@ -93,12 +93,12 @@ public class SectionedKeyValueStore String value = (String)internalPair.getValue(); if(key == value) - out += (key + KeyValueSplit) + KeyValueLineSeparator; + out += (key + PairSplit) + PairLineSeparator; else - out += (key + KeyValueSplit + value) + KeyValueLineSeparator; + out += (key + PairSplit + value) + PairLineSeparator; } - out += KeyValueLineSeparator; + out += PairLineSeparator; } return out; @@ -131,21 +131,21 @@ public class SectionedKeyValueStore // Parse out the pairs within the section, split them all out. String unparsedPairs = section.substring(pos + 1); - String[] pairs = unparsedPairs.split("\\" + KeyValueLineSeparator); + String[] pairs = unparsedPairs.split("\\" + PairLineSeparator); // Parse out valid key-value pairs, and store them in the specified section. // At this point, we can be guarenteed that sectionName is in the Hashmap. for(int pair = 0; pair < pairs.length; ++pair) { String line = pairs[pair]; - int splitPos = line.indexOf(KeyValueSplit); + int splitPos = line.indexOf(PairSplit); if(splitPos < 0) continue; String key = line.substring(0, splitPos); - String value = line.substring(splitPos + KeyValueSplit.length()); - sectionKeyValue.get(sectionName).putIfAbsent(key, value); - keyValue.putIfAbsent(key, value); + String value = line.substring(splitPos + PairSplit.length()); + taggedPairs.get(sectionName).putIfAbsent(key, value); + allPairs.putIfAbsent(key, value); } } } @@ -165,28 +165,28 @@ public class SectionedKeyValueStore public void AddKeyValue(String sectionName, String key, String value) { AddSection(sectionName); - sectionKeyValue.get(sectionName).putIfAbsent(key, value); - keyValue.putIfAbsent(key, value); + taggedPairs.get(sectionName).putIfAbsent(key, value); + allPairs.putIfAbsent(key, value); } // Adds a given section to the hashmap if it's not already present public void AddSection(String sectionName) { - sectionKeyValue.putIfAbsent(sectionName, new HashMap()); + taggedPairs.putIfAbsent(sectionName, new HashMap()); } // Returns a HashMap of Keys to Values for a given section @SuppressWarnings("unchecked") public HashMap GetSection(String sectionName) { - return (HashMap) sectionKeyValue.get(sectionName).clone(); + return (HashMap) taggedPairs.get(sectionName).clone(); } // Look up a global key public String GetKey(String key) { - if(keyValue.containsKey(key)) - return keyValue.get(key); + if(allPairs.containsKey(key)) + return allPairs.get(key); return null; } diff --git a/src/main/Main.java b/src/main/Main.java index 653667c..a30359a 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -13,7 +13,6 @@ import net.dv8tion.jda.core.entities.*; import net.dv8tion.jda.core.events.message.guild.*; import net.dv8tion.jda.core.hooks.ListenerAdapter; import offline.*; -import core.Localizer; import utils.GlobalLog; import net.dv8tion.jda.core.*; @@ -29,18 +28,11 @@ public class Main extends ListenerAdapter private static DatabaseManager databaseManager; private static Stats stats; private static RPManager rpManager; - private static Localizer locStrings; - private static LocCommands locCommands; - + // Main test location public static void main(String[] args) throws InterruptedException, LoginException, Exception { - // Localizer startup - Potentially integrate with the factory. Needs to happen first tho. - locStrings = new Localizer(); - locCommands = new LocCommands(); - - - // Factory startup + // Factory startup. The ordering is intentional. databaseManager = ObjectBuilderFactory.ConstructDatabaseManager(); commandManager = ObjectBuilderFactory.ConstructCommandManager(); rpManager = ObjectBuilderFactory.ConstructRPManager(); From 57aa8e204cc4d923a6bd6da71acf4d21f859a934 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Sun, 14 Apr 2019 00:43:03 -0700 Subject: [PATCH 3/8] = Correct locStrings --- localization.config => locStrings.config | 258 ++++++++++------------- 1 file changed, 110 insertions(+), 148 deletions(-) rename localization.config => locStrings.config (65%) diff --git a/localization.config b/locStrings.config similarity index 65% rename from localization.config rename to locStrings.config index f94fc44..4a616c7 100644 --- a/localization.config +++ b/locStrings.config @@ -1,216 +1,178 @@ [CommandPollManage] -PollManageInfo='start' will start a new poll with the query of the line you put after, 'choice' will add a choice to the poll, 'stop' will end the poll -PollMangeInfo= +PollManageInfo='start' will start a new poll with the query of the line you put after, 'choice' will add a choice to the poll, 'stop' will end the poll [CommandBeansShow] -BeansShowDisplay=You have %s beans! -BeansShowInfo=Displays how many beans you have +BeansShowInfo=Displays how many beans you have +BeansShowDisplay=You have %s beans! [CommandHelp] -HelpInfo=Lets you look up specific commands, or get a link to a list of all commands. -HelpDisplay=You can get help with a specific command by typing `!help command`!\nGeneral Commands: `boop, roll, choose, help, info, vote, results, showpoll, wolfram, cplus, java, beans, role, bet, yeet` +HelpInfo=Lets you look up specific commands, or get a link to a list of all commands. +HelpDisplay=You can get help with a specific command by typing `!help command`!\nGeneral Commands: `boop, roll, choose, help, info, vote, results, showpoll, wolfram, cplus, java, beans, role, bet, yeet` [CommandRoll] -RollError=Didn't work ;3; -RollInfo=Based on input of xdy where x is number of dice and y is faces kitty will roll that amount of dice, display the individual rolls and total +RollError=Didn't work ;3; +RollInfo=Based on input of xdy where x is number of dice and y is faces kitty will roll that amount of dice, display the individual rolls and total [CommandStats] -StatsInfo=Displays the actively running KittyBot application information +StatsInfo=Displays the actively running KittyBot application information [CommandTweet] -TweetInfo=Kitty will tweet to her personal twitter account -TweetError=Tweet command failed! +TweetInfo=Kitty will tweet to her personal twitter account +TweetError=Tweet command failed! [CommandRole] -RoleInfo=Will show the current role you have, Admins can change others roles with input of 'role x @y' with x being blacklist, general, mod, or admin. Blacklist will not allow the user to interact with kitty anymore, general mod and admin will give the user access to those commands. -RoleStandardResponse=Your role is -RoleError=You aren't allowed to do that! You must have the KittyRole '%' or higher! -RoleChanged=Changed %s to role `%s`! -RoleNeededRole=Please enter `general`, `mod`, or `admin`! +RoleNeededRole=Please enter `general`, `mod`, or `admin`! +RoleError=You aren't allowed to do that! You must have the KittyRole '%' or higher! +RoleInfo=Will show the current role you have, Admins can change others roles with input of 'role x @y' with x being blacklist, general, mod, or admin. Blacklist will not allow the user to interact with kitty anymore, general mod and admin will give the user access to those commands. +RoleStandardResponse=Your role is +RoleChanged=Changed %s to role `%s`! [CommandColiru] -ColiruError=Please provide some c++ code to attempt to compile! -ColiruInfo=Will try to compile any c++ code you put in! Supports up to C++14 standard, uses g++. +ColiruInfo=Will try to compile any c++ code you put in! Supports up to C++14 standard, uses g++. +ColiruError=Please provide some c++ code to attempt to compile! [CommandJDoodle] -JDoodleInfo=Will compile any java code you put in! Supports Java 1.8 -JDoodleError=Please provide some java code to get it compiled! +JDoodleInfo=Will compile any java code you put in! Supports Java 1.8 +JDoodleError=Please provide some java code to get it compiled! [CommandChangeIndicator] -ChangeIndicatorInfo=Changes the command indicator to any single character. By default, it's '!'. If more than one character is provided, the first one is used! -ChangeIndicatorError=Please specify a letter or symbol to use! -ChangeIndicatorChanged=Indicator changed to `%s` +ChangeIndicatorInfo=Changes the command indicator to any single character. By default, it's '!'. If more than one character is provided, the first one is used! +ChangeIndicatorChanged=Indicator changed to `%s` +ChangeIndicatorError=Please specify a letter or symbol to use! [CommandPerish] -PerishInfo=Adds a red, 'a n g e r y' overlay to your icon or the icon of a friend you mentioned +PerishInfo=Adds a red, 'a n g e r y' overlay to your icon or the icon of a friend you mentioned [CommandStark] -StarkInfo=Snaps your icon or the icon of a friend you mentioned +StarkInfo=Snaps your icon or the icon of a friend you mentioned [CommandYeet] -YeetInfo=Yeet yourself or yeet a friend with @! +YeetInfo=Yeet yourself or yeet a friend with @! [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! -PollVoteNoPoll=There is no poll running! -PollVoteAlreadyVoted=You already voted -PollVoteNotValidVote=%s That's not a vaild vote! -PollVoteSuccess=You successfully voted for +PollVoteNoPoll=There is no poll running! +PollVoteAlreadyVoted=You already voted +PollVoteNotValidVote=%s That's not a vaild vote! +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! +PollVoteSuccess=You successfully voted for [CommandShutdown] -ShutdownInfo=Stops kitty. `-s` or `safe` as an argument attempts to sync off the database before shutdown. - -[CommandTeey] -TeeyInfo=Teey yourself back into existance, or teey a friend with @! +ShutdownInfo=Stops kitty. `-s` or `safe` as an argument attempts to sync off the database before shutdown. [CommandBetBeans] -BetBeansLowBet=Please bet with at least 50 beans! -BetBeansInfo=Allows you to bet your beans, set your amount after the command! Warning! House always wins!\nSets of 3 will get 2x, 4 will get 10x, and 5 will get 1000x -BetBeansNotValid=That's not a valid bet! -BetBeansLose=Sorry, you didn't win, try again! -BetBeansNotEnough=You don't have enough beans! -BetBeansWin=You won %s beans! +BetBeansNotValid=That's not a valid bet! +BetBeansLowBet=Please bet with at least 50 beans! +BetBeansInfo=Allows you to bet your beans, set your amount after the command! Warning! House always wins!\nSets of 3 will get 2x, 4 will get 10x, and 5 will get 1000x +BetBeansLose=Sorry, you didn't win, try again! +BetBeansNotEnough=You don't have enough beans! +BetBeansWin=You won %s beans! [CommandDoWork] -DoWorkFinished=I finished with my work! :D -DoWorkInfo=Occupies a core for a few seconds +DoWorkFinished=I finished with my work! :D +DoWorkInfo=Occupies a core for a few seconds [CommandRPStart] -RPStartInfo=Starts an rp, add people to it by mentioning them! +RPStartInfo=Starts an rp, add people to it by mentioning them! [CommandBlurry] -BlurryInfo=Blurs your icon or the icon of a friend you mentioned +BlurryInfo=Blurs your icon or the icon of a friend you mentioned [CommandPollResults] -PollResultsResponse=%s people voted for %s `%s` with `%s%` !\n -PollResultsInfo=Will show current results of a poll and percentages of votes per choice +PollResultsInfo=Will show current results of a poll and percentages of votes per choice +PollResultsResponse=%s people voted for %s `%s` with `%s%` !\n [CommandRating] -RatingInfo='0' is fully sfw (Derpi and e621 searches are disabled), '1' is filtered (kitty auto appends a sfw tag on any searches), '2' is nsfw (any search will go through). Some other words are supported for setting filter as well. -RatingWarning=Warning: NSFW may slip through, images are only based on tags on their respective sites! -RatingChanged=Kittybot content set to -RatingInvalid=Invalid content rating +RatingInfo='0' is fully sfw (Derpi and e621 searches are disabled), '1' is filtered (kitty auto appends a sfw tag on any searches), '2' is nsfw (any search will go through). Some other words are supported for setting filter as well. +RatingChanged=Kittybot content set to +RatingWarning=Warning: NSFW may slip through, images are only based on tags on their respective sites! +RatingInvalid=Invalid content rating [CommandGiveBeans] -GiveBeansNoneMentioned=You didn't mention anyone! -GiveBeansSuccess=Gave %s %s beans! -GiveBeansInvalid=That's not a valid number! -GiveBeansInfo=Gives beans to the mentioned users! +GiveBeansInvalid=That's not a valid number! +GiveBeansSuccess=Gave %s %s beans! +GiveBeansInfo=Gives beans to the mentioned users! +GiveBeansNoneMentioned=You didn't mention anyone! [CommandPollShow] -PollShowNoPoll=There is no poll running! -PollShowInfo=Will show the current poll running -PollShowPoll=The current poll is `%s`\n -PollShowChoices=And the choices are:\n +PollShowNoPoll=There is no poll running! +PollShowChoices=And the choices are:\n +PollShowInfo=Will show the current poll running +PollShowPoll=The current poll is `%s`\n [CommandHelpBuilder] -HelpBuilderInfo=Emit help for all commands as formatted HTML +HelpBuilderInfo=Emit help for all commands as formatted HTML [CommandRPEnd] -RPEndError=You can't end this RP! -RPEndInfo=Ends RP in channel and gives you a .txt file! -RPEndFileOut=Here's your file! +RPEndFileOut=Here's your file! +RPEndError=You can't end this RP! +RPEndInfo=Ends RP in channel and gives you a .txt file! [CommandRPG] -RPGInfo=Admin+ command only right now - experimental text RPG! Format is !rpg -RPGInvalid=Invalid RPG Command! +RPGInvalid=Invalid RPG Command! +RPGInfo=Admin+ command only right now - experimental text RPG! Format is !rpg [CommandBoop] -BoopPerson= -BoopInfo= - BoopMultiple=%s booped several others - %s! - BoopPerson=%s booped %s! - BoopInfo=Kitty will react with a counter - BoopStandard=Woah! %s booped me! That's %s total! -BoopStandard= -BoopMultiple= +BoopPerson=%s booped %s! +BoopInfo=Kitty will react with a counter +BoopStandard=Woah! %s booped me! That's %s total! +BoopMultiple=%s booped several others - %s! [CommandInfo] - InfoInfo=Provides author info and a link to Kitty's website -InfoResponse= - InfoResponse=I'm made by `Rin#8904` and `Reverie Wisp#3703`!\nYou can find more info about me along with a Patreon link to support us and GitHub link for filing bugs https://www.rinsnowmew.com/bot/ -InfoInfo= +InfoInfo=Provides author info and a link to Kitty's website +InfoResponse=I'm made by `Rin#8904` and `Reverie Wisp#3703`!\nYou can find more info about me along with a Patreon link to support us and GitHub link for filing bugs https://www.rinsnowmew.com/bot/ [CommandPing] - PingResponse=Pong! -PingResponse= - PingInfo=Will respond with Pong! -PingInfo= +PingResponse=Pong! +PingInfo=Will respond with Pong! [CommandChoose] -ChooseChoice= - ChooseInfo=With an input of x,y,z where x y and z are all choices, kitty will choose one - ChooseOne=I can't choose from *one* thing! - ChooseChoice=I chooooooose %s! -ChooseOne= -ChooseInfo= +ChooseInfo=With an input of x,y,z where x y and z are all choices, kitty will choose one +ChooseOne=I can't choose from *one* thing! +ChooseChoice=I chooooooose %s! [CommandEightBall] - EightBallYes9=Yes. - EightBallInfo=Answers a yes or no question! Warning: Kitty can not actually tell the future, she claims no responsibility for any lion mauling, lack of lottery wins, or felony charges. - EightBallYes10=Signs point to yes. -EightBallError= - EightBallNo1=Don't count on it. - EightBallNo2=My reply is no. - EightBallNo3=My sources say no. - EightBallNo4=Outlook not so good. - EightBallNo5=Very doubtful. -EightBallYes9= -EightBallYes4= -EightBallYes3= -EightBallYes2= -EightBallYes1= -EightBallYes8= -EightBallYes7= - EightBallError=Hmm? You'll need to ask a question! -EightBallYes6= -EightBallYes5= -EightBallMaybe1= -EightBallMaybe2= -EightBallMaybe3= -EightBallMaybe4= -EightBallMaybe5= -EightBallInfo= - EightBallMaybe2=Ask again later. -EightBallNo5= - EightBallMaybe3=Better not tell you now. - EightBallMaybe4=Cannot predict now. -EightBallNo3= - EightBallMaybe5=Concentrate and ask again. -EightBallNo4= -EightBallNo1= -EightBallNo2= - EightBallYes2=It is decidedly so. - EightBallYes1=It is certain. - EightBallYes4=Yes - definitely. - EightBallYes3=Without a doubt. - EightBallYes6=As I see it, yes. - EightBallYes5=You may rely on it. - EightBallYes8=Outlook good. - EightBallYes7=Most likely. - EightBallMaybe1=Reply hazy, try again. -EightBallYes10= +EightBallInfo=Answers a yes or no question! Warning: Kitty can not actually tell the future, she claims no responsibility for any lion mauling, lack of lottery wins, or felony charges. +EightBallError=Hmm? You'll need to ask a question! + +EightBallYes1=It is certain. +EightBallYes2=It is decidedly so. +EightBallYes3=Without a doubt. +EightBallYes4=Yes - definitely. +EightBallYes5=You may rely on it. +EightBallYes6=As I see it, yes. +EightBallYes7=Most likely. +EightBallYes8=Outlook good. +EightBallYes9=Yes. +EightBallYes10=Signs point to yes. + +EightBallMaybe1=Reply hazy, try again. +EightBallMaybe2=Ask again later. +EightBallMaybe3=Better not tell you now. +EightBallMaybe4=Cannot predict now. +EightBallMaybe5=Concentrate and ask again. + +EightBallNo1=Don't count on it. +EightBallNo2=My reply is no. +EightBallNo3=My sources say no. +EightBallNo4=Outlook not so good. +EightBallNo5=Very doubtful. [CommandInvite] -InviteInfo= - InviteInfo=Provides a direct invite link for KittyBot +InviteInfo=Provides a direct invite link for KittyBot [CommandWolfram] - WolframNoArgs=You need to provide some arguments! -WolframError= - WolframInfo=Will query wolframalpha with your question and give a full image output of the answer - WolframError=Something went wrong! -WolframInfo= -WolframNoArgs= +WolframError=Something went wrong! +WolframInfo=Will query wolframalpha with your question and give a full image output of the answer +WolframNoArgs=You need to provide some arguments! [CommandMap] -MapInfo= -MapSeed=Seed -MapInvalid=Invalid arguments provided! -MapVersion=Using mapgen v0.1 -MapWidth=Width - MapInfo=Generates a map! You can pass additional information if you want with the flags `-s -MapHeight=Height +MapInfo=Generates a map! You can pass additional information if you want with the flags `-s-w-h`. If one of the fields isn't provided, its default will be used. Note that adjusting the width and height impacts the map outcomes.\n\nDefault seed: Random,\nDefault Width: 35(max %s),\nDefault Height: 25(max %s) +MapSeed=Seed +MapInvalid=Invalid arguments provided! +MapHeight=Height +MapVersion=Using mapgen v0.1 +MapWidth=Width - +[CommandTeey] +TeeyInfo=Teey yourself back into existance, or teey a friend with @! \ No newline at end of file From e65cfb498bfc1908928af6e21200e78c00b4526f Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Sun, 14 Apr 2019 00:43:13 -0700 Subject: [PATCH 4/8] = Updated Localizer to LocStrings --- src/commands/CommandBeansShow.java | 6 +-- src/commands/CommandBetBeans.java | 14 +++--- src/commands/CommandBlurry.java | 4 +- src/commands/CommandBoop.java | 8 ++-- src/commands/CommandChangeIndicator.java | 8 ++-- src/commands/CommandChoose.java | 6 +-- src/commands/CommandColiru.java | 6 +-- src/commands/CommandDoWork.java | 4 +- src/commands/CommandEightBall.java | 46 ++++++++++---------- src/commands/CommandGiveBeans.java | 10 ++--- src/commands/CommandHelp.java | 4 +- src/commands/CommandHelpBuilder.java | 4 +- src/commands/CommandInfo.java | 6 +-- src/commands/CommandInvite.java | 4 +- src/commands/CommandJDoodle.java | 6 +-- src/commands/CommandMap.java | 14 +++--- src/commands/CommandPerish.java | 4 +- src/commands/CommandPing.java | 4 +- src/commands/CommandPollManage.java | 2 +- src/commands/CommandPollResults.java | 4 +- src/commands/CommandPollShow.java | 8 ++-- src/commands/CommandPollVote.java | 12 ++--- src/commands/CommandRPEnd.java | 8 ++-- src/commands/CommandRPG.java | 6 +-- src/commands/CommandRPStart.java | 4 +- src/commands/CommandRating.java | 10 ++--- src/commands/CommandRole.java | 12 ++--- src/commands/CommandRoll.java | 4 +- src/commands/CommandShutdown.java | 4 +- src/commands/CommandStark.java | 4 +- src/commands/CommandStats.java | 4 +- src/commands/CommandTeey.java | 4 +- src/commands/CommandTweet.java | 6 +-- src/commands/CommandWolfram.java | 8 ++-- src/commands/CommandYeet.java | 4 +- src/core/{Localizer.java => LocStrings.java} | 10 ++--- src/core/ObjectBuilderFactory.java | 4 +- 37 files changed, 138 insertions(+), 138 deletions(-) rename src/core/{Localizer.java => LocStrings.java} (77%) diff --git a/src/commands/CommandBeansShow.java b/src/commands/CommandBeansShow.java index 925d055..16d3f62 100644 --- a/src/commands/CommandBeansShow.java +++ b/src/commands/CommandBeansShow.java @@ -1,7 +1,7 @@ package commands; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.*; public class CommandBeansShow extends Command @@ -9,11 +9,11 @@ public class CommandBeansShow extends Command public CommandBeansShow(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("BeansShowInfo"); }; + public String HelpText() { return LocStrings.Stub("BeansShowInfo"); }; @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - res.Call(String.format(Localizer.Stub("BeansShowDisplay"), user.GetBeans())); + res.Call(String.format(LocStrings.Stub("BeansShowDisplay"), user.GetBeans())); } } diff --git a/src/commands/CommandBetBeans.java b/src/commands/CommandBetBeans.java index 249fe32..06df15a 100644 --- a/src/commands/CommandBetBeans.java +++ b/src/commands/CommandBetBeans.java @@ -3,7 +3,7 @@ package commands; import java.util.Random; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.*; public class CommandBetBeans extends Command @@ -11,7 +11,7 @@ public class CommandBetBeans extends Command public CommandBetBeans(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("BetBeansInfo"); } + public String HelpText() { return LocStrings.Stub("BetBeansInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -24,19 +24,19 @@ public class CommandBetBeans extends Command bet = Integer.parseInt(input.args); if(bet < 50) { - res.Call(Localizer.Stub("BetBeansLowBet")); + res.Call(LocStrings.Stub("BetBeansLowBet")); return; } } catch (NumberFormatException e) { - res.Call(Localizer.Stub("BetBeansNotValid")); + res.Call(LocStrings.Stub("BetBeansNotValid")); return; } if(user.GetBeans() < bet) { - res.Call(Localizer.Stub("BetBeansNotEnough")); + res.Call(LocStrings.Stub("BetBeansNotEnough")); return; } @@ -51,12 +51,12 @@ public class CommandBetBeans extends Command if(win == 0) { - res.Call(Localizer.Stub("BetBeansLose")); + res.Call(LocStrings.Stub("BetBeansLose")); return; } user.ChangeBeans(bet*win); - res.Call(String.format(Localizer.Stub("BetBeansWin"), "" + (bet*win))); + res.Call(String.format(LocStrings.Stub("BetBeansWin"), "" + (bet*win))); } private int getWinning(int [] slots) diff --git a/src/commands/CommandBlurry.java b/src/commands/CommandBlurry.java index 344b494..c875ff2 100644 --- a/src/commands/CommandBlurry.java +++ b/src/commands/CommandBlurry.java @@ -8,7 +8,7 @@ import java.io.IOException; import javax.imageio.ImageIO; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.*; import utils.ImageUtils; @@ -17,7 +17,7 @@ public class CommandBlurry extends Command public CommandBlurry(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("BlurryInfo"); }; + public String HelpText() { return LocStrings.Stub("BlurryInfo"); }; private static Long num = 0l; diff --git a/src/commands/CommandBoop.java b/src/commands/CommandBoop.java index c491787..ccd0a41 100644 --- a/src/commands/CommandBoop.java +++ b/src/commands/CommandBoop.java @@ -60,7 +60,7 @@ public class CommandBoop extends Command } @Override - public String HelpText() { return Localizer.Stub("BoopInfo"); } + public String HelpText() { return LocStrings.Stub("BoopInfo"); } // Called when the command is run! @Override @@ -69,14 +69,14 @@ public class CommandBoop extends Command if(input.mentions == null) { boopTracker.ApplyBoop(); - res.Call(String.format(Localizer.Stub("BoopStandard"), user.name, boopTracker.HowMany())); + res.Call(String.format(LocStrings.Stub("BoopStandard"), user.name, boopTracker.HowMany())); } else { if(input.mentions.length == 1) { boopTracker.ApplyBoop(); - res.Call(String.format(Localizer.Stub("BoopPerson"), user.name, input.mentions[0].name)); + res.Call(String.format(LocStrings.Stub("BoopPerson"), user.name, input.mentions[0].name)); return; } @@ -90,7 +90,7 @@ public class CommandBoop extends Command booped += "and " + input.mentions[i].name; } - res.Call(String.format(Localizer.Stub("BoopMultiple"), user.name, booped)); + res.Call(String.format(LocStrings.Stub("BoopMultiple"), user.name, booped)); } } } \ No newline at end of file diff --git a/src/commands/CommandChangeIndicator.java b/src/commands/CommandChangeIndicator.java index 8ef7323..babdc4d 100644 --- a/src/commands/CommandChangeIndicator.java +++ b/src/commands/CommandChangeIndicator.java @@ -1,7 +1,7 @@ package commands; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.*; public class CommandChangeIndicator extends Command @@ -9,7 +9,7 @@ public class CommandChangeIndicator extends Command public CommandChangeIndicator(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("ChangeIndicatorInfo"); } + public String HelpText() { return LocStrings.Stub("ChangeIndicatorInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -17,11 +17,11 @@ public class CommandChangeIndicator extends Command String arg = input.args.trim(); if(arg.length() == 0) { - res.Call(Localizer.Stub("ChangeIndicatorError")); + res.Call(LocStrings.Stub("ChangeIndicatorError")); return; } guild.SetCommandIndicator(arg.substring(0, 1)); - res.Call(String.format(Localizer.Stub("ChangeIndicatorChanged"), guild.GetCommandIndicator())); + res.Call(String.format(LocStrings.Stub("ChangeIndicatorChanged"), guild.GetCommandIndicator())); } } diff --git a/src/commands/CommandChoose.java b/src/commands/CommandChoose.java index 1ccd3dc..e68f783 100644 --- a/src/commands/CommandChoose.java +++ b/src/commands/CommandChoose.java @@ -14,7 +14,7 @@ public class CommandChoose extends Command public CommandChoose(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("ChooseInfo"); } + public String HelpText() { return LocStrings.Stub("ChooseInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -22,10 +22,10 @@ public class CommandChoose extends Command String [] choices = input.args.split(","); if(choices.length == 1) { - res.Call(Localizer.Stub("ChooseOne")); + res.Call(LocStrings.Stub("ChooseOne")); return; } - res.Call(String.format(Localizer.Stub("ChooseChoice"), (choices[(int) (Math.random()*choices.length)]).toString())); + res.Call(String.format(LocStrings.Stub("ChooseChoice"), (choices[(int) (Math.random()*choices.length)]).toString())); } } diff --git a/src/commands/CommandColiru.java b/src/commands/CommandColiru.java index 13726be..b2f5f8e 100644 --- a/src/commands/CommandColiru.java +++ b/src/commands/CommandColiru.java @@ -1,7 +1,7 @@ package commands; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.*; import network.NetworkColiru; @@ -12,14 +12,14 @@ public class CommandColiru extends Command public CommandColiru(KittyRole level, KittyRating rating) { super(level, rating);} @Override - public String HelpText() { return Localizer.Stub("ColiruInfo"); } + public String HelpText() { return LocStrings.Stub("ColiruInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args.trim().length() < 1) { - res.Call(Localizer.Stub("ColiruError")); + res.Call(LocStrings.Stub("ColiruError")); return; } diff --git a/src/commands/CommandDoWork.java b/src/commands/CommandDoWork.java index 450ae2e..c37f85f 100644 --- a/src/commands/CommandDoWork.java +++ b/src/commands/CommandDoWork.java @@ -15,7 +15,7 @@ public class CommandDoWork extends Command public CommandDoWork(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("DoWorkInfo"); } + public String HelpText() { return LocStrings.Stub("DoWorkInfo"); } // Called when the command is run! @Override @@ -28,6 +28,6 @@ public class CommandDoWork extends Command thispieceofshit += Math.log((double)i); } - res.Call(Localizer.Stub("DoWorkFinished")); + res.Call(LocStrings.Stub("DoWorkFinished")); } } \ No newline at end of file diff --git a/src/commands/CommandEightBall.java b/src/commands/CommandEightBall.java index 50ab191..2e90413 100644 --- a/src/commands/CommandEightBall.java +++ b/src/commands/CommandEightBall.java @@ -1,47 +1,47 @@ package commands; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.*; public class CommandEightBall extends Command { String [] answers = { - Localizer.Stub("EightBallYes1") - , Localizer.Stub("EightBallYes2") - , Localizer.Stub("EightBallYes3") - , Localizer.Stub("EightBallYes4") - , Localizer.Stub("EightBallYes5") - , Localizer.Stub("EightBallYes6") - , Localizer.Stub("EightBallYes7") - , Localizer.Stub("EightBallYes8") - , Localizer.Stub("EightBallYes9") - , Localizer.Stub("EightBallYes10") + LocStrings.Stub("EightBallYes1") + , LocStrings.Stub("EightBallYes2") + , LocStrings.Stub("EightBallYes3") + , LocStrings.Stub("EightBallYes4") + , LocStrings.Stub("EightBallYes5") + , LocStrings.Stub("EightBallYes6") + , LocStrings.Stub("EightBallYes7") + , LocStrings.Stub("EightBallYes8") + , LocStrings.Stub("EightBallYes9") + , LocStrings.Stub("EightBallYes10") - , Localizer.Stub("EightBallMaybe1") - , Localizer.Stub("EightBallMaybe2") - , Localizer.Stub("EightBallMaybe3") - , Localizer.Stub("EightBallMaybe4") - , Localizer.Stub("EightBallMaybe5") + , LocStrings.Stub("EightBallMaybe1") + , LocStrings.Stub("EightBallMaybe2") + , LocStrings.Stub("EightBallMaybe3") + , LocStrings.Stub("EightBallMaybe4") + , LocStrings.Stub("EightBallMaybe5") - , Localizer.Stub("EightBallNo1") - , Localizer.Stub("EightBallNo2") - , Localizer.Stub("EightBallNo3") - , Localizer.Stub("EightBallNo4") - , Localizer.Stub("EightBallNo5") + , LocStrings.Stub("EightBallNo1") + , LocStrings.Stub("EightBallNo2") + , LocStrings.Stub("EightBallNo3") + , LocStrings.Stub("EightBallNo4") + , LocStrings.Stub("EightBallNo5") }; public CommandEightBall(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("EightBallInfo"); } + public String HelpText() { return LocStrings.Stub("EightBallInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args.trim().length() < 1) - res.Call(Localizer.Stub("EightBallError")); + res.Call(LocStrings.Stub("EightBallError")); res.Call(answers[(int) (Math.random()*answers.length)]); } diff --git a/src/commands/CommandGiveBeans.java b/src/commands/CommandGiveBeans.java index 796bb42..a1469e9 100644 --- a/src/commands/CommandGiveBeans.java +++ b/src/commands/CommandGiveBeans.java @@ -1,7 +1,7 @@ package commands; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.*; public class CommandGiveBeans extends Command @@ -9,7 +9,7 @@ public class CommandGiveBeans extends Command public CommandGiveBeans (KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("GiveBeansInfo"); } + public String HelpText() { return LocStrings.Stub("GiveBeansInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -20,20 +20,20 @@ public class CommandGiveBeans extends Command } catch (NumberFormatException e) { - res.Call(Localizer.Stub("GiveBeansInvalid")); + res.Call(LocStrings.Stub("GiveBeansInvalid")); return; } if(input.mentions == null) { - res.Call(Localizer.Stub("GiveBeansNoneMentioned")); + res.Call(LocStrings.Stub("GiveBeansNoneMentioned")); return; } for(int i = 0; i < input.mentions.length; i++) { input.mentions[i].ChangeBeans(beans); - res.Call(String.format(Localizer.Stub("GiveBeansSuccess"), input.mentions[i].name, "" + beans)); + res.Call(String.format(LocStrings.Stub("GiveBeansSuccess"), input.mentions[i].name, "" + beans)); } } } diff --git a/src/commands/CommandHelp.java b/src/commands/CommandHelp.java index 298c246..fd5bd0f 100644 --- a/src/commands/CommandHelp.java +++ b/src/commands/CommandHelp.java @@ -15,7 +15,7 @@ public class CommandHelp extends Command public CommandHelp(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("HelpInfo"); } + public String HelpText() { return LocStrings.Stub("HelpInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -24,7 +24,7 @@ public class CommandHelp extends Command if(help == null) { - help = Localizer.Stub("HelpDisplay"); + help = LocStrings.Stub("HelpDisplay"); } else { diff --git a/src/commands/CommandHelpBuilder.java b/src/commands/CommandHelpBuilder.java index f915fb0..89ef69b 100644 --- a/src/commands/CommandHelpBuilder.java +++ b/src/commands/CommandHelpBuilder.java @@ -7,7 +7,7 @@ import java.util.ArrayList; import java.util.HashMap; import core.Command; -import core.Localizer; +import core.LocStrings; import core.Stats; import dataStructures.KittyChannel; import dataStructures.KittyGuild; @@ -26,7 +26,7 @@ public class CommandHelpBuilder extends Command { } @Override - public String HelpText() { return Localizer.Stub("HelpBuilderInfo"); } + public String HelpText() { return LocStrings.Stub("HelpBuilderInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) diff --git a/src/commands/CommandInfo.java b/src/commands/CommandInfo.java index 39215bc..7fee7bf 100644 --- a/src/commands/CommandInfo.java +++ b/src/commands/CommandInfo.java @@ -1,7 +1,7 @@ package commands; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.KittyChannel; import dataStructures.KittyGuild; import dataStructures.KittyRating; @@ -15,11 +15,11 @@ public class CommandInfo extends Command public CommandInfo(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("InfoInfo"); } + public String HelpText() { return LocStrings.Stub("InfoInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - res.Call(Localizer.Stub("InfoResponse")); + res.Call(LocStrings.Stub("InfoResponse")); } } \ No newline at end of file diff --git a/src/commands/CommandInvite.java b/src/commands/CommandInvite.java index d80494d..d74dda5 100644 --- a/src/commands/CommandInvite.java +++ b/src/commands/CommandInvite.java @@ -1,7 +1,7 @@ package commands; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.*; import offline.Ref; @@ -10,7 +10,7 @@ public class CommandInvite extends Command public CommandInvite(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("InviteInfo"); } + public String HelpText() { return LocStrings.Stub("InviteInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) diff --git a/src/commands/CommandJDoodle.java b/src/commands/CommandJDoodle.java index ef7e12d..ae244e4 100644 --- a/src/commands/CommandJDoodle.java +++ b/src/commands/CommandJDoodle.java @@ -1,7 +1,7 @@ package commands; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.*; import network.NetworkJDoodle; @@ -12,14 +12,14 @@ public class CommandJDoodle extends Command public CommandJDoodle(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("JDoodleInfo"); } + public String HelpText() { return LocStrings.Stub("JDoodleInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args.trim().length() < 1) { - res.Call(Localizer.Stub("JDoodleError")); + res.Call(LocStrings.Stub("JDoodleError")); return; } diff --git a/src/commands/CommandMap.java b/src/commands/CommandMap.java index 8dd4c37..803b93b 100644 --- a/src/commands/CommandMap.java +++ b/src/commands/CommandMap.java @@ -3,7 +3,7 @@ package commands; import java.util.Random; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.KittyChannel; import dataStructures.KittyGuild; import dataStructures.KittyRating; @@ -23,7 +23,7 @@ public class CommandMap extends Command public CommandMap(KittyRole roleLevel, KittyRating contentRating) { super(roleLevel, contentRating); } @Override - public String HelpText() { return String.format(Localizer.Stub("MapInfo"), "" + MaxWidth, "" + MaxHeight); } + public String HelpText() { return String.format(LocStrings.Stub("MapInfo"), "" + MaxWidth, "" + MaxHeight); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -60,7 +60,7 @@ public class CommandMap extends Command } catch(NumberFormatException e) { - res.Call(Localizer.Stub("MapInvalid")); + res.Call(LocStrings.Stub("MapInvalid")); return; } @@ -76,10 +76,10 @@ public class CommandMap extends Command } // Response header creation - header += Localizer.Stub("MapVersion") + "\n"; - header += Localizer.Stub("MapSeed") + ": `" + seed + "`, "; - header += Localizer.Stub("MapWidth") + "`"+ width +"`, "; - header += Localizer.Stub("MapHeight") + ": `"+ height + "`\n"; + header += LocStrings.Stub("MapVersion") + "\n"; + header += LocStrings.Stub("MapSeed") + ": `" + seed + "`, "; + header += LocStrings.Stub("MapWidth") + "`"+ width +"`, "; + header += LocStrings.Stub("MapHeight") + ": `"+ height + "`\n"; // Response body creation body += "```\n"; diff --git a/src/commands/CommandPerish.java b/src/commands/CommandPerish.java index b684ccc..73ca6e6 100644 --- a/src/commands/CommandPerish.java +++ b/src/commands/CommandPerish.java @@ -8,7 +8,7 @@ import java.io.IOException; import javax.imageio.ImageIO; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.KittyChannel; import dataStructures.KittyGuild; import dataStructures.KittyRating; @@ -23,7 +23,7 @@ public class CommandPerish extends Command public CommandPerish(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("PerishInfo"); }; + public String HelpText() { return LocStrings.Stub("PerishInfo"); }; private static Long num = 0l; diff --git a/src/commands/CommandPing.java b/src/commands/CommandPing.java index 5514bb0..7de6205 100644 --- a/src/commands/CommandPing.java +++ b/src/commands/CommandPing.java @@ -15,12 +15,12 @@ public class CommandPing extends Command public CommandPing(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("PingInfo"); } + public String HelpText() { return LocStrings.Stub("PingInfo"); } // Called when the command is run! @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - res.Call(Localizer.Stub("PingResponse")); + res.Call(LocStrings.Stub("PingResponse")); } } diff --git a/src/commands/CommandPollManage.java b/src/commands/CommandPollManage.java index ce31f94..2432e19 100644 --- a/src/commands/CommandPollManage.java +++ b/src/commands/CommandPollManage.java @@ -14,7 +14,7 @@ public class CommandPollManage extends Command public CommandPollManage(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("PollMangeInfo"); } + public String HelpText() { return LocStrings.Stub("PollMangeInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) diff --git a/src/commands/CommandPollResults.java b/src/commands/CommandPollResults.java index 5fdf425..ac36aff 100644 --- a/src/commands/CommandPollResults.java +++ b/src/commands/CommandPollResults.java @@ -10,7 +10,7 @@ public class CommandPollResults extends Command public CommandPollResults(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("PollResultsInfo"); } + public String HelpText() { return LocStrings.Stub("PollResultsInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -28,7 +28,7 @@ public class CommandPollResults extends Command for(int i = 0; i < votes.size(); i++) { - results += String.format(Localizer.Stub("PollResultsResponse"), votes.get(i).votes, votes.get(i).choice, (int)(((double)votes.get(i).votes) / ((double)totalVotes) * 100)); + results += String.format(LocStrings.Stub("PollResultsResponse"), votes.get(i).votes, votes.get(i).choice, (int)(((double)votes.get(i).votes) / ((double)totalVotes) * 100)); } res.Call(results); diff --git a/src/commands/CommandPollShow.java b/src/commands/CommandPollShow.java index 22a65d1..08cde19 100644 --- a/src/commands/CommandPollShow.java +++ b/src/commands/CommandPollShow.java @@ -8,18 +8,18 @@ public class CommandPollShow extends Command public CommandPollShow(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("PollShowInfo"); } + public String HelpText() { return LocStrings.Stub("PollShowInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(!guild.polling) { - res.Call(Localizer.Stub("PollShowNoPoll")); + res.Call(LocStrings.Stub("PollShowNoPoll")); return; } - String poll = String.format(Localizer.Stub("PollShowPoll"), guild.poll); - poll += Localizer.Stub("PollShowChoices"); + String poll = String.format(LocStrings.Stub("PollShowPoll"), guild.poll); + poll += LocStrings.Stub("PollShowChoices"); for(int i = 0; i < guild.choices.size(); i++) { poll += (i+1) + ": `" + guild.choices.get(i).choice + "`\n"; diff --git a/src/commands/CommandPollVote.java b/src/commands/CommandPollVote.java index 8e652de..d3b48f5 100644 --- a/src/commands/CommandPollVote.java +++ b/src/commands/CommandPollVote.java @@ -8,7 +8,7 @@ public class CommandPollVote extends Command public CommandPollVote(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("PollVoteInfo"); } + public String HelpText() { return LocStrings.Stub("PollVoteInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -17,7 +17,7 @@ public class CommandPollVote extends Command { if(guild.hasVoted.contains(user.uniqueID)) { - res.Call(Localizer.Stub("PollVoteAlreadyVoted")); + res.Call(LocStrings.Stub("PollVoteAlreadyVoted")); return; } try @@ -25,23 +25,23 @@ public class CommandPollVote extends Command int voteNum = Integer.parseInt(input.args)-1; if(voteNum >= guild.choices.size() || voteNum < 0) { - res.Call(String.format(Localizer.Stub("PollVoteNotValidVote"), voteNum)); + res.Call(String.format(LocStrings.Stub("PollVoteNotValidVote"), voteNum)); return; } KittyPoll polled = guild.choices.get(voteNum); polled.votes++; guild.hasVoted.add(user.uniqueID); - res.Call(Localizer.Stub("PollVoteSuccess") + " `" + polled.choice + "`!"); + res.Call(LocStrings.Stub("PollVoteSuccess") + " `" + polled.choice + "`!"); return; } catch (NumberFormatException e) { - res.Call(Localizer.Stub("PollVoteNotValidNumber")); + res.Call(LocStrings.Stub("PollVoteNotValidNumber")); return; } } - res.Call(Localizer.Stub("PollVoteNoPoll")); + res.Call(LocStrings.Stub("PollVoteNoPoll")); } } diff --git a/src/commands/CommandRPEnd.java b/src/commands/CommandRPEnd.java index 47e64ff..17005d6 100644 --- a/src/commands/CommandRPEnd.java +++ b/src/commands/CommandRPEnd.java @@ -5,7 +5,7 @@ import java.io.FileNotFoundException; import java.io.UnsupportedEncodingException; import core.Command; -import core.Localizer; +import core.LocStrings; import core.RPManager; import dataStructures.*; @@ -14,7 +14,7 @@ public class CommandRPEnd extends Command public CommandRPEnd (KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("RPEndInfo"); } + public String HelpText() { return LocStrings.Stub("RPEndInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -33,11 +33,11 @@ public class CommandRPEnd extends Command if(sending != null) { res.CallFile(sending, "txt"); - res.Call(Localizer.Stub("RPEndFileOut")); + res.Call(LocStrings.Stub("RPEndFileOut")); } else { - res.Call(Localizer.Stub("RPEndError")); + res.Call(LocStrings.Stub("RPEndError")); } } } diff --git a/src/commands/CommandRPG.java b/src/commands/CommandRPG.java index 733151d..306aac8 100644 --- a/src/commands/CommandRPG.java +++ b/src/commands/CommandRPG.java @@ -1,7 +1,7 @@ package commands; import core.Command; -import core.Localizer; +import core.LocStrings; import core.rpg.RPGFramework; import dataStructures.KittyChannel; import dataStructures.KittyGuild; @@ -23,7 +23,7 @@ public class CommandRPG extends Command } @Override - public String HelpText() { return Localizer.Stub("RPGInfo"); }; + public String HelpText() { return LocStrings.Stub("RPGInfo"); }; @Override @@ -45,7 +45,7 @@ public class CommandRPG extends Command if(result == null) { - res.Call(Localizer.Stub("RPGInvalid")); + res.Call(LocStrings.Stub("RPGInvalid")); return; } diff --git a/src/commands/CommandRPStart.java b/src/commands/CommandRPStart.java index 570e69b..b433cd0 100644 --- a/src/commands/CommandRPStart.java +++ b/src/commands/CommandRPStart.java @@ -3,7 +3,7 @@ package commands; import java.util.ArrayList; import core.Command; -import core.Localizer; +import core.LocStrings; import core.RPManager; import dataStructures.*; @@ -12,7 +12,7 @@ public class CommandRPStart extends Command public CommandRPStart (KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("RPStartInfo"); } + public String HelpText() { return LocStrings.Stub("RPStartInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) diff --git a/src/commands/CommandRating.java b/src/commands/CommandRating.java index a6a71b0..0adaae6 100644 --- a/src/commands/CommandRating.java +++ b/src/commands/CommandRating.java @@ -1,7 +1,7 @@ package commands; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.KittyChannel; import dataStructures.KittyGuild; import dataStructures.KittyRating; @@ -15,7 +15,7 @@ public class CommandRating extends Command public CommandRating(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("RatingInfo"); } + public String HelpText() { return LocStrings.Stub("RatingInfo"); } // Called when the command is run! @Override @@ -55,11 +55,11 @@ public class CommandRating extends Command } if(newRating != null) - res.Call(Localizer.Stub("RatingChanged") + " " + newRating); + res.Call(LocStrings.Stub("RatingChanged") + " " + newRating); else - res.Call(Localizer.Stub("RatingInvalid") + " `" + input.args + "`"); + res.Call(LocStrings.Stub("RatingInvalid") + " `" + input.args + "`"); if(newRating.equals("Filtered")) - res.Call(Localizer.Stub("RatingWarning")); + res.Call(LocStrings.Stub("RatingWarning")); } } \ No newline at end of file diff --git a/src/commands/CommandRole.java b/src/commands/CommandRole.java index e03b6e8..e9633b8 100644 --- a/src/commands/CommandRole.java +++ b/src/commands/CommandRole.java @@ -1,7 +1,7 @@ package commands; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.*; public class CommandRole extends Command @@ -9,20 +9,20 @@ public class CommandRole extends Command public CommandRole (KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("RoleInfo"); } + public String HelpText() { return LocStrings.Stub("RoleInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args.isEmpty()) { - res.Call(Localizer.Stub("RoleStandardResponse") + " " + user.GetRole().name() + "!"); + res.Call(LocStrings.Stub("RoleStandardResponse") + " " + user.GetRole().name() + "!"); return; } if(user.GetRole().getValue() < KittyRole.Admin.getValue()) { - res.Call(String.format(Localizer.Stub("RoleError"), KittyRole.Admin.toString())); + res.Call(String.format(LocStrings.Stub("RoleError"), KittyRole.Admin.toString())); return; } @@ -46,7 +46,7 @@ public class CommandRole extends Command break; default: - res.Call(Localizer.Stub("RoleNeededRole")); + res.Call(LocStrings.Stub("RoleNeededRole")); return; } String users = ""; @@ -56,6 +56,6 @@ public class CommandRole extends Command users += input.mentions[i].name + " "; } - res.Call(String.format(Localizer.Stub("RoleChanged"), users, newRole.name())); + res.Call(String.format(LocStrings.Stub("RoleChanged"), users, newRole.name())); } } diff --git a/src/commands/CommandRoll.java b/src/commands/CommandRoll.java index 7ab627b..5a9ef7e 100644 --- a/src/commands/CommandRoll.java +++ b/src/commands/CommandRoll.java @@ -16,7 +16,7 @@ public class CommandRoll extends Command public CommandRoll(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("RollInfo"); } + public String HelpText() { return LocStrings.Stub("RollInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -27,7 +27,7 @@ public class CommandRoll extends Command } catch(Exception e) { - res.Call(Localizer.Stub("RollError")); + res.Call(LocStrings.Stub("RollError")); } } diff --git a/src/commands/CommandShutdown.java b/src/commands/CommandShutdown.java index 8e849f7..812aed5 100644 --- a/src/commands/CommandShutdown.java +++ b/src/commands/CommandShutdown.java @@ -2,7 +2,7 @@ package commands; import core.Command; import core.DatabaseManager; -import core.Localizer; +import core.LocStrings; import core.Stats; import dataStructures.KittyChannel; import dataStructures.KittyGuild; @@ -20,7 +20,7 @@ public class CommandShutdown extends Command public CommandShutdown(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("ShutdownInfo"); } + public String HelpText() { return LocStrings.Stub("ShutdownInfo"); } // Called when the command is run! @Override diff --git a/src/commands/CommandStark.java b/src/commands/CommandStark.java index 0a66073..16378c8 100644 --- a/src/commands/CommandStark.java +++ b/src/commands/CommandStark.java @@ -8,7 +8,7 @@ import java.io.IOException; import javax.imageio.ImageIO; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.*; import utils.ImageUtils; @@ -17,7 +17,7 @@ public class CommandStark extends Command public CommandStark(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("StarkInfo"); }; + public String HelpText() { return LocStrings.Stub("StarkInfo"); }; private static Long num = 0l; diff --git a/src/commands/CommandStats.java b/src/commands/CommandStats.java index 0ec4662..7f4f254 100644 --- a/src/commands/CommandStats.java +++ b/src/commands/CommandStats.java @@ -1,7 +1,7 @@ package commands; import core.Command; -import core.Localizer; +import core.LocStrings; import core.CommandManager.ThreadData; import dataStructures.KittyChannel; import dataStructures.KittyGuild; @@ -17,7 +17,7 @@ public class CommandStats extends Command public CommandStats(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("StatsInfo"); } + public String HelpText() { return LocStrings.Stub("StatsInfo"); } // Called when the command is run! @Override diff --git a/src/commands/CommandTeey.java b/src/commands/CommandTeey.java index 57f87f0..6a3394a 100644 --- a/src/commands/CommandTeey.java +++ b/src/commands/CommandTeey.java @@ -4,7 +4,7 @@ import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.KittyChannel; import dataStructures.KittyGuild; import dataStructures.KittyRating; @@ -23,7 +23,7 @@ public class CommandTeey extends Command private static Long num = 0l; @Override - public String HelpText() { return Localizer.Stub("TeeyInfo"); } + public String HelpText() { return LocStrings.Stub("TeeyInfo"); } // Called when the command is run! @Override diff --git a/src/commands/CommandTweet.java b/src/commands/CommandTweet.java index a637e86..8c9770a 100644 --- a/src/commands/CommandTweet.java +++ b/src/commands/CommandTweet.java @@ -1,7 +1,7 @@ package commands; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.*; import network.NetworkTwitter; @@ -11,7 +11,7 @@ public class CommandTweet extends Command public CommandTweet(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return Localizer.Stub("TweetInfo"); } + public String HelpText() { return LocStrings.Stub("TweetInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -20,7 +20,7 @@ public class CommandTweet extends Command try { res.Call(tweet.tweet(input.args)); } catch (Exception e) { - res.Call(Localizer.Stub("TweetError")); + res.Call(LocStrings.Stub("TweetError")); } } } diff --git a/src/commands/CommandWolfram.java b/src/commands/CommandWolfram.java index af263dd..4947261 100644 --- a/src/commands/CommandWolfram.java +++ b/src/commands/CommandWolfram.java @@ -3,7 +3,7 @@ package commands; import java.io.File; import java.io.IOException; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.*; import network.*; import utils.ImageUtils; @@ -15,13 +15,13 @@ public class CommandWolfram extends Command public CommandWolfram(KittyRole level, KittyRating rating) { super(level, rating);} @Override - public String HelpText() { return Localizer.Stub("WolframInfo"); } + public String HelpText() { return LocStrings.Stub("WolframInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args == null || input.args.trim().length() == 0) - res.Call(Localizer.Stub("WolframNoArgs")); + res.Call(LocStrings.Stub("WolframNoArgs")); try { @@ -31,7 +31,7 @@ public class CommandWolfram extends Command } catch (IOException e) { - res.Call(Localizer.Stub("WolframError")); + res.Call(LocStrings.Stub("WolframError")); } } } \ No newline at end of file diff --git a/src/commands/CommandYeet.java b/src/commands/CommandYeet.java index a5f049c..65ea728 100644 --- a/src/commands/CommandYeet.java +++ b/src/commands/CommandYeet.java @@ -4,7 +4,7 @@ import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import core.Command; -import core.Localizer; +import core.LocStrings; import dataStructures.KittyChannel; import dataStructures.KittyGuild; import dataStructures.KittyRating; @@ -23,7 +23,7 @@ public class CommandYeet extends Command private static Long num = 0l; @Override - public String HelpText() { return Localizer.Stub("YeetInfo"); } + public String HelpText() { return LocStrings.Stub("YeetInfo"); } // Called when the command is run! @Override diff --git a/src/core/Localizer.java b/src/core/LocStrings.java similarity index 77% rename from src/core/Localizer.java rename to src/core/LocStrings.java index ba8e536..2cee4ed 100644 --- a/src/core/Localizer.java +++ b/src/core/LocStrings.java @@ -6,14 +6,14 @@ import utils.LogFilter; // A quick-and-dirty localization tool that scrapes the project for calls to itself, then // generates/updates a file externally (phrases.config) with all the stub values as keys that // can then be localized. -public class Localizer extends LocBase +public class LocStrings extends LocBase { - public static final String fileName = "localization.config"; - public static final String function = "Localizer.Stub"; + public static final String fileName = "locStrings.config"; + public static final String function = "LocStrings.Stub"; - private static Localizer instance; + private static LocStrings instance; - public Localizer() + public LocStrings() { super(fileName, function); diff --git a/src/core/ObjectBuilderFactory.java b/src/core/ObjectBuilderFactory.java index a07be59..b6288fd 100644 --- a/src/core/ObjectBuilderFactory.java +++ b/src/core/ObjectBuilderFactory.java @@ -36,7 +36,7 @@ public class ObjectBuilderFactory // Localization classes - these are singletons, but should be initialized before almost all other // things so their inclusion in the factory is to ensure they're started at the correct time. - @SuppressWarnings("unused") private static Localizer locStrings; + @SuppressWarnings("unused") private static LocStrings locStrings; @SuppressWarnings("unused") private static LocCommands locCommands; // Lazy initialization multithreaded mutex stuff to prevent explosions. @@ -66,7 +66,7 @@ public class ObjectBuilderFactory // Start by reading from things that are external. Because // we require these things to be resolved before the rest of the application, // we place them here. - locStrings = new Localizer(); + locStrings = new LocStrings(); locCommands = new LocCommands(); } finally From fcfaa842d10dcceccc53862e6044f6e22664dc0d Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Sun, 14 Apr 2019 00:52:29 -0700 Subject: [PATCH 5/8] = Fixed PollManageInfo lookup default --- locStrings.config | 75 ++++++++++++++--------------- src/commands/CommandPollManage.java | 2 +- 2 files changed, 38 insertions(+), 39 deletions(-) diff --git a/locStrings.config b/locStrings.config index 4a616c7..d0ce6f8 100644 --- a/locStrings.config +++ b/locStrings.config @@ -2,8 +2,8 @@ PollManageInfo='start' will start a new poll with the query of the line you put after, 'choice' will add a choice to the poll, 'stop' will end the poll [CommandBeansShow] -BeansShowInfo=Displays how many beans you have BeansShowDisplay=You have %s beans! +BeansShowInfo=Displays how many beans you have [CommandHelp] HelpInfo=Lets you look up specific commands, or get a link to a list of all commands. @@ -21,15 +21,15 @@ TweetInfo=Kitty will tweet to her personal twitter account TweetError=Tweet command failed! [CommandRole] -RoleNeededRole=Please enter `general`, `mod`, or `admin`! -RoleError=You aren't allowed to do that! You must have the KittyRole '%' or higher! RoleInfo=Will show the current role you have, Admins can change others roles with input of 'role x @y' with x being blacklist, general, mod, or admin. Blacklist will not allow the user to interact with kitty anymore, general mod and admin will give the user access to those commands. RoleStandardResponse=Your role is +RoleError=You aren't allowed to do that! You must have the KittyRole '%' or higher! RoleChanged=Changed %s to role `%s`! +RoleNeededRole=Please enter `general`, `mod`, or `admin`! [CommandColiru] -ColiruInfo=Will try to compile any c++ code you put in! Supports up to C++14 standard, uses g++. ColiruError=Please provide some c++ code to attempt to compile! +ColiruInfo=Will try to compile any c++ code you put in! Supports up to C++14 standard, uses g++. [CommandJDoodle] JDoodleInfo=Will compile any java code you put in! Supports Java 1.8 @@ -37,8 +37,8 @@ JDoodleError=Please provide some java code to get it compiled! [CommandChangeIndicator] ChangeIndicatorInfo=Changes the command indicator to any single character. By default, it's '!'. If more than one character is provided, the first one is used! -ChangeIndicatorChanged=Indicator changed to `%s` ChangeIndicatorError=Please specify a letter or symbol to use! +ChangeIndicatorChanged=Indicator changed to `%s` [CommandPerish] PerishInfo=Adds a red, 'a n g e r y' overlay to your icon or the icon of a friend you mentioned @@ -50,20 +50,23 @@ StarkInfo=Snaps your icon or the icon of a friend you mentioned YeetInfo=Yeet yourself or yeet a friend with @! [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! PollVoteNoPoll=There is no poll running! PollVoteAlreadyVoted=You already voted PollVoteNotValidVote=%s That's not a vaild vote! -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! PollVoteSuccess=You successfully voted for [CommandShutdown] ShutdownInfo=Stops kitty. `-s` or `safe` as an argument attempts to sync off the database before shutdown. +[CommandTeey] +TeeyInfo=Teey yourself back into existance, or teey a friend with @! + [CommandBetBeans] -BetBeansNotValid=That's not a valid bet! BetBeansLowBet=Please bet with at least 50 beans! BetBeansInfo=Allows you to bet your beans, set your amount after the command! Warning! House always wins!\nSets of 3 will get 2x, 4 will get 10x, and 5 will get 1000x +BetBeansNotValid=That's not a valid bet! BetBeansLose=Sorry, you didn't win, try again! BetBeansNotEnough=You don't have enough beans! BetBeansWin=You won %s beans! @@ -79,38 +82,38 @@ RPStartInfo=Starts an rp, add people to it by mentioning them! BlurryInfo=Blurs your icon or the icon of a friend you mentioned [CommandPollResults] -PollResultsInfo=Will show current results of a poll and percentages of votes per choice PollResultsResponse=%s people voted for %s `%s` with `%s%` !\n +PollResultsInfo=Will show current results of a poll and percentages of votes per choice [CommandRating] RatingInfo='0' is fully sfw (Derpi and e621 searches are disabled), '1' is filtered (kitty auto appends a sfw tag on any searches), '2' is nsfw (any search will go through). Some other words are supported for setting filter as well. -RatingChanged=Kittybot content set to RatingWarning=Warning: NSFW may slip through, images are only based on tags on their respective sites! +RatingChanged=Kittybot content set to RatingInvalid=Invalid content rating [CommandGiveBeans] -GiveBeansInvalid=That's not a valid number! -GiveBeansSuccess=Gave %s %s beans! -GiveBeansInfo=Gives beans to the mentioned users! GiveBeansNoneMentioned=You didn't mention anyone! +GiveBeansSuccess=Gave %s %s beans! +GiveBeansInvalid=That's not a valid number! +GiveBeansInfo=Gives beans to the mentioned users! [CommandPollShow] PollShowNoPoll=There is no poll running! -PollShowChoices=And the choices are:\n PollShowInfo=Will show the current poll running PollShowPoll=The current poll is `%s`\n +PollShowChoices=And the choices are:\n [CommandHelpBuilder] HelpBuilderInfo=Emit help for all commands as formatted HTML [CommandRPEnd] -RPEndFileOut=Here's your file! RPEndError=You can't end this RP! RPEndInfo=Ends RP in channel and gives you a .txt file! +RPEndFileOut=Here's your file! [CommandRPG] -RPGInvalid=Invalid RPG Command! RPGInfo=Admin+ command only right now - experimental text RPG! Format is !rpg +RPGInvalid=Invalid RPG Command! [CommandBoop] BoopPerson=%s booped %s! @@ -119,44 +122,41 @@ BoopStandard=Woah! %s booped me! That's %s total! BoopMultiple=%s booped several others - %s! [CommandInfo] -InfoInfo=Provides author info and a link to Kitty's website InfoResponse=I'm made by `Rin#8904` and `Reverie Wisp#3703`!\nYou can find more info about me along with a Patreon link to support us and GitHub link for filing bugs https://www.rinsnowmew.com/bot/ +InfoInfo=Provides author info and a link to Kitty's website [CommandPing] PingResponse=Pong! PingInfo=Will respond with Pong! [CommandChoose] -ChooseInfo=With an input of x,y,z where x y and z are all choices, kitty will choose one -ChooseOne=I can't choose from *one* thing! ChooseChoice=I chooooooose %s! +ChooseOne=I can't choose from *one* thing! +ChooseInfo=With an input of x,y,z where x y and z are all choices, kitty will choose one [CommandEightBall] -EightBallInfo=Answers a yes or no question! Warning: Kitty can not actually tell the future, she claims no responsibility for any lion mauling, lack of lottery wins, or felony charges. -EightBallError=Hmm? You'll need to ask a question! - -EightBallYes1=It is certain. -EightBallYes2=It is decidedly so. -EightBallYes3=Without a doubt. EightBallYes4=Yes - definitely. -EightBallYes5=You may rely on it. -EightBallYes6=As I see it, yes. -EightBallYes7=Most likely. +EightBallYes3=Without a doubt. +EightBallYes2=It is decidedly so. +EightBallYes1=It is certain. EightBallYes8=Outlook good. -EightBallYes9=Yes. -EightBallYes10=Signs point to yes. - +EightBallYes7=Most likely. +EightBallYes6=As I see it, yes. +EightBallYes5=You may rely on it. EightBallMaybe1=Reply hazy, try again. EightBallMaybe2=Ask again later. +EightBallError=Hmm? You'll need to ask a question! EightBallMaybe3=Better not tell you now. EightBallMaybe4=Cannot predict now. EightBallMaybe5=Concentrate and ask again. - -EightBallNo1=Don't count on it. -EightBallNo2=My reply is no. +EightBallInfo=Answers a yes or no question! Warning: Kitty can not actually tell the future, she claims no responsibility for any lion mauling, lack of lottery wins, or felony charges. +EightBallNo5=Very doubtful. EightBallNo3=My sources say no. EightBallNo4=Outlook not so good. -EightBallNo5=Very doubtful. +EightBallNo1=Don't count on it. +EightBallNo2=My reply is no. +EightBallYes9=Yes. +EightBallYes10=Signs point to yes. [CommandInvite] InviteInfo=Provides a direct invite link for KittyBot @@ -170,9 +170,8 @@ WolframNoArgs=You need to provide some arguments! MapInfo=Generates a map! You can pass additional information if you want with the flags `-s-w-h`. If one of the fields isn't provided, its default will be used. Note that adjusting the width and height impacts the map outcomes.\n\nDefault seed: Random,\nDefault Width: 35(max %s),\nDefault Height: 25(max %s) MapSeed=Seed MapInvalid=Invalid arguments provided! -MapHeight=Height MapVersion=Using mapgen v0.1 MapWidth=Width +MapHeight=Height + -[CommandTeey] -TeeyInfo=Teey yourself back into existance, or teey a friend with @! \ No newline at end of file diff --git a/src/commands/CommandPollManage.java b/src/commands/CommandPollManage.java index 2432e19..1a0114d 100644 --- a/src/commands/CommandPollManage.java +++ b/src/commands/CommandPollManage.java @@ -14,7 +14,7 @@ public class CommandPollManage extends Command public CommandPollManage(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("PollMangeInfo"); } + public String HelpText() { return LocStrings.Stub("PollManageInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) From 04e9c60f027398814f44968f05af01ba1f03caca Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Sun, 14 Apr 2019 01:43:55 -0700 Subject: [PATCH 6/8] = Untested first pass enabling/disabling test --- src/core/CommandEnabler.java | 96 +++++++++++++++++++++++++++++- src/core/CommandManager.java | 30 +++++++--- src/core/LocCommands.java | 5 +- src/core/ObjectBuilderFactory.java | 28 ++++++--- src/main/Main.java | 4 +- src/utils/FileUtils.java | 1 + 6 files changed, 144 insertions(+), 20 deletions(-) diff --git a/src/core/CommandEnabler.java b/src/core/CommandEnabler.java index 174a5d1..12ee7b1 100644 --- a/src/core/CommandEnabler.java +++ b/src/core/CommandEnabler.java @@ -1,17 +1,111 @@ package core; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; +import utils.FileUtils; +import utils.GlobalLog; +import utils.LogFilter; + +// While some of the patterns in this file are similar to the localization files, +// commands that are being looked up will behave slightly differently so trimming +// rules for this file are different than the localization ones - this is more +// aggresive with whitespace removal. public class CommandEnabler { // Config/const variables public static final String filename = "commands.config"; + public static final String pairSplit = "="; + public static final char pairSeparator = '\n'; + public static final String enabled = "on"; + public static final String disabled = "off"; + public static final boolean defaultEnabledState = true; // Local variables - private HashMap enabledMap; + private HashMap enabledMap; // Quick lookup + private ArrayList keyList; // Tracking ordering for later public CommandEnabler() { enabledMap = new HashMap<>(); + keyList = new ArrayList<>(); + + ReadIn(); + GetTrackedCommands(); + WriteOut(); + } + + // Reads in the config file and parses it, keeping tabs on the order it read things + private void ReadIn() + { + File f = new File(filename); + if(f.isFile() && f.canRead()) + { + String content = FileUtils.ReadContent(f); + String[] lines = content.split("" + pairSeparator); + + for(int i = 0; i < lines.length; ++i) + { + String[] pair = lines[i].split(pairSplit); + String key = pair[0].trim(); + String value = pair[0].trim().toLowerCase(); + + keyList.add(key); + + if(value == enabled) + enabledMap.putIfAbsent(key, true); + else + enabledMap.putIfAbsent(key, false); + } + } + } + + // Look up the already scraped values from the localizer and store them if they + // don't already exist in the lookup. Defaults to defaultEnabledState. + private void GetTrackedCommands() + { + ArrayList unloc = LocCommands.GetUnlocalizedCommands(); + + for(int i = 0; i < unloc.size(); ++i) + enabledMap.putIfAbsent(unloc.get(i), defaultEnabledState); + } + + // Write out enabled/disabled file info. + private void WriteOut() + { + try + { + String outString = ""; + for(int i = 0; i < keyList.size(); ++i) + { + String key = keyList.get(i); + String value = enabled; + + if(enabledMap.get(key) == false) + value = disabled; + + outString += key + pairSplit + value + pairSeparator; + } + + BufferedWriter writer = new BufferedWriter(new FileWriter(filename)); + writer.write(outString); + writer.close(); + } + catch (IOException e) + { + GlobalLog.Error(LogFilter.Core, "Command enabler issue writing file! " + e.getMessage()); + } + } + + public boolean IsEnabled(String key) + { + if(enabledMap.containsKey(key)) + return enabledMap.get(key); + + return true; } } diff --git a/src/core/CommandManager.java b/src/core/CommandManager.java index 53a5f5a..dac2714 100644 --- a/src/core/CommandManager.java +++ b/src/core/CommandManager.java @@ -6,6 +6,7 @@ import java.util.Map.Entry; import dataStructures.KittyChannel; import dataStructures.KittyGuild; import dataStructures.KittyUser; +import dataStructures.Pair; import dataStructures.Response; import dataStructures.UserInput; import utils.GlobalLog; @@ -16,25 +17,36 @@ public class CommandManager // Variables private HashMap commands; private ArrayList threadAccumulator; + private CommandEnabler commandEnabler; private long invokeCount; - // Default Constructor - public CommandManager() + public CommandManager(CommandEnabler commandEnabler) { - commands = new HashMap(); - threadAccumulator = new ArrayList(); - invokeCount = 0; + this.commands = new HashMap(); + this.threadAccumulator = new ArrayList(); + this.invokeCount = 0; + this.commandEnabler = commandEnabler; } - // Allows the command manager to keep track of a command. - public void Register(String key, Command command) + // Allows the command manager to keep track of a command. Takes a pair (the un-localized and localzied commands) + // and the command associated with the localized commands. + public void Register(Pair pair, Command command) { - if(key == null) + if(pair == null || pair.Second == null) return; + // If we haven't already split a multisplit command (or even assessed that), + // then verify if we even need to register the commands at all. If it's + // not enabled, don't register it. + if(pair.First != null && !commandEnabler.IsEnabled(pair.First)) + return; + + String key = pair.Second; + if(key.contains(",")) { + String[] keys = key.split(","); Register(keys, command); return; @@ -58,7 +70,7 @@ public class CommandManager public void Register(String[] keys, Command command) { for(int i = 0; i < keys.length; ++i) - Register(keys[i].trim(), command); + Register(new Pair(null, keys[i].trim()), command); } // Calls the command but on a whole new thread! diff --git a/src/core/LocCommands.java b/src/core/LocCommands.java index 42fb5ac..04c6ed5 100644 --- a/src/core/LocCommands.java +++ b/src/core/LocCommands.java @@ -34,9 +34,10 @@ public class LocCommands extends LocBase } } - public static String Stub(String toStub) + // Returns a pair, the raw key and the stub key + public static Pair Stub(String toStub) { - return instance.GetKey(toStub); + return new Pair(toStub, instance.GetKey(toStub)); } // Gets all of the un-translated defaults in the commands list. diff --git a/src/core/ObjectBuilderFactory.java b/src/core/ObjectBuilderFactory.java index b6288fd..730ddaf 100644 --- a/src/core/ObjectBuilderFactory.java +++ b/src/core/ObjectBuilderFactory.java @@ -39,6 +39,9 @@ public class ObjectBuilderFactory @SuppressWarnings("unused") private static LocStrings locStrings; @SuppressWarnings("unused") private static LocCommands locCommands; + // Handles if we can or can't use specific commands, parsing a config file based on loc data to do so. + private static CommandEnabler commandEnabler; + // Lazy initialization multithreaded mutex stuff to prevent explosions. // TODO: Investigate using 'synchronized' instead potentially private static boolean hasInitialized; @@ -289,15 +292,26 @@ public class ObjectBuilderFactory user.avatarID = member.getUser().getAvatarUrl(); } - // Default construction of the command manager. - // TODO(wisp): We want to be able to keep all this data - // stored off in a file at some point, so we can reflect it onto the - // project and build it per-guild. That's for later now tho. - public static CommandManager ConstructCommandManager() + // Constructs a CommandEnabler if it doesn't exist, and gets the existing one if it does. + public static CommandEnabler ConstructCommandEnabler() + { + LazyInit(); + + if(commandEnabler == null) + commandEnabler = new CommandEnabler(); + + return commandEnabler; + } + + // Default construction of the command manager. In order to remotely resolve command enabling + // and disabling, what we do is construct the commands with a localized pair that is checked against + // the CommandEnabler object passed in. In theory, we could have multiple CommandManagers, tho we can + // only have one CommandEnabler. + public static CommandManager ConstructCommandManager(CommandEnabler commandEnabler) { LazyInit(); - CommandManager manager = new CommandManager(); + CommandManager manager = new CommandManager(commandEnabler); manager.Register(LocCommands.Stub("work"), new CommandDoWork(KittyRole.Dev, KittyRating.Safe)); manager.Register(LocCommands.Stub("shutdown"), new CommandShutdown(KittyRole.Dev, KittyRating.Safe)); @@ -341,7 +355,7 @@ public class ObjectBuilderFactory return manager; } - // NOTE(wisp): Default database manager construction. It can be constructed + // Default database manager construction. It can be constructed // in different ways, and so we construct it outside of the constructor for // the factory since it doesn't have to be present / can be elsewhere. // Effectively we cache the database here. diff --git a/src/main/Main.java b/src/main/Main.java index a30359a..2b7bc6a 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -25,6 +25,7 @@ public class Main extends ListenerAdapter // Variables and stuff private static JDA kitty; private static CommandManager commandManager; + private static CommandEnabler commandEnabler; private static DatabaseManager databaseManager; private static Stats stats; private static RPManager rpManager; @@ -34,7 +35,8 @@ public class Main extends ListenerAdapter { // Factory startup. The ordering is intentional. databaseManager = ObjectBuilderFactory.ConstructDatabaseManager(); - commandManager = ObjectBuilderFactory.ConstructCommandManager(); + commandEnabler = ObjectBuilderFactory.ConstructCommandEnabler(); + commandManager = ObjectBuilderFactory.ConstructCommandManager(commandEnabler); rpManager = ObjectBuilderFactory.ConstructRPManager(); stats = ObjectBuilderFactory.ConstructStats(commandManager); diff --git a/src/utils/FileUtils.java b/src/utils/FileUtils.java index ba70d6a..716fae3 100644 --- a/src/utils/FileUtils.java +++ b/src/utils/FileUtils.java @@ -12,6 +12,7 @@ import java.util.stream.Stream; public class FileUtils { // Reads all lines from a file as a string + public static String ReadContent(File file) { return ReadContent(file.toPath()); } public static String ReadContent(Path filePath) { StringBuilder contentBuilder = new StringBuilder(); From 044305c013c493104d6d714b26a87fa7c07329fe Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Sun, 14 Apr 2019 01:59:34 -0700 Subject: [PATCH 7/8] + Added command enabler --- commands.config | 35 +++++++++++++++++++++++++++++++++++ locCommands.config | 2 +- src/core/CommandEnabler.java | 23 ++++++++++++++++++----- 3 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 commands.config diff --git a/commands.config b/commands.config new file mode 100644 index 0000000..a654586 --- /dev/null +++ b/commands.config @@ -0,0 +1,35 @@ +indicator=on +boop=on +tony, stark, dontfeelgood, dontfeelsogood=on +yeet=on +role=on +ping=on +rating=on +roll=on +blur=on +choose=on +poll=on +rpstart=on +bet=on +perish, thenperish=on +teey=on +stats=on +beans=on +eightball, 8ball=on +vote=on +results=on +wolfram=on +map=on +info, about=on +givebeans=on +c++, g++, cplus, cpp=on +work=on +showpoll=on +rpend=on +rpg=on +tweet=on +java, jdoodle=on +help=on +buildHelp=on +invite=on +shutdown=on diff --git a/locCommands.config b/locCommands.config index 4266161..f60a1b9 100644 --- a/locCommands.config +++ b/locCommands.config @@ -1,6 +1,6 @@ [ObjectBuilderFactory] indicator= -boop=bap, spaghetti, turboyeet +boop= tony, stark, dontfeelgood, dontfeelsogood= yeet= role= diff --git a/src/core/CommandEnabler.java b/src/core/CommandEnabler.java index 12ee7b1..4c17cd6 100644 --- a/src/core/CommandEnabler.java +++ b/src/core/CommandEnabler.java @@ -31,6 +31,7 @@ public class CommandEnabler public CommandEnabler() { + GlobalLog.Log(LogFilter.Core, "Initializing " + this.getClass().getSimpleName()); enabledMap = new HashMap<>(); keyList = new ArrayList<>(); @@ -45,18 +46,22 @@ public class CommandEnabler File f = new File(filename); if(f.isFile() && f.canRead()) { - String content = FileUtils.ReadContent(f); + String content = FileUtils.ReadContent(f).trim(); String[] lines = content.split("" + pairSeparator); for(int i = 0; i < lines.length; ++i) { String[] pair = lines[i].split(pairSplit); + + if(pair.length < 2) + continue; + String key = pair[0].trim(); - String value = pair[0].trim().toLowerCase(); + String value = pair[1].trim().toLowerCase(); keyList.add(key); - - if(value == enabled) + + if(value.equalsIgnoreCase(enabled)) enabledMap.putIfAbsent(key, true); else enabledMap.putIfAbsent(key, false); @@ -71,7 +76,14 @@ public class CommandEnabler ArrayList unloc = LocCommands.GetUnlocalizedCommands(); for(int i = 0; i < unloc.size(); ++i) - enabledMap.putIfAbsent(unloc.get(i), defaultEnabledState); + { + String command = unloc.get(i); + if(enabledMap.putIfAbsent(command, defaultEnabledState) == null) + { + GlobalLog.Log(LogFilter.Strings, "Identified new toggleable raw command: " + command); + keyList.add(command); + } + } } // Write out enabled/disabled file info. @@ -101,6 +113,7 @@ public class CommandEnabler } } + // Looks up a key to see if it's enabled or not public boolean IsEnabled(String key) { if(enabledMap.containsKey(key)) From 9ae5fb3617e35dc057b52c8ac1bafe2f74cf39a6 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Sun, 14 Apr 2019 02:02:19 -0700 Subject: [PATCH 8/8] = Changed to 1/0 for enabled/disabled to avoid confusion. --- commands.config | 70 ++++++++++++++++++------------------ src/core/CommandEnabler.java | 4 +-- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/commands.config b/commands.config index a654586..4d9a56c 100644 --- a/commands.config +++ b/commands.config @@ -1,35 +1,35 @@ -indicator=on -boop=on -tony, stark, dontfeelgood, dontfeelsogood=on -yeet=on -role=on -ping=on -rating=on -roll=on -blur=on -choose=on -poll=on -rpstart=on -bet=on -perish, thenperish=on -teey=on -stats=on -beans=on -eightball, 8ball=on -vote=on -results=on -wolfram=on -map=on -info, about=on -givebeans=on -c++, g++, cplus, cpp=on -work=on -showpoll=on -rpend=on -rpg=on -tweet=on -java, jdoodle=on -help=on -buildHelp=on -invite=on -shutdown=on +indicator=1 +boop=1 +tony, stark, dontfeelgood, dontfeelsogood=1 +yeet=1 +role=1 +ping=1 +rating=1 +roll=1 +blur=1 +choose=1 +poll=1 +rpstart=1 +bet=1 +perish, thenperish=1 +teey=1 +stats=1 +beans=1 +eightball, 8ball=1 +vote=1 +results=1 +wolfram=1 +map=1 +info, about=1 +givebeans=1 +c++, g++, cplus, cpp=1 +work=1 +showpoll=1 +rpend=1 +rpg=1 +tweet=1 +java, jdoodle=1 +help=1 +buildHelp=1 +invite=1 +shutdown=1 diff --git a/src/core/CommandEnabler.java b/src/core/CommandEnabler.java index 4c17cd6..a45f047 100644 --- a/src/core/CommandEnabler.java +++ b/src/core/CommandEnabler.java @@ -21,8 +21,8 @@ public class CommandEnabler public static final String filename = "commands.config"; public static final String pairSplit = "="; public static final char pairSeparator = '\n'; - public static final String enabled = "on"; - public static final String disabled = "off"; + public static final String enabled = "1"; + public static final String disabled = "0"; public static final boolean defaultEnabledState = true; // Local variables