= Iterative step - config reading but improper writing

This commit is contained in:
Matthew Cech
2019-06-23 01:39:17 -07:00
parent 0a1934393b
commit 587914e451
11 changed files with 981 additions and 136 deletions
+436
View File
@@ -0,0 +1,436 @@
[[Command Management]]
[CommandEnabler]
beans=1
benchmark, bench=1
bet=1
bethistory=1
blur=1
boop=1
buildhelp=1
c++, g++, cplus, cpp=1
catch=1
charactercreate=1
charactereditbio=1
charactereditname=1
characterediturl=1
choose=1
color, colour=1
crouton=1
dbflush=1
dbstats=1
eightball, 8ball=1
fetch=1
givebeans=1
guildroleadd=1
guildroleallowed=1
guildrolelist=1
guildrolenotallowed=1
guildroleremove=1
help=1
indicator=1
info, about=1
invite=1
java, jdoodle=1
leaderboard=1
map=1
perish, thenperish=1
ping=1
poll=1
raffleend=1
rafflejoin=1
rafflespin=1
rafflestart=1
rating=1
results=1
role=1
roll=1
rpend=1
rpg=1
rpstart=1
searchcharacter=1
showpoll=1
shutdown=1
stats=1
teey=1
tony, stark, dontfeelgood, dontfeelsogood=1
tweet=1
vote=1
wolfram=1
work=1
yeet=1
[[Localized Commands]]
[ObjectBuilderFactory]
indicator=
yeet=
guildroleremove=
bethistory=
benchmark, bench=
rating=
poll=
rafflespin=
charactereditURL=
bet=
guildrolelist=
stats=
catch=
color, colour=
guildroleadd=
results=
wolfram=
givebeans=
c++, g++, cplus, cpp=
work=
rpend=
java, jdoodle=
rafflejoin=
guildroleallowed=
leaderboard=
buildHelp=
dbflush=
shutdown=
boop=
tony, stark, dontfeelgood, dontfeelsogood=
role=
raffleend=
ping=
charactereditbio=
roll=
blur=
choose=
rpstart=
guildrolenotallowed=
perish, thenperish=
teey=
searchcharacter=
dbstats=
rafflestart=
beans=
eightball, 8ball=
vote=
map=
info, about=
showpoll=
rpg=
tweet=
charactercreate=
help=
charactereditname=
fetch=
crouton=
invite=
[[Localized Strings]]
[CommandBenchmark]
BenchmarkInfo=Allows you to lookup PC component benchmarks from UserBenchmark! You can use `bench find <name-snippet>` to see what's in the database, `bench info <name-snippet>` to look at a specific component, or the experimental `bench compare` commands!
BenchmarkInvalid=The benchmark operation you were trying to perform was invalid!
[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
[CommandGuildRoleNotAllowed]
GuildRoleNotAllowedFailure=
GuildRoleNotAllowedSuccess=
GuildRoleNotAllowedInfo=
[CommandBetHistory]
BetHistoryOutput=Kitty has %s beans!
BetHistoryInfo=Sees the amount of beans Kitty has earned through your bets!
[CommandCatch]
CatchInfo=Play catch with yourself or with a friend with @!
[CommandLeaderboard]
LeaderboardInfo=Shows you the 10 users with the most beans on the server
LeaderboardTitle=Server Leaderboard
[CommandGuildRoleList]
GuildRoleListOutput=The allowed roles are %s!
GuildRoleListEmpty=There are no roles allowed!
GuildRoleListInfo=Outputs a list of the roles you are allowed to add to yourself!
[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
[CommandGuildRoleAllowed]
GuildRoleAllowedInfo=
GuildRoleAllowedSuccess=Added %s to the allowed roles!
GuildRoleAllowedDuplicate=Can't add the same role twice!
[CommandStats]
StatsInfo=Displays the actively running KittyBot application information
[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 %s
RoleError=You aren't allowed to do that! You must have the KittyRole '%s' or higher!
RoleChanged=Changed %s to role `%s`!
RoleNeededRole=Please enter `general`, `mod`, or `admin`!
[CommandJDoodle]
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`
[CommandPerish]
PerishInfo=Adds a red, 'a n g e r y' overlay to your icon or the icon of a friend you mentioned
[CommandTradeBeans]
TradeBeanseStealingBeans=Stealing is wrong! *Steals 10 beans from %s*
TradeBeansNoTargetError=You have to give *someone* your beans!
TradeBeansSuccess=%s gave %s %s of their beans!
TradeBeansStealingBeans=
TradeBeansInfo=Gives another person some of your beans! Use is `tradebeans amount @person`!
TradeBeansIntParseError=That's not a real number!
TradeBeansNotEnoughError=You don't have enough beans!
[CommandPollVote]
PollVoteNotValidNumber=That's not a vaild number!
PollVoteInfo=Vote in a poll with the choice number, won't work if no poll is running, you can't change your vote once you have cast it! Be careful!
PollVoteNoPoll=There is no poll running!
PollVoteAlreadyVoted=You already voted
PollVoteNotValidVote=%s That's not a vaild vote!
PollVoteSuccess=You successfully voted for
[CommandShutdown]
ShutdownSafe=Shutting down, but first syncing database and finishing current threads.
ShutdownUnsafe=Shutting down and immediately and abandoning all threads without sync.
ShutdownInfo=Stops kitty. `-s` or `safe` as an argument attempts to sync off the database before shutdown.
[CommandRaffleSpin]
RaffleSpinInfo=
RaffleSpinSuccess=The winner issssssss %s!
RaffleSpinFailure=I can't choose a winner D:
[CommandRaffleEnd]
RaffleEndSuccess=
RaffleEndInfo=
RaffleEndFailure=I don't think there's one going!
[CommandCharacterSearch]
CharacterSearchNoCharacterFound=Couldn't find a character with that name or ID!
CharacterSearchMultipleCharacterHeader=I found a couple characters with that name, use `charactersearch UniqueID` with their Unique ID to find them!
CharacterSearchMultipleCharacter=%s is owned by %s. Unique ID is `%s`
CharacterSearchOneCharacter=I found one character with that name! \n Owner: %s | Name: %s | Bio: %s | Ref: <%s> | Unique ID: `%s`
CharacterSearchInfo=Find a character with their name or Unique ID! `charactersearch name` or `charactersearch UniqueID`
[CommandColor]
ColorNotSearchable=Your color couldn't be parsed! Make sure it's in hex format. Try this! `!color 3F5D54`
ColorInfo=Looks up the provided hex color and outputs it as hex, rgb, hsl, hsv, xyz, and cmyk. Also attempts to name the color, and provies a sample of it! Usage example: `!color #365345` (the # can be omitted)
[CommandDoWork]
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!
[CommandBlurry]
BlurryInfo=Blurs your icon or the icon of a friend you mentioned
[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
[CommandDBStats]
DBStatsInfo=
[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!
[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
[CommandHelpBuilder]
HelpBuilderInfo=Emit help for all commands as formatted HTML
[CommandCharacterEditURL]
CharacterEditURLInfo=
CharacterEditURLNotValid=
CharacterEditURLSuccess=
CharacterEditURLNotAuth=
CharacterEditURLIDNotValid=
[CommandRPG]
RPGInfo=Admin+ command only right now - experimental text RPG! Format is !rpg <rpg command>
RPGInvalid=Invalid RPG Command!
[CommandFetch]
FetchError=That no picture!
FetchEat=Me eat now *monch %s*
FetchInfo=Throw a custom emote and me bring it back!
FetchCatchRun=*Catches and runs away with %s*
FetchRunAway=*Runs away and doesn't return for a long time*
FetchBringBack=Me gots it! %s
FetchBringBackWrong=Me gots it! %s
FetchStare=*Stares at %s*
[CommandInfo]
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
[CommandGuildRoleRemove]
GuildRoleRemoveNotAllowed=You're not allowed to add %s
GuildRoleRemoveFailure=Couldn't remove %s from %s
GuildRoleRemoveSuccess=Removed %s from %s!
GuildRoleRemoveInfo=Removes the role specified!
[CommandWolfram]
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=Generates a map! You can pass additional information if you want with the flags `-s<seed> -w<width> -h<height>`. 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\n**Defaults**\nDefault Seed: Random,\nDefault Width: 35(max %s),\nDefault Height: 25(max %s)\n\n**Key**\nLand: ˶\nMountain: ▲\nBeach: =\nMarsh: ¥\nLava: #
MapSeed=Seed
MapInvalid=Invalid arguments provided!
MapVersion=Using mapgen v0.1
MapWidth=Width
MapHeight=Height
[CommandBeansShow]
BeansShowDisplay=You have %s beans!
BeansShowMentioned=I looked it up and %sbeans!
BeansShowInfo=Displays how many beans you have
[CommandRaffleStart]
RaffleStartSuccess=Started a raffle with an entrance fee of %s beans!
RaffleStartFailure=There's already a raffle going!
RaffleStart=
RaffleStartInfo=
[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`
[CommandCharacterEditBio]
CharacterEditBioSuccess=
CharacterEditBioIDNotValid=
CharacterEditBioNotAuth=
CharacterEditBioInfo=
CharacterEditBioNotValid=
[CommandTweet]
TweetInfo=Kitty will tweet to her personal twitter account
TweetError=Tweet command failed!
[CommandGuildRoleAdd]
GuildRoleAddSuccess=Added %s to %s
GuildRoleAddFailure=Failed to add %s to %s
GuildRoleAddNotAllowed=You are not allowed to add %s!
GuildRoleAddInfo=Add a role to yourself!
[CommandCharacterEditName]
CharacterEditNameInfo=
CharacterEditNameNotValid=
CharacterEditNameIDNotValid=
CharacterEditNameSuccess=
CharacterEditNameNotAuth=
[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++.
[CommandStark]
StarkInfo=Snaps your icon or the icon of a friend you mentioned
[CommandYeet]
YeetInfo=Yeet yourself or yeet a friend with @!
[CommandCrouton]
CroutonInfo=Crouton
[CommandCharacterCreate]
CharacterCreateDuplicate=You can't create a character with the same name!
CharacterCreateInfo=Create a character for kitty to hold onto for you! `createcharacter name, shortbio, refURL`
CharacterCreateSuccess=You successfully created a character!
CharacterCreateNullInfo=There's not enough info!
[CommandTeey]
TeeyInfo=Teey yourself back into existance, or teey a friend with @!
[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!
[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
[CommandRPEnd]
RPEndError=You can't end this RP!
RPEndInfo=Ends RP in channel and gives you a .txt file!
RPEndFileOut=Here's your file!
[CommandBoop]
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!
[CommandPing]
PingResponse=Pong!
PingInfo=Will respond with Pong!
[CommandChoose]
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]
EightBallYes4=Yes - definitely.
EightBallYes3=Without a doubt.
EightBallYes2=It is decidedly so.
EightBallYes1=It is certain.
EightBallYes8=Outlook good.
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.
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.
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
[CommandRaffleJoin]
RaffleJoinFailure=You can't join the raffle ;3;
RaffleJoinInfo=
RaffleJoinSuccess=You joined the raffle!
[CommandDBFlush]
DBFlushInfo=Takes all objects queued for the database and writes them to the database, then says how many were written.
+371
View File
@@ -1,3 +1,65 @@
[[Command Management]]
[CommandEnabler]
beans=1
benchmark, bench=1
bet=1
bethistory=1
blur=1
boop=1
buildhelp=1
c++, g++, cplus, cpp=1
catch=1
charactercreate=1
charactereditbio=1
charactereditname=1
characterediturl=1
choose=1
color, colour=1
crouton=1
dbflush=1
dbstats=1
eightball, 8ball=1
fetch=1
givebeans=1
guildroleadd=1
guildroleallowed=1
guildrolelist=1
guildrolenotallowed=1
guildroleremove=1
help=1
indicator=1
info, about=1
invite=1
java, jdoodle=1
leaderboard=1
map=1
perish, thenperish=1
ping=1
poll=1
raffleend=1
rafflejoin=1
rafflespin=1
rafflestart=1
rating=1
results=1
role=1
roll=1
rpend=1
rpg=1
rpstart=1
searchcharacter=1
showpoll=1
shutdown=1
stats=1
teey=1
tony, stark, dontfeelgood, dontfeelsogood=1
tweet=1
vote=1
wolfram=1
work=1
yeet=1
[[Command Localization]]
[ObjectBuilderFactory] [ObjectBuilderFactory]
indicator= indicator=
yeet= yeet=
@@ -58,4 +120,313 @@ fetch=
crouton= crouton=
invite= invite=
[[String Localization]]
[CommandBenchmark]
BenchmarkInfo=Allows you to lookup PC component benchmarks from UserBenchmark! You can use `bench find <name-snippet>` to see what's in the database, `bench info <name-snippet>` to look at a specific component, or the experimental `bench compare` commands!
BenchmarkInvalid=The benchmark operation you were trying to perform was invalid!
[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
[CommandGuildRoleNotAllowed]
GuildRoleNotAllowedFailure=
GuildRoleNotAllowedSuccess=
GuildRoleNotAllowedInfo=
[CommandBetHistory]
BetHistoryOutput=Kitty has %s beans!
BetHistoryInfo=Sees the amount of beans Kitty has earned through your bets!
[CommandCatch]
CatchInfo=Play catch with yourself or with a friend with @!
[CommandLeaderboard]
LeaderboardInfo=Shows you the 10 users with the most beans on the server
LeaderboardTitle=Server Leaderboard
[CommandGuildRoleList]
GuildRoleListOutput=The allowed roles are %s!
GuildRoleListEmpty=There are no roles allowed!
GuildRoleListInfo=Outputs a list of the roles you are allowed to add to yourself!
[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
[CommandGuildRoleAllowed]
GuildRoleAllowedInfo=
GuildRoleAllowedSuccess=Added %s to the allowed roles!
GuildRoleAllowedDuplicate=Can't add the same role twice!
[CommandStats]
StatsInfo=Displays the actively running KittyBot application information
[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 %s
RoleError=You aren't allowed to do that! You must have the KittyRole '%s' or higher!
RoleChanged=Changed %s to role `%s`!
RoleNeededRole=Please enter `general`, `mod`, or `admin`!
[CommandJDoodle]
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`
[CommandPerish]
PerishInfo=Adds a red, 'a n g e r y' overlay to your icon or the icon of a friend you mentioned
[CommandTradeBeans]
TradeBeanseStealingBeans=Stealing is wrong! *Steals 10 beans from %s*
TradeBeansNoTargetError=You have to give *someone* your beans!
TradeBeansSuccess=%s gave %s %s of their beans!
TradeBeansStealingBeans=
TradeBeansInfo=Gives another person some of your beans! Use is `tradebeans amount @person`!
TradeBeansIntParseError=That's not a real number!
TradeBeansNotEnoughError=You don't have enough beans!
[CommandPollVote]
PollVoteNotValidNumber=That's not a vaild number!
PollVoteInfo=Vote in a poll with the choice number, won't work if no poll is running, you can't change your vote once you have cast it! Be careful!
PollVoteNoPoll=There is no poll running!
PollVoteAlreadyVoted=You already voted
PollVoteNotValidVote=%s That's not a vaild vote!
PollVoteSuccess=You successfully voted for
[CommandShutdown]
ShutdownSafe=Shutting down, but first syncing database and finishing current threads.
ShutdownUnsafe=Shutting down and immediately and abandoning all threads without sync.
ShutdownInfo=Stops kitty. `-s` or `safe` as an argument attempts to sync off the database before shutdown.
[CommandRaffleSpin]
RaffleSpinInfo=
RaffleSpinSuccess=The winner issssssss %s!
RaffleSpinFailure=I can't choose a winner D:
[CommandRaffleEnd]
RaffleEndSuccess=
RaffleEndInfo=
RaffleEndFailure=I don't think there's one going!
[CommandCharacterSearch]
CharacterSearchNoCharacterFound=Couldn't find a character with that name or ID!
CharacterSearchMultipleCharacterHeader=I found a couple characters with that name, use `charactersearch UniqueID` with their Unique ID to find them!
CharacterSearchMultipleCharacter=%s is owned by %s. Unique ID is `%s`
CharacterSearchOneCharacter=I found one character with that name! \n Owner: %s | Name: %s | Bio: %s | Ref: <%s> | Unique ID: `%s`
CharacterSearchInfo=Find a character with their name or Unique ID! `charactersearch name` or `charactersearch UniqueID`
[CommandColor]
ColorNotSearchable=Your color couldn't be parsed! Make sure it's in hex format. Try this! `!color 3F5D54`
ColorInfo=Looks up the provided hex color and outputs it as hex, rgb, hsl, hsv, xyz, and cmyk. Also attempts to name the color, and provies a sample of it! Usage example: `!color #365345` (the # can be omitted)
[CommandDoWork]
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!
[CommandBlurry]
BlurryInfo=Blurs your icon or the icon of a friend you mentioned
[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
[CommandDBStats]
DBStatsInfo=
[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!
[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
[CommandHelpBuilder]
HelpBuilderInfo=Emit help for all commands as formatted HTML
[CommandCharacterEditURL]
CharacterEditURLInfo=
CharacterEditURLNotValid=
CharacterEditURLSuccess=
CharacterEditURLNotAuth=
CharacterEditURLIDNotValid=
[CommandRPG]
RPGInfo=Admin+ command only right now - experimental text RPG! Format is !rpg <rpg command>
RPGInvalid=Invalid RPG Command!
[CommandFetch]
FetchError=That no picture!
FetchEat=Me eat now *monch %s*
FetchInfo=Throw a custom emote and me bring it back!
FetchCatchRun=*Catches and runs away with %s*
FetchRunAway=*Runs away and doesn't return for a long time*
FetchBringBack=Me gots it! %s
FetchBringBackWrong=Me gots it! %s
FetchStare=*Stares at %s*
[CommandInfo]
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
[CommandGuildRoleRemove]
GuildRoleRemoveNotAllowed=You're not allowed to add %s
GuildRoleRemoveFailure=Couldn't remove %s from %s
GuildRoleRemoveSuccess=Removed %s from %s!
GuildRoleRemoveInfo=Removes the role specified!
[CommandWolfram]
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=Generates a map! You can pass additional information if you want with the flags `-s<seed> -w<width> -h<height>`. 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\n**Defaults**\nDefault Seed: Random,\nDefault Width: 35(max %s),\nDefault Height: 25(max %s)\n\n**Key**\nLand: ˶\nMountain: ▲\nBeach: =\nMarsh: ¥\nLava: #
MapSeed=Seed
MapInvalid=Invalid arguments provided!
MapVersion=Using mapgen v0.1
MapWidth=Width
MapHeight=Height
[CommandBeansShow]
BeansShowDisplay=You have %s beans!
BeansShowMentioned=I looked it up and %sbeans!
BeansShowInfo=Displays how many beans you have
[CommandRaffleStart]
RaffleStartSuccess=Started a raffle with an entrance fee of %s beans!
RaffleStartFailure=There's already a raffle going!
RaffleStart=
RaffleStartInfo=
[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`
[CommandCharacterEditBio]
CharacterEditBioSuccess=
CharacterEditBioIDNotValid=
CharacterEditBioNotAuth=
CharacterEditBioInfo=
CharacterEditBioNotValid=
[CommandTweet]
TweetInfo=Kitty will tweet to her personal twitter account
TweetError=Tweet command failed!
[CommandGuildRoleAdd]
GuildRoleAddSuccess=Added %s to %s
GuildRoleAddFailure=Failed to add %s to %s
GuildRoleAddNotAllowed=You are not allowed to add %s!
GuildRoleAddInfo=Add a role to yourself!
[CommandCharacterEditName]
CharacterEditNameInfo=
CharacterEditNameNotValid=
CharacterEditNameIDNotValid=
CharacterEditNameSuccess=
CharacterEditNameNotAuth=
[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++.
[CommandStark]
StarkInfo=Snaps your icon or the icon of a friend you mentioned
[CommandYeet]
YeetInfo=Yeet yourself or yeet a friend with @!
[CommandCrouton]
CroutonInfo=Crouton
[CommandCharacterCreate]
CharacterCreateDuplicate=You can't create a character with the same name!
CharacterCreateInfo=Create a character for kitty to hold onto for you! `createcharacter name, shortbio, refURL`
CharacterCreateSuccess=You successfully created a character!
CharacterCreateNullInfo=There's not enough info!
[CommandTeey]
TeeyInfo=Teey yourself back into existance, or teey a friend with @!
[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!
[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
[CommandRPEnd]
RPEndError=You can't end this RP!
RPEndInfo=Ends RP in channel and gives you a .txt file!
RPEndFileOut=Here's your file!
[CommandBoop]
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!
[CommandPing]
PingResponse=Pong!
PingInfo=Will respond with Pong!
[CommandChoose]
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]
EightBallYes4=Yes - definitely.
EightBallYes3=Without a doubt.
EightBallYes2=It is decidedly so.
EightBallYes1=It is certain.
EightBallYes8=Outlook good.
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.
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.
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
[CommandRaffleJoin]
RaffleJoinFailure=You can't join the raffle ;3;
RaffleJoinInfo=
RaffleJoinSuccess=You joined the raffle!
[CommandDBFlush]
DBFlushInfo=Takes all objects queued for the database and writes them to the database, then says how many were written.
+28 -50
View File
@@ -1,17 +1,10 @@
package core; package core;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.ListIterator; import java.util.ListIterator;
import java.util.function.Consumer; import java.util.function.Consumer;
import dataStructures.Pair; import dataStructures.Pair;
import utils.GlobalLog;
import utils.LogFilter;
import utils.io.FileUtils;
public class BaseKeyValueFile public class BaseKeyValueFile
{ {
@@ -21,70 +14,55 @@ public class BaseKeyValueFile
public static final String pairSplit = "="; public static final String pairSplit = "=";
public static final char pairSeparator = '\n'; public static final char pairSeparator = '\n';
protected final String filename;
protected final String header; protected final String header;
// Constructor // Constructor
public BaseKeyValueFile(String filename) public BaseKeyValueFile()
{ {
this.filename = filename;
this.header = headerStart + this.getClass().getSimpleName() + headerEnd; this.header = headerStart + this.getClass().getSimpleName() + headerEnd;
} }
// Reads in and calls the specifid function for each keyvalue pair we find // Reads in and calls the specifid function for each keyvalue pair we find
protected void parse(Consumer<? super Pair<String, String>> keyValueCallback) protected void parse(String content, Consumer<? super Pair<String, String>> keyValueCallback)
{ {
File f = new File(filename); content = content.trim();
if(f.isFile() && f.canRead()) String[] lines = content.split("" + pairSeparator);
for(int i = 0; i < lines.length; ++i)
{ {
String content = FileUtils.readContent(f).trim(); if(lines[i].contains(header))
String[] lines = content.split("" + pairSeparator); continue;
for(int i = 0; i < lines.length; ++i) String[] pair = lines[i].split(pairSplit);
{
if(lines[i].contains(header))
continue;
String[] pair = lines[i].split(pairSplit); if(pair.length < 2)
continue;
if(pair.length < 2) String key = pair[0].trim().toLowerCase();
continue; String value = pair[1].trim().toLowerCase();
String key = pair[0].trim().toLowerCase(); keyValueCallback.accept(new Pair<String, String>(key, value));
String value = pair[1].trim().toLowerCase();
keyValueCallback.accept(new Pair<String, String>(key, value));
}
} }
} }
// Writes out a set of keyvalue pairs // Writes the set of keyvalue pairs to a string
protected void write(List<Pair<String, String>> toWrite) protected String write(List<Pair<String, String>> toWrite)
{ {
try ListIterator<Pair<String, String>> iter = toWrite.listIterator();
String outString = "";
outString += header + pairSeparator;
while(iter.hasNext())
{ {
ListIterator<Pair<String, String>> iter = toWrite.listIterator(); Pair<String, String> pair = iter.next();
String key = pair.First.toLowerCase();
String value = pair.Second.toLowerCase();
String outString = ""; outString += key + pairSplit + value + pairSeparator;
outString += header + pairSeparator;
while(iter.hasNext())
{
Pair<String, String> pair = iter.next();
String key = pair.First.toLowerCase();
String value = pair.Second.toLowerCase();
outString += key + pairSplit + value + pairSeparator;
}
BufferedWriter writer = new BufferedWriter(new FileWriter(filename));
writer.write(outString);
writer.close();
}
catch (IOException e)
{
GlobalLog.error(LogFilter.Core, "Issue writing file " + filename + ": " + e.getMessage());
} }
return outString;
} }
} }
+1 -4
View File
@@ -13,9 +13,6 @@ import utils.io.FileUtils;
// generates/updates a file externally with all the stub values as keys that are localized. // generates/updates a file externally with all the stub values as keys that are localized.
public abstract class BaseLocFile public abstract class BaseLocFile
{ {
// Pre-defined values
public static final String KittySourceDirectory = "./src";
// Filename // Filename
public final String functionName; // Example: "Localizer.Stub"; public final String functionName; // Example: "Localizer.Stub";
@@ -130,7 +127,7 @@ public abstract class BaseLocFile
public void scrapeAll() public void scrapeAll()
{ {
ArrayList<LocInfo> localizeList = new ArrayList<LocInfo>(); ArrayList<LocInfo> localizeList = new ArrayList<LocInfo>();
FileUtils.acquireAllFiles(KittySourceDirectory).forEach((path) -> tryStripSpecified(path, localizeList)); FileUtils.acquireAllFiles(Constants.SourceDirectory).forEach((path) -> tryStripSpecified(path, localizeList));
for(LocInfo toStub : localizeList) for(LocInfo toStub : localizeList)
stringStore.addKeyValue(toStub.file, toStub.phrase, toStub.phrase); stringStore.addKeyValue(toStub.file, toStub.phrase, toStub.phrase);
+26 -28
View File
@@ -19,32 +19,38 @@ public class CommandEnabler extends BaseKeyValueFile implements IConfigSection
public static final String enabled = "1"; public static final String enabled = "1";
public static final String disabled = "0"; public static final String disabled = "0";
public static final boolean defaultEnabledState = true; public static final boolean defaultEnabledState = true;
public static final String HeaderName = "Command Management";
// Local variables // Local variables
private HashMap<String, Boolean> enabledMap; // Quick lookup private HashMap<String, Boolean> enabledMap; // Quick lookup
private ArrayList<String> keyList; // Tracking ordering for later private ArrayList<String> keyList; // Tracking ordering for later
private final static String name = Constants.AssetDirectory + "commands.config";
public static CommandEnabler instance;
// Constructor // Constructor
public CommandEnabler() public CommandEnabler()
{ {
super(name); super();
// Create/Init variables if(instance == null)
GlobalLog.log(LogFilter.Core, "Initializing " + this.getClass().getSimpleName()); {
enabledMap = new HashMap<>(); // Create/Init variables
keyList = new ArrayList<>(); GlobalLog.log(LogFilter.Core, "Initializing " + this.getClass().getSimpleName());
enabledMap = new HashMap<>();
keyList = new ArrayList<>();
// Startup instance = this;
readIn(); }
getTrackedCommands(); else
writeOut(); {
GlobalLog.error(LogFilter.Core, "You can't have two of the following: " + this.getClass().getSimpleName());
}
} }
// Reads in the config file and parses it, keeping tabs on the order it read things // Reads in the config file and parses it, keeping tabs on the order it read things
private void readIn() private void readIn(String contents)
{ {
parse((pair) ->{ parse(contents, (pair) ->{
String key = pair.First; String key = pair.First;
String value = pair.Second; String value = pair.Second;
@@ -76,7 +82,7 @@ public class CommandEnabler extends BaseKeyValueFile implements IConfigSection
} }
// Write out enabled/disabled file info. // Write out enabled/disabled file info.
private void writeOut() private String writeOut()
{ {
List<Pair<String, String>> list = new Vector<Pair<String, String>>(); List<Pair<String, String>> list = new Vector<Pair<String, String>>();
@@ -93,7 +99,7 @@ public class CommandEnabler extends BaseKeyValueFile implements IConfigSection
Collections.sort(list, (c1, c2) -> { return c1.First.compareTo(c2.First); }); Collections.sort(list, (c1, c2) -> { return c1.First.compareTo(c2.First); });
write(list); return write(list);
} }
// Looks up a key to see if it's enabled or not // Looks up a key to see if it's enabled or not
@@ -109,25 +115,17 @@ public class CommandEnabler extends BaseKeyValueFile implements IConfigSection
@Override @Override
public String getHeader() { public String getHeader() {
// TODO Auto-generated method stub return HeaderName;
return null;
} }
@Override @Override
public void preUpdate() { public void read(String contents) {
// TODO Auto-generated method stub getTrackedCommands();
readIn(contents);
} }
@Override @Override
public void init() { public String write() {
// TODO Auto-generated method stub return writeOut();
}
@Override
public String getContent() {
// TODO Auto-generated method stub
return null;
} }
} }
+96 -15
View File
@@ -1,9 +1,10 @@
package core; package core;
import java.io.File; import java.io.File;
import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap;
import java.util.Vector; import java.util.Vector;
import utils.GlobalLog; import utils.GlobalLog;
import utils.LogFilter; import utils.LogFilter;
import utils.io.FileMonitor; import utils.io.FileMonitor;
@@ -15,11 +16,6 @@ public class Config
public static Config instance; public static Config instance;
// Accessable config related things
public LocStrings locStrings;
public LocCommands locCommands;
public CommandEnabler commandEnabler;
// Private // Private
private Vector<IConfigSection> sections; private Vector<IConfigSection> sections;
private FileMonitor monitoredConfigFile; private FileMonitor monitoredConfigFile;
@@ -32,9 +28,9 @@ public class Config
sections = new Vector<IConfigSection>(); sections = new Vector<IConfigSection>();
// Add all sections // Add all sections
sections.add(new CommandEnabler());
sections.add(new LocStrings());
sections.add(new LocCommands()); sections.add(new LocCommands());
sections.add(new LocStrings());
sections.add(new CommandEnabler());
// Read file in and parse everything out // Read file in and parse everything out
performStartup(); performStartup();
@@ -50,13 +46,14 @@ public class Config
} }
} }
// Perform startup
private void performStartup() private void performStartup()
{ {
File configFile = new File(filepath); File configFile = new File(filepath);
if(configFile.exists()) if(configFile.exists())
{ {
String configContents = FileUtils.readContent(configFile); reformConfig(configFile);
reformConfig(configContents);
} }
else else
{ {
@@ -72,20 +69,104 @@ public class Config
} }
} }
private void reformConfig(String fullContents) public static final String sectionStart = "[[";
public static final String sectionEnd = "]]";
public static final String headerStart = "[";
public static final String headerEnd = "]";
public static final String pairSplit = "=";
public static final String pairSeparator = "\n";
private void reformConfig(File configFile)
{ {
for(IConfigSection section : sections) // Read and update
String configContents = FileUtils.readContent(configFile);
readConfigs(configContents);
// Form updated data as necessary for autogeneration
String output = combineConfigs();
String path = configFile.getPath();
// Write to file.
FileWriter fileWriter;
try
{ {
// Parse stuff and sections here based on interface fileWriter = new FileWriter(path);
fileWriter.write(output);
fileWriter.close();
} }
catch (IOException e)
{
GlobalLog.error(LogFilter.Core, "Config writing failure.");
GlobalLog.error(LogFilter.Core, e.getMessage());
}
}
public void readConfigs(String fullContents)
{
String[] str = fullContents.split(pairSeparator);
HashMap<String, String> parsedSections = new HashMap<String, String>();
String currentHeader = "";
for(int i = 0; i < str.length; ++i)
{
String line = str[i].trim();
if(line.startsWith(sectionStart) && line.endsWith(sectionEnd))
{
currentHeader = line.substring(sectionStart.length(), line.length() - sectionEnd.length());
}
else
{
String sectionContents = parsedSections.getOrDefault(currentHeader, "");
parsedSections.put(currentHeader, sectionContents);
}
}
for(int i = 0; i < sections.size(); ++i)
{
IConfigSection section = sections.get(i);
String header = section.getHeader();
String content = parsedSections.getOrDefault(header, null);
if(content != null)
{
section.read(content);
}
else
{
GlobalLog.warn(LogFilter.Core, "Mismatch during config parsing - expected but did not find " + header);
}
}
}
public String combineConfigs()
{
String output = "";
for(int i = 0; i < sections.size(); ++i)
{
// If not the first section, add spacing!
if(i != 0)
{
for(int spacing = 0; spacing < 3; ++spacing)
{
output += pairSeparator;
}
}
IConfigSection section = sections.get(i);
output += sectionStart + section.getHeader() + sectionEnd + pairSeparator;
output += section.write() + pairSeparator;
}
return output;
} }
public void upkeep() public void upkeep()
{ {
monitoredConfigFile.update((monitoredFile) -> { monitoredConfigFile.update((monitoredFile) -> {
File configFile = new File(filepath); File configFile = new File(filepath);
String configContents = FileUtils.readContent(configFile); reformConfig(configFile);
reformConfig(configContents);
}); });
} }
+1
View File
@@ -8,4 +8,5 @@ public final class Constants
public static final Color ColorDefault = new Color(7*16, 8*16, 9*16); // A slate-grey public static final Color ColorDefault = new Color(7*16, 8*16, 9*16); // A slate-grey
public static final String AssetDirectory = "./assets/"; public static final String AssetDirectory = "./assets/";
public static final String ConfigFilename = "config.config"; public static final String ConfigFilename = "config.config";
public static final String SourceDirectory = "./src";
} }
+2 -3
View File
@@ -3,7 +3,6 @@ package core;
public abstract interface IConfigSection public abstract interface IConfigSection
{ {
public abstract String getHeader(); public abstract String getHeader();
public abstract void preUpdate(); public abstract void read(String contents);
public abstract void init(); public abstract String write();
public abstract String getContent();
} }
+6 -14
View File
@@ -46,25 +46,17 @@ public class LocCommands extends BaseLocFile implements IConfigSection
@Override @Override
public String getHeader() { public String getHeader() {
// TODO Auto-generated method stub return HeaderName;
return null;
} }
@Override @Override
public void preUpdate() { public void read(String contents) {
// TODO Auto-generated method stub updateLocFromString(contents);
scrapeAll();
} }
@Override @Override
public void init() { public String write() {
// TODO Auto-generated method stub return super.toString();
}
@Override
public String getContent() {
// TODO Auto-generated method stub
return null;
} }
} }
+7 -15
View File
@@ -8,7 +8,7 @@ import utils.LogFilter;
// can then be localized. // can then be localized.
public class LocStrings extends BaseLocFile implements IConfigSection public class LocStrings extends BaseLocFile implements IConfigSection
{ {
public static final String fileName = Constants.AssetDirectory + "locStrings.config"; public static final String HeaderName = "Localized Strings";
public static final String function = "LocStrings.stub"; public static final String function = "LocStrings.stub";
private static LocStrings instance; private static LocStrings instance;
@@ -42,25 +42,17 @@ public class LocStrings extends BaseLocFile implements IConfigSection
@Override @Override
public String getHeader() { public String getHeader() {
// TODO Auto-generated method stub return HeaderName;
return null;
} }
@Override @Override
public void preUpdate() { public void read(String contents) {
// TODO Auto-generated method stub updateLocFromString(contents);
scrapeAll();
} }
@Override @Override
public void init() { public String write() {
// TODO Auto-generated method stub return super.toString();
}
@Override
public String getContent() {
// TODO Auto-generated method stub
return null;
} }
} }
+1 -1
View File
@@ -49,7 +49,7 @@ public class Main extends ListenerAdapter
// Factory startup. The ordering is intentional. // Factory startup. The ordering is intentional.
GlobalLog.initialize(); GlobalLog.initialize();
databaseManager = ObjectBuilderFactory.constructDatabaseManager(); databaseManager = ObjectBuilderFactory.constructDatabaseManager();
commandManager = ObjectBuilderFactory.constructCommandManager(Config.instance.commandEnabler); commandManager = ObjectBuilderFactory.constructCommandManager(CommandEnabler.instance); // TODO: Untangle this singleton
stats = ObjectBuilderFactory.constructStats(commandManager); stats = ObjectBuilderFactory.constructStats(commandManager);
charManager = new CharacterManager(); charManager = new CharacterManager();
rpManager = ObjectBuilderFactory.constructRPManager(); rpManager = ObjectBuilderFactory.constructRPManager();