diff --git a/commands.config b/commands.config index 5833e23..14ef218 100644 --- a/commands.config +++ b/commands.config @@ -8,6 +8,7 @@ boop=1 buildhelp=1 c++, g++, cplus, cpp=1 catch=1 +charactercreate=1 choose=1 crouton=1 dbflush=1 diff --git a/locCommands.config b/locCommands.config index 830017c..bbad5ef 100644 --- a/locCommands.config +++ b/locCommands.config @@ -47,6 +47,7 @@ info, about= showpoll= rpg= tweet= +charactercreate= help= fetch= crouton= diff --git a/locStrings.config b/locStrings.config index 0147462..e171a11 100644 --- a/locStrings.config +++ b/locStrings.config @@ -198,6 +198,12 @@ YeetInfo=Yeet yourself or yeet a friend with @! [CommandCrouton] CroutonInfo=Crouton +[CommandCharacterCreate] +CharacterCreateDuplicate= +CharacterCreateInfo= +CharacterCreateSuccess= +CharacterCreateNullInfo= + [CommandTeey] TeeyInfo=Teey yourself back into existance, or teey a friend with @! diff --git a/src/commands/CommandCharacterCreate.java b/src/commands/CommandCharacterCreate.java new file mode 100644 index 0000000..2ab4c07 --- /dev/null +++ b/src/commands/CommandCharacterCreate.java @@ -0,0 +1,38 @@ +package commands; + +import core.CharacterManager; +import core.Command; +import core.LocStrings; +import dataStructures.KittyChannel; +import dataStructures.KittyGuild; +import dataStructures.KittyRating; +import dataStructures.KittyRole; +import dataStructures.KittyUser; +import dataStructures.Response; +import dataStructures.UserInput; + +public class CommandCharacterCreate extends Command +{ +public CommandCharacterCreate(KittyRole level, KittyRating rating) { super(level, rating); } + + @Override + public String HelpText() { return LocStrings.Stub("CharacterCreateInfo"); } + + @Override + public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + { + String [] info = input.args.split(","); + if(info.length < 3) + { + res.Call(LocStrings.Stub("CharacterCreateNullInfo")); + return; + } + if(CharacterManager.instance.addCharacter(user, info[0], info[1], info[2])) + { + res.Call(LocStrings.Stub("CharacterCreateSuccess")); + return; + } + res.Call(LocStrings.Stub("CharacterCreateDuplicate")); + + } +} \ No newline at end of file diff --git a/src/core/CharacterManager.java b/src/core/CharacterManager.java new file mode 100644 index 0000000..caa40ed --- /dev/null +++ b/src/core/CharacterManager.java @@ -0,0 +1,79 @@ +package core; + +import java.util.Vector; + +import dataStructures.KittyCharacter; +import dataStructures.KittyUser; +import utils.GlobalLog; +import utils.LogFilter; + +public class CharacterManager +{ + public static CharacterManager instance; + + private Vector characters = new Vector(); + public CharacterManager() + { + if(instance == null) + { + instance = this; + } + else + { + GlobalLog.Error(LogFilter.Core, "Attempted to create a second CharacterManager singleton!"); + return; + } + } + + public boolean addCharacter(KittyUser user, String name, String bio, String refImage) + { + for(KittyCharacter character:characters) + { + if(character.getName().equals(name) && character.getOwner().discordID.equals(user.discordID)) + { + return false; + } + } + + characters.add(new KittyCharacter(user, name, bio, refImage)); + return true; + } + + public boolean removeCharacter(KittyUser user, String name) + { + for(KittyCharacter character:characters) + { + if(character.getName().equals(name) && character.getOwner().discordID.equals(user.discordID)) + { + characters.remove(character); + return true; + } + } + return false; + } + + public boolean editRefImage(KittyUser user, String name, String refImage) + { + for(KittyCharacter character:characters) + { + if(character.getName().equals(name) && character.getOwner().discordID.equals(user.discordID)) + { + return character.editRefImage(user, refImage); + } + } + return false; + } + + public boolean editBio(KittyUser user, String name, String bio) + { + for(KittyCharacter character:characters) + { + if(character.getName().equals(name) && character.getOwner().discordID.equals(user.discordID)) + { + return character.editBio(user, bio); + } + } + return false; + } + +} diff --git a/src/core/ObjectBuilderFactory.java b/src/core/ObjectBuilderFactory.java index f26367b..66c8ad0 100644 --- a/src/core/ObjectBuilderFactory.java +++ b/src/core/ObjectBuilderFactory.java @@ -423,6 +423,7 @@ public class ObjectBuilderFactory manager.Register(LocCommands.Stub("crouton"), new CommandCrouton(KittyRole.General, KittyRating.Safe)); 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("leaderboard"), new CommandLeaderboard(KittyRole.General, KittyRating.Safe)); return manager; diff --git a/src/dataStructures/KittyCharacter.java b/src/dataStructures/KittyCharacter.java index 0812a8a..7865d3d 100644 --- a/src/dataStructures/KittyCharacter.java +++ b/src/dataStructures/KittyCharacter.java @@ -1,5 +1,72 @@ package dataStructures; -public class KittyCharacter { - +public class KittyCharacter +{ + private KittyUser owner; + private String name; + private String bio; + private String refImage; + + public KittyCharacter(KittyUser owner, String name, String bio, String refImage) + { + this.owner = owner; + this.name = name; + this.bio = bio; + this.refImage = refImage; + } + + + private boolean allowedToEdit(KittyUser editor) + { + if(editor.identifier.equals(owner.identifier)) + { + return true; + } + return false; + } + + public boolean editBio(KittyUser editor, String bio) + { + if(allowedToEdit(editor)) + { + this.bio = bio; + return true; + } + return false; + } + + public boolean editRefImage(KittyUser editor, String refImage) + { + if(allowedToEdit(editor)) + { + this.refImage = refImage; + return true; + } + return false; + } + + public KittyUser getOwner() + { + return owner; + } + + public String getName() + { + return name; + } + + public String getBio() + { + return bio; + } + + public String getRefImage() + { + return refImage; + } + + public String toString() + { + return name + " " + bio + " " + refImage; + } } diff --git a/src/main/Main.java b/src/main/Main.java index 8969e81..a289e0c 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -1,25 +1,31 @@ package main; +import java.util.List; + import javax.security.auth.login.LoginException; -import core.*; -import core.benchmark.BenchmarkManager; + +import core.CharacterManager; +import core.CommandEnabler; +import core.CommandManager; +import core.DatabaseManager; +import core.ObjectBuilderFactory; +import core.RPManager; +import core.Stats; import core.lua.PluginManager; -import core.lua.PluginUser; import dataStructures.KittyChannel; import dataStructures.KittyCore; import dataStructures.KittyGuild; -import dataStructures.KittyRole; import dataStructures.KittyUser; import dataStructures.Response; import dataStructures.UserInput; import net.dv8tion.jda.core.AccountType; -import net.dv8tion.jda.core.entities.*; -import net.dv8tion.jda.core.events.message.guild.*; +import net.dv8tion.jda.core.JDA; +import net.dv8tion.jda.core.JDABuilder; +import net.dv8tion.jda.core.entities.Game; +import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.core.hooks.ListenerAdapter; -import offline.*; +import offline.Ref; import utils.GlobalLog; -import net.dv8tion.jda.core.*; -import java.util.*; // http://www.slf4j.org/ - this JDA logging tool has been disabled by specifying NOP implementation. // This is the application entry point, and bot startup location! @@ -35,6 +41,7 @@ public class Main extends ListenerAdapter private static Stats stats; private static RPManager rpManager; private static PluginManager pluginManager; + private static CharacterManager charManager; // Initialization and setup public static void main(String[] args) throws InterruptedException, LoginException, Exception @@ -45,6 +52,7 @@ public class Main extends ListenerAdapter commandEnabler = ObjectBuilderFactory.ConstructCommandEnabler(); commandManager = ObjectBuilderFactory.ConstructCommandManager(commandEnabler); stats = ObjectBuilderFactory.ConstructStats(commandManager); + charManager = new CharacterManager(); rpManager = ObjectBuilderFactory.ConstructRPManager(); pluginManager = ObjectBuilderFactory.ConstructPluginManager();