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 ff56f10..e2280cb 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
color, colour=1
crouton=1
@@ -43,6 +46,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 0000000..a94b728
Binary files /dev/null and b/lib/fuzzywuzzy-1.2.0.jar differ
diff --git a/locCommands.config b/locCommands.config
index 26a3701..3a35955 100644
--- a/locCommands.config
+++ b/locCommands.config
@@ -7,6 +7,7 @@ benchmark, bench=
rating=
poll=
rafflespin=
+charactereditURL=
bet=
guildrolelist=
stats=
@@ -31,6 +32,7 @@ tony, stark, dontfeelgood, dontfeelsogood=
role=
raffleend=
ping=
+charactereditbio=
roll=
blur=
choose=
@@ -38,6 +40,7 @@ rpstart=
guildrolenotallowed=
perish, thenperish=
teey=
+searchcharacter=
dbstats=
rafflestart=
beans=
@@ -50,6 +53,7 @@ rpg=
tweet=
charactercreate=
help=
+charactereditname=
fetch=
crouton=
invite=
diff --git a/locStrings.config b/locStrings.config
index cfe7b88..f5358b0 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`
+
[CommandColor]
ColorInfo=
@@ -126,6 +133,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!
@@ -178,6 +192,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!
@@ -188,6 +209,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++.
@@ -202,10 +230,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 5fee819..e0e3398 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));
manager.Register(LocCommands.Stub("color, colour"), new CommandColor(KittyRole.General, KittyRating.Safe));
@@ -504,4 +508,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;