From ac3d55e4cc29b2bc70a34f5e056ea99743d0df29 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 3 Jun 2019 00:33:43 -0400 Subject: [PATCH] =Character database work --- commands.config | 1 + locCommands.config | 1 + locStrings.config | 6 ++ src/commands/CommandCharacterCreate.java | 38 ++++++++++++ src/core/CharacterManager.java | 79 ++++++++++++++++++++++++ src/core/ObjectBuilderFactory.java | 1 + src/dataStructures/KittyCharacter.java | 71 ++++++++++++++++++++- src/main/Main.java | 26 +++++--- 8 files changed, 212 insertions(+), 11 deletions(-) create mode 100644 src/commands/CommandCharacterCreate.java create mode 100644 src/core/CharacterManager.java diff --git a/commands.config b/commands.config index 5b3532f..969aaf9 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 b1e2cc7..a823cf1 100644 --- a/locCommands.config +++ b/locCommands.config @@ -46,6 +46,7 @@ info, about= showpoll= rpg= tweet= +charactercreate= help= fetch= crouton= diff --git a/locStrings.config b/locStrings.config index 7d69929..b9230c3 100644 --- a/locStrings.config +++ b/locStrings.config @@ -194,6 +194,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 d5fe6f0..8a03a00 100644 --- a/src/core/ObjectBuilderFactory.java +++ b/src/core/ObjectBuilderFactory.java @@ -386,6 +386,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)); 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 45deee6..7533c53 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -1,24 +1,30 @@ 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.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! @@ -34,6 +40,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 @@ -44,6 +51,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();