From d54d839ab5170fd639b01aa781b2c3348fb7cfcb Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 18 Jun 2019 02:11:36 -0400 Subject: [PATCH] =Finished Character Database TODO: Make the output... prettier --- .classpath | 1 + commands.config | 4 ++ lib/fuzzywuzzy-1.2.0.jar | Bin 0 -> 40822 bytes locCommands.config | 4 ++ locStrings.config | 36 ++++++++-- src/commands/CommandCharacterCreate.java | 5 +- src/commands/CommandCharacterEditBio.java | 38 +++++++++++ src/commands/CommandCharacterEditName.java | 38 +++++++++++ src/commands/CommandCharacterEditURL.java | 38 +++++++++++ src/commands/CommandCharacterSearch.java | 40 +++++++++++ src/core/CharacterManager.java | 75 ++++++++++++--------- src/core/ObjectBuilderFactory.java | 6 +- src/dataStructures/KittyCharacter.java | 36 ++++------ 13 files changed, 261 insertions(+), 60 deletions(-) create mode 100644 lib/fuzzywuzzy-1.2.0.jar create mode 100644 src/commands/CommandCharacterEditBio.java create mode 100644 src/commands/CommandCharacterEditName.java create mode 100644 src/commands/CommandCharacterEditURL.java create mode 100644 src/commands/CommandCharacterSearch.java diff --git a/.classpath b/.classpath index 7c63137..148f4f1 100644 --- a/.classpath +++ b/.classpath @@ -14,5 +14,6 @@ + diff --git a/commands.config b/commands.config index 14ef218..cd96416 100644 --- a/commands.config +++ b/commands.config @@ -9,6 +9,9 @@ buildhelp=1 c++, g++, cplus, cpp=1 catch=1 charactercreate=1 +charactereditbio=1 +charactereditname=1 +characterediturl=1 choose=1 crouton=1 dbflush=1 @@ -42,6 +45,7 @@ roll=1 rpend=1 rpg=1 rpstart=1 +searchcharacter=1 showpoll=1 shutdown=1 stats=1 diff --git a/lib/fuzzywuzzy-1.2.0.jar b/lib/fuzzywuzzy-1.2.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..a94b7280de824ac616968fe8ccfd7137fab85824 GIT binary patch literal 40822 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 AM*si- literal 0 HcmV?d00001 diff --git a/locCommands.config b/locCommands.config index bbad5ef..21cc96e 100644 --- a/locCommands.config +++ b/locCommands.config @@ -7,6 +7,7 @@ benchmark, bench= rating= poll= rafflespin= +charactereditURL= bet= guildrolelist= stats= @@ -30,6 +31,7 @@ tony, stark, dontfeelgood, dontfeelsogood= role= raffleend= ping= +charactereditbio= roll= blur= choose= @@ -37,6 +39,7 @@ rpstart= guildrolenotallowed= perish, thenperish= teey= +searchcharacter= dbstats= rafflestart= beans= @@ -49,6 +52,7 @@ rpg= tweet= charactercreate= help= +charactereditname= fetch= crouton= invite= diff --git a/locStrings.config b/locStrings.config index e171a11..4ce236d 100644 --- a/locStrings.config +++ b/locStrings.config @@ -89,6 +89,13 @@ 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` + [CommandDoWork] DoWorkFinished=I finished with my work! :D DoWorkInfo=Occupies a core for a few seconds @@ -123,6 +130,13 @@ 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 RPGInvalid=Invalid RPG Command! @@ -175,6 +189,13 @@ RaffleStartInfo= 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! @@ -185,6 +206,13 @@ 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++. @@ -199,10 +227,10 @@ YeetInfo=Yeet yourself or yeet a friend with @! CroutonInfo=Crouton [CommandCharacterCreate] -CharacterCreateDuplicate= -CharacterCreateInfo= -CharacterCreateSuccess= -CharacterCreateNullInfo= +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 @! diff --git a/src/commands/CommandCharacterCreate.java b/src/commands/CommandCharacterCreate.java index 2ab4c07..12a22c5 100644 --- a/src/commands/CommandCharacterCreate.java +++ b/src/commands/CommandCharacterCreate.java @@ -13,7 +13,7 @@ import dataStructures.UserInput; public class CommandCharacterCreate extends Command { -public CommandCharacterCreate(KittyRole level, KittyRating rating) { super(level, rating); } + public CommandCharacterCreate(KittyRole level, KittyRating rating) { super(level, rating); } @Override public String HelpText() { return LocStrings.Stub("CharacterCreateInfo"); } @@ -33,6 +33,5 @@ public CommandCharacterCreate(KittyRole level, KittyRating rating) { super(level return; } res.Call(LocStrings.Stub("CharacterCreateDuplicate")); - - } + } } \ No newline at end of file diff --git a/src/commands/CommandCharacterEditBio.java b/src/commands/CommandCharacterEditBio.java new file mode 100644 index 0000000..52b57c7 --- /dev/null +++ b/src/commands/CommandCharacterEditBio.java @@ -0,0 +1,38 @@ +package commands; + +import core.CharacterManager; +import core.Command; +import core.LocStrings; +import dataStructures.*; + +public class CommandCharacterEditBio extends Command +{ + public CommandCharacterEditBio(KittyRole level, KittyRating rating) { super(level, rating); } + + @Override + public String HelpText() { return LocStrings.Stub("CharacterEditBioInfo"); } + + @Override + public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + { + try + { + Long.parseLong(input.args.split(" ")[0]); + } + catch(Exception e) + { + res.Call(LocStrings.Stub("CharacterEditBioNotValid")); + return; + } + KittyCharacter character = CharacterManager.instance.searchCharacter(input.args.split(" ")[0]).get(0); + if(character.getOwner().equals(user)) + { + CharacterManager.instance.editBio(character, input.args.substring(input.args.indexOf(' '))); + res.Call(LocStrings.Stub("CharacterEditBioSuccess")); + } + else + { + res.Call(LocStrings.Stub("CharacterEditBioNotAuth")); + } + } +} \ No newline at end of file diff --git a/src/commands/CommandCharacterEditName.java b/src/commands/CommandCharacterEditName.java new file mode 100644 index 0000000..0fadb64 --- /dev/null +++ b/src/commands/CommandCharacterEditName.java @@ -0,0 +1,38 @@ +package commands; + +import core.CharacterManager; +import core.Command; +import core.LocStrings; +import dataStructures.*; + +public class CommandCharacterEditName extends Command +{ + public CommandCharacterEditName(KittyRole level, KittyRating rating) { super(level, rating); } + + @Override + public String HelpText() { return LocStrings.Stub("CharacterEditNameInfo"); } + + @Override + public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + { + try + { + Long.parseLong(input.args.split(" ")[0]); + } + catch(Exception e) + { + res.Call(LocStrings.Stub("CharacterEditNameNotValid")); + return; + } + KittyCharacter character = CharacterManager.instance.searchCharacter(input.args.split(" ")[0]).get(0); + if(character.getOwner().equals(user)) + { + CharacterManager.instance.editName(character, input.args.substring(input.args.indexOf(' '))); + res.Call(LocStrings.Stub("CharacterEditNameSuccess")); + } + else + { + res.Call(LocStrings.Stub("CharacterEditNameNotAuth")); + } + } +} \ No newline at end of file diff --git a/src/commands/CommandCharacterEditURL.java b/src/commands/CommandCharacterEditURL.java new file mode 100644 index 0000000..887468a --- /dev/null +++ b/src/commands/CommandCharacterEditURL.java @@ -0,0 +1,38 @@ +package commands; + +import core.CharacterManager; +import core.Command; +import core.LocStrings; +import dataStructures.*; + +public class CommandCharacterEditURL extends Command +{ + public CommandCharacterEditURL(KittyRole level, KittyRating rating) { super(level, rating); } + + @Override + public String HelpText() { return LocStrings.Stub("CharacterEditURLInfo"); } + + @Override + public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + { + try + { + Long.parseLong(input.args.split(" ")[0]); + } + catch(Exception e) + { + res.Call(LocStrings.Stub("CharacterEditURLNotValid")); + return; + } + KittyCharacter character = CharacterManager.instance.searchCharacter(input.args.split(" ")[0]).get(0); + if(character.getOwner().equals(user)) + { + CharacterManager.instance.editRefImage(character, input.args.substring(input.args.indexOf(' '))); + res.Call(LocStrings.Stub("CharacterEditURLSuccess")); + } + else + { + res.Call(LocStrings.Stub("CharacterEditURLNotAuth")); + } + } +} \ No newline at end of file diff --git a/src/commands/CommandCharacterSearch.java b/src/commands/CommandCharacterSearch.java new file mode 100644 index 0000000..56ce5a6 --- /dev/null +++ b/src/commands/CommandCharacterSearch.java @@ -0,0 +1,40 @@ +package commands; + +import java.util.ArrayList; + +import core.CharacterManager; +import core.Command; +import core.LocStrings; +import dataStructures.*; + +public class CommandCharacterSearch extends Command +{ + public CommandCharacterSearch(KittyRole level, KittyRating rating) { super(level, rating); } + + @Override + public String HelpText() { return LocStrings.Stub("CharacterSearchInfo"); } + + @Override + public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + { + ArrayList characters = CharacterManager.instance.searchCharacter(input.args); + if(characters.size() < 1) + { + res.Call(LocStrings.Stub("CharacterSearchNoCharacterFound")); + return; + } + if(characters.size() > 1) + { + res.Call(LocStrings.Stub("CharacterSearchMultipleCharacterHeader")); + for(KittyCharacter character:characters) + { + res.Call(String.format(LocStrings.Stub("CharacterSearchMultipleCharacter"), character.getName(), character.getOwner().name, character.getUID())); + } + return; + } + else + { + res.Call(String.format(LocStrings.Stub("CharacterSearchOneCharacter"), characters.get(0).getOwner().name, characters.get(0).getName(), characters.get(0).getBio(), characters.get(0).getRefImage(), characters.get(0).getUID())); + } + } +} \ No newline at end of file diff --git a/src/core/CharacterManager.java b/src/core/CharacterManager.java index caa40ed..cdfb770 100644 --- a/src/core/CharacterManager.java +++ b/src/core/CharacterManager.java @@ -1,15 +1,19 @@ package core; +import java.util.ArrayList; import java.util.Vector; import dataStructures.KittyCharacter; +import dataStructures.KittyTrackedLong; import dataStructures.KittyUser; +import me.xdrop.fuzzywuzzy.FuzzySearch; import utils.GlobalLog; import utils.LogFilter; public class CharacterManager { - public static CharacterManager instance; + public static CharacterManager instance; + KittyTrackedLong uniqueID = new KittyTrackedLong("CharacterIDCounter", ""); private Vector characters = new Vector(); public CharacterManager() @@ -25,6 +29,33 @@ public class CharacterManager } } + public ArrayList searchCharacter(String query) + { + ArrayList chars = new ArrayList(); + try + { + long UID = Long.parseLong(query); + for(KittyCharacter character:characters) + { + if(character.getUID() == UID) + { + chars.add(character); + break; + } + } + }catch(Exception e) + { + for(KittyCharacter character:characters) + { + if(FuzzySearch.ratio(query.toLowerCase(), character.getName().toLowerCase()) > 60) + { + chars.add(character); + } + } + } + return chars; + } + public boolean addCharacter(KittyUser user, String name, String bio, String refImage) { for(KittyCharacter character:characters) @@ -35,45 +66,29 @@ public class CharacterManager } } - characters.add(new KittyCharacter(user, name, bio, refImage)); + characters.add(new KittyCharacter(user, name, bio, refImage, uniqueID.Get())); + uniqueID.Add(1); return true; } - public boolean removeCharacter(KittyUser user, String name) + public void removeCharacter(KittyCharacter character, String name) { - for(KittyCharacter character:characters) - { - if(character.getName().equals(name) && character.getOwner().discordID.equals(user.discordID)) - { - characters.remove(character); - return true; - } - } - return false; + characters.remove(character); } - public boolean editRefImage(KittyUser user, String name, String refImage) + public void editRefImage(KittyCharacter character, String refImage) { - for(KittyCharacter character:characters) - { - if(character.getName().equals(name) && character.getOwner().discordID.equals(user.discordID)) - { - return character.editRefImage(user, refImage); - } - } - return false; + character.editRefImage(refImage); } - public boolean editBio(KittyUser user, String name, String bio) + public void editBio(KittyCharacter character, String bio) { - for(KittyCharacter character:characters) - { - if(character.getName().equals(name) && character.getOwner().discordID.equals(user.discordID)) - { - return character.editBio(user, bio); - } - } - return false; + character.editBio(bio); + } + + public void editName(KittyCharacter character, String name) + { + character.editName(name); } } diff --git a/src/core/ObjectBuilderFactory.java b/src/core/ObjectBuilderFactory.java index 66c8ad0..eb8cf5f 100644 --- a/src/core/ObjectBuilderFactory.java +++ b/src/core/ObjectBuilderFactory.java @@ -424,6 +424,10 @@ public class ObjectBuilderFactory manager.Register(LocCommands.Stub("benchmark, bench"), new CommandBenchmark(KittyRole.General, KittyRating.Safe)); manager.Register(LocCommands.Stub("rafflejoin"), new CommandRaffleJoin(KittyRole.General, KittyRating.Safe)); manager.Register(LocCommands.Stub("charactercreate"), new CommandCharacterCreate(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("searchcharacter"), new CommandCharacterSearch(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("charactereditbio"), new CommandCharacterEditBio(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("charactereditname"), new CommandCharacterEditName(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.Stub("charactereditURL"), new CommandCharacterEditURL(KittyRole.General, KittyRating.Safe)); manager.Register(LocCommands.Stub("leaderboard"), new CommandLeaderboard(KittyRole.General, KittyRating.Safe)); return manager; @@ -503,4 +507,4 @@ public class ObjectBuilderFactory return userCache.size(); } } -} +} \ No newline at end of file diff --git a/src/dataStructures/KittyCharacter.java b/src/dataStructures/KittyCharacter.java index 7865d3d..affef8b 100644 --- a/src/dataStructures/KittyCharacter.java +++ b/src/dataStructures/KittyCharacter.java @@ -6,43 +6,30 @@ public class KittyCharacter private String name; private String bio; private String refImage; + private long uniqueID; - public KittyCharacter(KittyUser owner, String name, String bio, String refImage) + public KittyCharacter(KittyUser owner, String name, String bio, String refImage, long uniqueID) { this.owner = owner; this.name = name; this.bio = bio; this.refImage = refImage; + this.uniqueID = uniqueID; } - - private boolean allowedToEdit(KittyUser editor) + public void editBio(String bio) { - if(editor.identifier.equals(owner.identifier)) - { - return true; - } - return false; + this.bio = bio; } - public boolean editBio(KittyUser editor, String bio) + public void editRefImage(String refImage) { - if(allowedToEdit(editor)) - { - this.bio = bio; - return true; - } - return false; + this.refImage = refImage; } - public boolean editRefImage(KittyUser editor, String refImage) + public void editName(String name) { - if(allowedToEdit(editor)) - { - this.refImage = refImage; - return true; - } - return false; + this.name = name; } public KittyUser getOwner() @@ -65,6 +52,11 @@ public class KittyCharacter return refImage; } + public long getUID() + { + return uniqueID; + } + public String toString() { return name + " " + bio + " " + refImage;