From 84009a294d9198077a5ecc035e08f09db7758c71 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Fri, 12 Apr 2019 21:27:30 -0700 Subject: [PATCH] = Revised SectionedKeyValuePair parsing and writing behavior, along with localization stub --- localization.config | 202 +++++++++--------- src/core/Localizer.java | 9 +- .../SectionedKeyValueStore.java | 90 ++++---- 3 files changed, 157 insertions(+), 144 deletions(-) diff --git a/localization.config b/localization.config index 2adcf25..8718a94 100644 --- a/localization.config +++ b/localization.config @@ -1,170 +1,170 @@ [CommandPollManage] -'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='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 +'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] -You have %s beans!=You have %s beans! -Displays how many beans you have=Displays how many beans you have +You have %s beans!=This phrase has been localized. Also, you have %s. +Displays how many beans you have= [CommandHelp] -You can get help with a specific command by typing `!help command`!\nYou can also look at \nGeneral Commands: `boop, roll, choose, help, info, vote, results, showpoll, wolfram, cplus, java, beans, role, bet, yeet`=You can get help with a specific command by typing `!help command`!\nYou can also look at \nGeneral Commands: `boop, roll, choose, help, info, vote, results, showpoll, wolfram, cplus, java, beans, role, bet, yeet` -Lets you look up specific commands, or get a link to a list of all commands.=Lets you look up specific commands, or get a link to a list of all commands. +You can get help with a specific command by typing `!help command`!\nYou can also look at \nGeneral Commands: `boop, roll, choose, help, info, vote, results, showpoll, wolfram, cplus, java, beans, role, bet, yeet`= +Lets you look up specific commands, or get a link to a list of all commands.= [CommandRoll] -Didn't work ;3;=Didn't work ;3; -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=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 +Didn't work ;3;= +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] -Displays the actively running KittyBot application information=Displays the actively running KittyBot application information +Displays the actively running KittyBot application information= [CommandTweet] -With an input of x,y,z where x y and z are all choices, kitty will choose one=With an input of x,y,z where x y and z are all choices, kitty will choose one -FUCKED UP HARD=FUCKED UP HARD +With an input of x,y,z where x y and z are all choices, kitty will choose one= +FUCKED UP HARD= [CommandRole] -Please enter `general`, `mod`, or `admin`!=Please enter `general`, `mod`, or `admin`! -You aren't allowed to do that! You must have the KittyRole '%' or higher!=You aren't allowed to do that! You must have the KittyRole '%' or higher! -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.=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. -Your role is=Your role is -Changed %s to role `%s`!=Changed %s to role `%s`! +Please enter `general`, `mod`, or `admin`!= +You aren't allowed to do that! You must have the KittyRole '%' or higher!= +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.= +Your role is= +Changed %s to role `%s`!= [CommandColiru] -Will try to compile any c++ code you put in! Supports up to C++14 standard, uses g++.=Will try to compile any c++ code you put in! Supports up to C++14 standard, uses g++. +Will try to compile any c++ code you put in! Supports up to C++14 standard, uses g++.= [CommandJDoodle] -Will compile any java code you put in! Supports Java 1.8=Will compile any java code you put in! Supports Java 1.8 +Will compile any java code you put in! Supports Java 1.8= [CommandChangeIndicator] -Changes the command indicator to any single character. By default, it's '!'. If more than one character is provided, the first one is used!=Changes the command indicator to any single character. By default, it's '!'. If more than one character is provided, the first one is used! -Indicator changed to `%s`=Indicator changed to `%s` +Changes the command indicator to any single character. By default, it's '!'. If more than one character is provided, the first one is used!= +Indicator changed to `%s`= [CommandPerish] -Adds a red, 'a n g e r y' overlay to your icon or the icon of a friend you mentioned=Adds a red, 'a n g e r y' overlay to your icon or the icon of a friend you mentioned +Adds a red, 'a n g e r y' overlay to your icon or the icon of a friend you mentioned= [CommandStark] -Snaps your icon or the icon of a friend you mentioned=Snaps your icon or the icon of a friend you mentioned +Snaps your icon or the icon of a friend you mentioned= [CommandYeet] -Yeet yourself or yeet a friend with @!=Yeet yourself or yeet a friend with @! +Yeet yourself or yeet a friend with @!= [CommandPollVote] -There is no poll running!=There is no poll running! -You already voted=You already voted -%s That's not a vaild vote!=%s That's not a vaild vote! -That's not a vaild number!=That's not a vaild number! -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!=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! -You successfully voted for=You successfully voted for +There is no poll running!= +You already voted= +%s That's not a vaild vote!= +That's not a vaild number!= +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!= +You successfully voted for= [CommandShutdown] -Stops kitty. `-s` or `safe` as an argument attempts to sync off the database before shutdown.=Stops kitty. `-s` or `safe` as an argument attempts to sync off the database before shutdown. -Forced shutdown, database synced before abandoning threads.=Forced shutdown, database synced before abandoning threads. -Forced immediate shutdown, threads abandoned without sync.=Forced immediate shutdown, threads abandoned without sync. +Stops kitty. `-s` or `safe` as an argument attempts to sync off the database before shutdown.= +Forced shutdown, database synced before abandoning threads.= +Forced immediate shutdown, threads abandoned without sync.= [CommandBetBeans] -That's not a valid bet!=That's not a valid bet! -Please bet with at least 50 beans!=Please bet with at least 50 beans! -Allows you to bet your beans, set your amount after the command! Warning! House always wins!\nSets of 3 will get 5x, 4 will get 10x, and 5 will get 1000x=Allows you to bet your beans, set your amount after the command! Warning! House always wins!\nSets of 3 will get 5x, 4 will get 10x, and 5 will get 1000x -Sorry, you didn't win, try again!=Sorry, you didn't win, try again! -You don't have enough beans!=You don't have enough beans! -You won %s beans!=You won %s beans! +That's not a valid bet!= +Please bet with at least 50 beans!= +Allows you to bet your beans, set your amount after the command! Warning! House always wins!\nSets of 3 will get 5x, 4 will get 10x, and 5 will get 1000x= +Sorry, you didn't win, try again!= +You don't have enough beans!= +You won %s beans!= [CommandDoWork] -I finished with my work! :D=I finished with my work! :D -Occupies a core for a few seconds=Occupies a core for a few seconds +I finished with my work! :D= +Occupies a core for a few seconds= [CommandRPStart] -Starts an rp, add people to it by mentioning them!=Starts an rp, add people to it by mentioning them! +Starts an rp, add people to it by mentioning them!= [CommandBlurry] -Blurs your icon or the icon of a friend you mentioned=Blurs your icon or the icon of a friend you mentioned +Blurs your icon or the icon of a friend you mentioned= [CommandPollResults] -Will show current results of a poll and percentages of votes per choice=Will show current results of a poll and percentages of votes per choice -%s people voted for %s `%s` with `%s%` !\n =%s people voted for %s `%s` with `%s%` !\n +Will show current results of a poll and percentages of votes per choice= +%s people voted for %s `%s` with `%s%` !\n = [CommandRating] -Kittybot content set to=Kittybot content set to -Warning: NSFW may slip through, images are only based on tags on their respective sites!=Warning: NSFW may slip through, images are only based on tags on their respective sites! -Invalid content rating=Invalid content rating +Kittybot content set to= +Warning: NSFW may slip through, images are only based on tags on their respective sites!= +Invalid content rating= [CommandGiveBeans] -That's not a valid number!=That's not a valid number! -Gave %s %s beans!=Gave %s %s beans! -Gives beans to the mentioned users!=Gives beans to the mentioned users! -You didn't mention anyone!=You didn't mention anyone! +That's not a valid number!= +Gave %s %s beans!= +Gives beans to the mentioned users!= +You didn't mention anyone!= [CommandPollShow] -There is no poll running!=There is no poll running! -And the choices are:\n=And the choices are:\n -Will show the current poll running=Will show the current poll running -The current poll is `%s`\n=The current poll is `%s`\n +There is no poll running!= +And the choices are:\n= +Will show the current poll running= +The current poll is `%s`\n= [CommandHelpBuilder] -Emit help for all commands as formatted HTML=Emit help for all commands as formatted HTML -commands=commands +Emit help for all commands as formatted HTML= +commands= [CommandRPEnd] -Here's your file!=Here's your file! -You can't end this RP!=You can't end this RP! -Ends RP in channel=Ends RP in channel +Here's your file!= +You can't end this RP!= +Ends RP in channel= [CommandRPG] -Invalid RPG Command!=Invalid RPG Command! -Admin+ command only right now - experimental text RPG! Format is !rpg =Admin+ command only right now - experimental text RPG! Format is !rpg +Invalid RPG Command!= +Admin+ command only right now - experimental text RPG! Format is !rpg = [CommandBoop] -%s booped %s!=%s booped %s! -Kitty will react with a counter=Kitty will react with a counter -Woah! %s booped me! That's %s total!=Woah! %s booped me! That's %s total! -%s booped several others - %s!=%s booped several others - %s! +%s booped %s!= +Kitty will react with a counter= +Woah! %s booped me! That's %s total!= +%s booped several others - %s!= [CommandInfo] -Provides author info and a link to Kitty's website=Provides author info and a link to Kitty's website -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/=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/ +Provides author info and a link to Kitty's website= +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] -Pong!=Pong! -Will respond with Pong!=Will respond with Pong! +Pong!= +Will respond with Pong!= [CommandChoose] -With an input of x,y,z where x y and z are all choices, kitty will choose one=With an input of x,y,z where x y and z are all choices, kitty will choose one -I chooooooose %s!=I chooooooose %s! +With an input of x,y,z where x y and z are all choices, kitty will choose one= +I chooooooose %s!= [CommandEightBall] -It is certain.=It is certain. -Ask again later.=Ask again later. -Cannot predict now.=Cannot predict now. -My sources say no.=My sources say no. -You may rely on it.=You may rely on it. -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.=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. -Concentrate and ask again.=Concentrate and ask again. -Signs point to yes.=Signs point to yes. -Don't count on it.=Don't count on it. -Yes.=Yes. -My reply is no.=My reply is no. -Most likely.=Most likely. -Reply hazy, try again.=Reply hazy, try again. -Without a doubt.=Without a doubt. -Yes - definitely.=Yes - definitely. -Very doubtful.=Very doubtful. -As I see it, yes.=As I see it, yes. -Better not tell you now.=Better not tell you now. -Outlook good.=Outlook good. -Outlook not so good.=Outlook not so good. -It is decidedly so.=It is decidedly so. +It is certain.= +Ask again later.= +Cannot predict now.= +My sources say no.= +You may rely on it.= +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.= +Concentrate and ask again.= +Signs point to yes.= +Don't count on it.= +Yes.= +My reply is no.= +Most likely.= +Reply hazy, try again.= +Without a doubt.= +Yes - definitely.= +Very doubtful.= +As I see it, yes.= +Better not tell you now.= +Outlook good.= +Outlook not so good.= +It is decidedly so.= [CommandInvite] -Provies a direct invite link for KittyBot=Provies a direct invite link for KittyBot +Provies a direct invite link for KittyBot= [CommandWolfram] -Something went wrong!=Something went wrong! -Will query wolframalpha with your question and give a full image output of the answer=Will query wolframalpha with your question and give a full image output of the answer -You need to provide some arguments!=You need to provide some arguments! +Something went wrong!= +Will query wolframalpha with your question and give a full image output of the answer= +You need to provide some arguments!= [CommandMap] -Seed=Seed -Invalid arguments provided!=Invalid arguments provided! -Height=Height -Using mapgen v0.1=Using mapgen v0.1 -Width=Width +Seed= +Invalid arguments provided!= +Height= +Using mapgen v0.1= +Width= diff --git a/src/core/Localizer.java b/src/core/Localizer.java index 4068454..6f00172 100644 --- a/src/core/Localizer.java +++ b/src/core/Localizer.java @@ -88,13 +88,18 @@ public class Localizer } // Nothing for now, but in the future will return a parsed and localized version of - // the string in question if one can be found. + // 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; - return stringStore.GetKey(input); + String value = stringStore.GetKey(input); + if(value.length() < 1) + return input; + + return value; } // Reads a file to string, adapted from https://stackoverflow.com/a/326440/5383198 diff --git a/src/dataStructures/SectionedKeyValueStore.java b/src/dataStructures/SectionedKeyValueStore.java index 744d546..0f67458 100644 --- a/src/dataStructures/SectionedKeyValueStore.java +++ b/src/dataStructures/SectionedKeyValueStore.java @@ -12,11 +12,12 @@ import java.util.function.Consumer; // // [ExampleSection] // Key=Value -// Valid Ridiculous Key&\n\t_.:;foo =Some Value -// Key= +// Valid Ridiculous Key&\n\t_.:;foo = \tValid Ridiculous Value*&%$()^.[]{}@ +// EmptyValue= // -// 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. +// 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 { // Variables @@ -39,31 +40,6 @@ public class SectionedKeyValueStore Parse(input); } - // Adds a KeyValue pair to the specified section if it's not already there. - // Also creates the section if it's not already present. - public void AddKeyValue(String sectionName, String key, String value) - { - AddSection(sectionName); - sectionKeyValue.get(sectionName).putIfAbsent(key, value); - keyValue.putIfAbsent(key, value); - } - - // Returns a HashMap of Keys to Values for a given section - @SuppressWarnings("unchecked") - public HashMap GetSection(String sectionName) - { - return (HashMap) sectionKeyValue.get(sectionName).clone(); - } - - // Look up a global key - public String GetKey(String key) - { - if(keyValue.containsKey(key)) - return keyValue.get(key); - - return null; - } - // Calls back on each item in the entire structure. Provides section, then a pair of the keyString and valueString. @SuppressWarnings({"rawtypes", "unchecked"}) public void ForEach(BiConsumer> action) @@ -94,39 +70,40 @@ public class SectionedKeyValueStore } } - // Stores the internal hashmap as a string then reutrns it. - // Places 1 newline between the sections. + // Parses the internal hashmap as a string then reutrns it, featuring sections. + // Iterates over all key/value pairs in the section and print them. Does not print + // the value of a given key if it is the same as the key. @SuppressWarnings({"rawtypes", "unchecked"}) public String toString() { String out = ""; + // Iterates over the sections and Iterator it = sectionKeyValue.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = (Map.Entry)it.next(); - out += ("" + SectionStart + pair.getKey() + SectionEnd + "\n"); + out += ("" + SectionStart + pair.getKey() + SectionEnd + KeyValueLineSeparator); Iterator internal = ((HashMap)pair.getValue()).entrySet().iterator(); - while(internal.hasNext()) { Map.Entry internalPair = (Map.Entry)internal.next(); - out += (internalPair.getKey() + KeyValueSplit + internalPair.getValue()) + KeyValueLineSeparator; + String key = (String)internalPair.getKey(); + String value = (String)internalPair.getValue(); + + if(key == value) + out += (key + KeyValueSplit) + KeyValueLineSeparator; + else + out += (key + KeyValueSplit + value) + KeyValueLineSeparator; } - out += "\n"; + out += KeyValueLineSeparator; } return out; } - // Adds a given section to the hashmap if it's not already present - private void AddSection(String sectionName) - { - sectionKeyValue.putIfAbsent(sectionName, new HashMap()); - } - // Parses out the string passed in into the sectionkeyValue HashMap. // Any character used in a split call is escaped just in case on // account of some characters having specific regex meanings. @@ -179,4 +156,35 @@ public class SectionedKeyValueStore for(int i = 0; i < toPrint.length; ++i) System.out.println(toPrint[i]); } + + // Adds a KeyValue pair to the specified section if it's not already there. + // Also creates the section if it's not already present. + public void AddKeyValue(String sectionName, String key, String value) + { + AddSection(sectionName); + sectionKeyValue.get(sectionName).putIfAbsent(key, value); + keyValue.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()); + } + + // Returns a HashMap of Keys to Values for a given section + @SuppressWarnings("unchecked") + public HashMap GetSection(String sectionName) + { + return (HashMap) sectionKeyValue.get(sectionName).clone(); + } + + // Look up a global key + public String GetKey(String key) + { + if(keyValue.containsKey(key)) + return keyValue.get(key); + + return null; + } }