= Iterative step - config reading but improper writing
This commit is contained in:
@@ -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.
|
||||||
|
|
||||||
|
|
||||||
@@ -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.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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))
|
if(pair.length < 2)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
String[] pair = lines[i].split(pairSplit);
|
String key = pair[0].trim().toLowerCase();
|
||||||
|
String value = pair[1].trim().toLowerCase();
|
||||||
if(pair.length < 2)
|
|
||||||
continue;
|
keyValueCallback.accept(new Pair<String, String>(key, value));
|
||||||
|
|
||||||
String key = pair[0].trim().toLowerCase();
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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<>();
|
||||||
// Startup
|
keyList = new ArrayList<>();
|
||||||
readIn();
|
|
||||||
getTrackedCommands();
|
instance = this;
|
||||||
writeOut();
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+97
-16
@@ -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;
|
||||||
@@ -14,12 +15,7 @@ public class Config
|
|||||||
private static final String filepath = Constants.AssetDirectory + Constants.ConfigFilename;
|
private static final String filepath = Constants.AssetDirectory + Constants.ConfigFilename;
|
||||||
|
|
||||||
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);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user