From ff399b138d476ac23401bb081ea6fd2e595d8d3b Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Sun, 2 Jun 2019 17:41:09 -0700 Subject: [PATCH 01/24] = Capitalization cleanup --- src/core/ObjectBuilderFactory.java | 49 ++++++++++++++++++------------ src/core/Stats.java | 4 +-- src/main/Main.java | 18 +++++------ 3 files changed, 40 insertions(+), 31 deletions(-) diff --git a/src/core/ObjectBuilderFactory.java b/src/core/ObjectBuilderFactory.java index ec55748..24738b4 100644 --- a/src/core/ObjectBuilderFactory.java +++ b/src/core/ObjectBuilderFactory.java @@ -48,7 +48,7 @@ public class ObjectBuilderFactory // Handles if we can or can't use specific commands, parsing a config file based on loc data to do so. private static CommandEnabler commandEnabler; - + // Lazy initialization multithreaded mutex stuff to prevent explosions. // TODO: Investigate using 'synchronized' instead potentially private static boolean hasInitialized; @@ -97,7 +97,7 @@ public class ObjectBuilderFactory //////////////////////// // Explicitly locks: guildCache - public static KittyGuild ExtractGuild(GuildMessageReceivedEvent event) + public static KittyGuild extractGuild(GuildMessageReceivedEvent event) { LazyInit(); @@ -117,6 +117,7 @@ public class ObjectBuilderFactory emoteFix += ":" + emote.substring(emote.indexOf("(")+1, emote.length()-1) + ">"; emotesString.add(emoteFix); } + // once we're lazily initialized, we can synchronize w/ the // guildCache object now instead of having to use a mutex. KittyGuild guild = null; @@ -140,7 +141,7 @@ public class ObjectBuilderFactory } // Explicitly locks: guildCache - public static KittyRole ExtractRole(GuildMessageReceivedEvent event) + public static KittyRole extractRole(GuildMessageReceivedEvent event) { LazyInit(); @@ -167,7 +168,7 @@ public class ObjectBuilderFactory // Explicitly locks: guildCache // Extracts the content rating information it can from the provided event. - public static KittyRating ExtractContentRating(GuildMessageReceivedEvent event) + public static KittyRating extractContentRating(GuildMessageReceivedEvent event) { LazyInit(); @@ -185,7 +186,7 @@ public class ObjectBuilderFactory } // Implicitly locks guild cache by calling ExtractGuild - public static KittyChannel ExtractChannel(GuildMessageReceivedEvent event) + public static KittyChannel extractChannel(GuildMessageReceivedEvent event) { LazyInit(); @@ -213,7 +214,7 @@ public class ObjectBuilderFactory } // Implicitly locks guild cache by calling ExtractRole and ExtractGuild - public static KittyUser ExtractUser(GuildMessageReceivedEvent event) + public static KittyUser extractUser(GuildMessageReceivedEvent event) { LazyInit(); @@ -229,8 +230,8 @@ public class ObjectBuilderFactory } else { - KittyRole role = ExtractRole(event); - KittyGuild guild = ExtractGuild(event); + KittyRole role = extractRole(event); + KittyGuild guild = extractGuild(event); String name; if(event.getMember().getNickname() == null) @@ -254,17 +255,17 @@ public class ObjectBuilderFactory { mentioned = event.getMessage().getMentionedMembers().get(i); if(mentioned.getNickname() != null) - ExtractUserByJDAUser(event.getGuild().getId(), mentioned.getNickname(), + extractUserByJDAUser(event.getGuild().getId(), mentioned.getNickname(), mentioned.getUser().getId(), mentioned.getUser().getAvatarUrl(), mentioned.getUser().getId()); else - ExtractUserByJDAUser(event.getGuild().getId(), mentioned.getUser().getName(), + extractUserByJDAUser(event.getGuild().getId(), mentioned.getUser().getName(), mentioned.getUser().getId(), mentioned.getUser().getAvatarUrl(), mentioned.getUser().getId()); } return user; } - public static KittyUser ExtractUserByJDAUser(String guildID, String name, String userID, String avatarID, String discordID) + public static KittyUser extractUserByJDAUser(String guildID, String name, String userID, String avatarID, String discordID) { LazyInit(); @@ -277,6 +278,7 @@ public class ObjectBuilderFactory { if(name != null) cachedUser.name = name; + cachedUser.avatarID = avatarID; user = cachedUser; } @@ -301,19 +303,25 @@ public class ObjectBuilderFactory { user = userCache.get(uid); } + return user; } public static void updateUser(KittyUser user, Member member) { if(member.getNickname() == null) + { user.name = member.getUser().getName(); + } else + { user.name = member.getNickname(); + } user.avatarID = member.getUser().getAvatarUrl(); } + ////////////////////////// // Construction Methods // ////////////////////////// @@ -322,7 +330,7 @@ public class ObjectBuilderFactory // and disabling, what we do is construct the commands with a localized pair that is checked against // the CommandEnabler object passed in. In theory, we could have multiple CommandManagers, tho we can // only have one CommandEnabler. - public static CommandManager ConstructCommandManager(CommandEnabler commandEnabler) + public static CommandManager constructCommandManager(CommandEnabler commandEnabler) { LazyInit(); @@ -391,7 +399,7 @@ public class ObjectBuilderFactory } // Constructs a CommandEnabler if it doesn't exist, and gets the existing one if it does. - public static CommandEnabler ConstructCommandEnabler() + public static CommandEnabler constructCommandEnabler() { LazyInit(); @@ -405,7 +413,7 @@ public class ObjectBuilderFactory // in different ways, and so we construct it outside of the constructor for // the factory since it doesn't have to be present / can be elsewhere. // Effectively we cache the database here. - public static DatabaseManager ConstructDatabaseManager() + public static DatabaseManager constructDatabaseManager() { LazyInit(); @@ -415,7 +423,7 @@ public class ObjectBuilderFactory return database; } - public static Stats ConstructStats(CommandManager manager) + public static Stats constructStats(CommandManager manager) { LazyInit(); @@ -425,7 +433,7 @@ public class ObjectBuilderFactory return stats; } - public static RPManager ConstructRPManager() + public static RPManager constructRPManager() { LazyInit(); @@ -435,7 +443,7 @@ public class ObjectBuilderFactory return rpManager; } - public static PluginManager ConstructPluginManager() + public static PluginManager constructPluginManager() { LazyInit(); @@ -444,13 +452,14 @@ public class ObjectBuilderFactory return pluginManager; } - + + ///////////////////// // Utility Methods // ///////////////////// // Returns number of cached guilds (does not equal total users in the database, only what's in memory) - public static Integer GetGuildCount() + public static Integer getGuildCount() { synchronized(guildCache) { return guildCache.size(); @@ -458,7 +467,7 @@ public class ObjectBuilderFactory } // Returns number of cached users (does not equal total users in the database, only what's in memory) - public static Integer GetUserCount() + public static Integer getUserCount() { synchronized(userCache) { return userCache.size(); diff --git a/src/core/Stats.java b/src/core/Stats.java index 43ca17b..25aa46e 100644 --- a/src/core/Stats.java +++ b/src/core/Stats.java @@ -107,12 +107,12 @@ public class Stats public int GetGuildCount() { - return ObjectBuilderFactory.GetGuildCount(); + return ObjectBuilderFactory.getGuildCount(); } public int GetUserCount() { - return ObjectBuilderFactory.GetUserCount(); + return ObjectBuilderFactory.getUserCount(); } public ArrayList GetAllCommands() diff --git a/src/main/Main.java b/src/main/Main.java index aa7608d..bf8ee2a 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -40,12 +40,12 @@ public class Main extends ListenerAdapter { // Factory startup. The ordering is intentional. GlobalLog.initialize(); - databaseManager = ObjectBuilderFactory.ConstructDatabaseManager(); - commandEnabler = ObjectBuilderFactory.ConstructCommandEnabler(); - commandManager = ObjectBuilderFactory.ConstructCommandManager(commandEnabler); - stats = ObjectBuilderFactory.ConstructStats(commandManager); - rpManager = ObjectBuilderFactory.ConstructRPManager(); - pluginManager = ObjectBuilderFactory.ConstructPluginManager(); + databaseManager = ObjectBuilderFactory.constructDatabaseManager(); + commandEnabler = ObjectBuilderFactory.constructCommandEnabler(); + commandManager = ObjectBuilderFactory.constructCommandManager(commandEnabler); + stats = ObjectBuilderFactory.constructStats(commandManager); + rpManager = ObjectBuilderFactory.constructRPManager(); + pluginManager = ObjectBuilderFactory.constructPluginManager(); // Bot startup kitty = new JDABuilder(AccountType.BOT).setToken(Ref.TestToken).buildBlocking(); @@ -62,9 +62,9 @@ public class Main extends ListenerAdapter return; // Factory objects - KittyUser user = ObjectBuilderFactory.ExtractUser(event); - KittyGuild guild = ObjectBuilderFactory.ExtractGuild(event); - KittyChannel channel = ObjectBuilderFactory.ExtractChannel(event); + KittyUser user = ObjectBuilderFactory.extractUser(event); + KittyGuild guild = ObjectBuilderFactory.extractGuild(event); + KittyChannel channel = ObjectBuilderFactory.extractChannel(event); // Specialized uncached objects Response response = new Response(event, kitty); From e5b94d7a7eb30875796435ab14aa44775f01d708 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Sun, 2 Jun 2019 17:43:20 -0700 Subject: [PATCH 02/24] = Updated capitalization --- src/commands/CommandBeansShow.java | 4 ++-- src/commands/CommandBenchmark.java | 6 +++--- src/commands/CommandBetBeans.java | 4 ++-- src/commands/CommandBetHistory.java | 4 ++-- src/commands/CommandBlurry.java | 4 ++-- src/commands/CommandBoop.java | 4 ++-- src/commands/CommandCatch.java | 4 ++-- src/commands/CommandChangeIndicator.java | 4 ++-- src/commands/CommandChoose.java | 4 ++-- src/commands/CommandColiru.java | 4 ++-- src/commands/CommandCrouton.java | 4 ++-- src/commands/CommandDBFlush.java | 4 ++-- src/commands/CommandDBStats.java | 4 ++-- src/commands/CommandDoWork.java | 4 ++-- src/commands/CommandEightBall.java | 4 ++-- src/commands/CommandFetch.java | 4 ++-- src/commands/CommandGiveBeans.java | 4 ++-- src/commands/CommandGuildRoleAdd.java | 4 ++-- src/commands/CommandGuildRoleAllowed.java | 4 ++-- src/commands/CommandGuildRoleList.java | 2 +- src/commands/CommandGuildRoleNotAllowed.java | 4 ++-- src/commands/CommandGuildRoleRemove.java | 4 ++-- src/commands/CommandHelp.java | 4 ++-- src/commands/CommandHelpBuilder.java | 6 +++--- src/commands/CommandInfo.java | 4 ++-- src/commands/CommandInvite.java | 4 ++-- src/commands/CommandJDoodle.java | 4 ++-- src/commands/CommandMap.java | 4 ++-- src/commands/CommandPerish.java | 4 ++-- src/commands/CommandPing.java | 4 ++-- src/commands/CommandPollManage.java | 4 ++-- src/commands/CommandPollResults.java | 4 ++-- src/commands/CommandPollShow.java | 4 ++-- src/commands/CommandPollVote.java | 4 ++-- src/commands/CommandRPEnd.java | 4 ++-- src/commands/CommandRPG.java | 6 +++--- src/commands/CommandRPStart.java | 4 ++-- src/commands/CommandRaffleEnd.java | 4 ++-- src/commands/CommandRaffleJoin.java | 4 ++-- src/commands/CommandRaffleSpin.java | 4 ++-- src/commands/CommandRaffleStart.java | 5 +++-- src/commands/CommandRating.java | 4 ++-- src/commands/CommandRole.java | 4 ++-- src/commands/CommandRoll.java | 4 ++-- src/commands/CommandShutdown.java | 4 ++-- src/commands/CommandStark.java | 4 ++-- src/commands/CommandStats.java | 4 ++-- src/commands/CommandTeey.java | 4 ++-- src/commands/CommandTradeBeans.java | 4 ++-- src/commands/CommandTweet.java | 4 ++-- src/commands/CommandWolfram.java | 4 ++-- src/commands/CommandYeet.java | 4 ++-- src/core/Command.java | 6 +++--- src/core/CommandManager.java | 2 +- 54 files changed, 111 insertions(+), 110 deletions(-) diff --git a/src/commands/CommandBeansShow.java b/src/commands/CommandBeansShow.java index b3e2493..0878608 100644 --- a/src/commands/CommandBeansShow.java +++ b/src/commands/CommandBeansShow.java @@ -9,10 +9,10 @@ public class CommandBeansShow extends Command public CommandBeansShow(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("BeansShowInfo"); }; + public String getHelpText() { return LocStrings.Stub("BeansShowInfo"); }; @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.mentions == null) res.Call(String.format(LocStrings.Stub("BeansShowDisplay"), user.GetBeans())); diff --git a/src/commands/CommandBenchmark.java b/src/commands/CommandBenchmark.java index d1cd585..86c4289 100644 --- a/src/commands/CommandBenchmark.java +++ b/src/commands/CommandBenchmark.java @@ -25,16 +25,16 @@ public class CommandBenchmark extends Command } @Override - public String HelpText() { return LocStrings.Stub("BenchmarkInfo"); } + public String getHelpText() { return LocStrings.Stub("BenchmarkInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { framework.Update(); if(input.args == null || input.args.length() == 0) { - String output = HelpText(); + String output = getHelpText(); res.Call(output); return; } diff --git a/src/commands/CommandBetBeans.java b/src/commands/CommandBetBeans.java index 5c3dd6d..e359b5a 100644 --- a/src/commands/CommandBetBeans.java +++ b/src/commands/CommandBetBeans.java @@ -11,10 +11,10 @@ public class CommandBetBeans extends Command public CommandBetBeans(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("BetBeansInfo"); } + public String getHelpText() { return LocStrings.Stub("BetBeansInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String call = ""; int bet = 0; diff --git a/src/commands/CommandBetHistory.java b/src/commands/CommandBetHistory.java index 0a190a1..0a87b87 100644 --- a/src/commands/CommandBetHistory.java +++ b/src/commands/CommandBetHistory.java @@ -15,10 +15,10 @@ public class CommandBetHistory extends Command public CommandBetHistory(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("BetHistoryInfo"); } + public String getHelpText() { return LocStrings.Stub("BetHistoryInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { res.Call(String.format(LocStrings.Stub("BetHistoryOutput"), guild.beans.Get())); } diff --git a/src/commands/CommandBlurry.java b/src/commands/CommandBlurry.java index c875ff2..9fe2c3e 100644 --- a/src/commands/CommandBlurry.java +++ b/src/commands/CommandBlurry.java @@ -17,12 +17,12 @@ public class CommandBlurry extends Command public CommandBlurry(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("BlurryInfo"); }; + public String getHelpText() { return LocStrings.Stub("BlurryInfo"); }; private static Long num = 0l; @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String name = null; String filename = null; diff --git a/src/commands/CommandBoop.java b/src/commands/CommandBoop.java index 6774212..6862c22 100644 --- a/src/commands/CommandBoop.java +++ b/src/commands/CommandBoop.java @@ -60,11 +60,11 @@ public class CommandBoop extends Command } @Override - public String HelpText() { return LocStrings.Stub("BoopInfo"); } + public String getHelpText() { return LocStrings.Stub("BoopInfo"); } // Called when the command is run! @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.mentions == null) { diff --git a/src/commands/CommandCatch.java b/src/commands/CommandCatch.java index fac6208..576b936 100644 --- a/src/commands/CommandCatch.java +++ b/src/commands/CommandCatch.java @@ -23,11 +23,11 @@ public class CommandCatch extends Command private static Long num = 0l; @Override - public String HelpText() { return LocStrings.Stub("CatchInfo"); } + public String getHelpText() { return LocStrings.Stub("CatchInfo"); } // Called when the command is run! @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String name = null; File catchFile = null; diff --git a/src/commands/CommandChangeIndicator.java b/src/commands/CommandChangeIndicator.java index 287ce3e..0bb9b31 100644 --- a/src/commands/CommandChangeIndicator.java +++ b/src/commands/CommandChangeIndicator.java @@ -9,10 +9,10 @@ public class CommandChangeIndicator extends Command public CommandChangeIndicator(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("ChangeIndicatorInfo"); } + public String getHelpText() { return LocStrings.Stub("ChangeIndicatorInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String arg = input.args.trim(); if(arg.length() == 0) diff --git a/src/commands/CommandChoose.java b/src/commands/CommandChoose.java index e68f783..f226e44 100644 --- a/src/commands/CommandChoose.java +++ b/src/commands/CommandChoose.java @@ -14,10 +14,10 @@ public class CommandChoose extends Command public CommandChoose(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("ChooseInfo"); } + public String getHelpText() { return LocStrings.Stub("ChooseInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String [] choices = input.args.split(","); if(choices.length == 1) diff --git a/src/commands/CommandColiru.java b/src/commands/CommandColiru.java index b2f5f8e..2087df2 100644 --- a/src/commands/CommandColiru.java +++ b/src/commands/CommandColiru.java @@ -12,10 +12,10 @@ public class CommandColiru extends Command public CommandColiru(KittyRole level, KittyRating rating) { super(level, rating);} @Override - public String HelpText() { return LocStrings.Stub("ColiruInfo"); } + public String getHelpText() { return LocStrings.Stub("ColiruInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args.trim().length() < 1) { diff --git a/src/commands/CommandCrouton.java b/src/commands/CommandCrouton.java index e08821c..1ca9f38 100644 --- a/src/commands/CommandCrouton.java +++ b/src/commands/CommandCrouton.java @@ -18,10 +18,10 @@ public class CommandCrouton extends Command public CommandCrouton(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("CroutonInfo"); }; + public String getHelpText() { return LocStrings.Stub("CroutonInfo"); }; @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { KittyEmbed embed = new KittyEmbed(); embed.authorImage = "https://crouton.net/crouton.png"; diff --git a/src/commands/CommandDBFlush.java b/src/commands/CommandDBFlush.java index d0f37b8..061fa7e 100644 --- a/src/commands/CommandDBFlush.java +++ b/src/commands/CommandDBFlush.java @@ -19,10 +19,10 @@ public class CommandDBFlush extends Command public CommandDBFlush(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("DBFlushInfo"); } + public String getHelpText() { return LocStrings.Stub("DBFlushInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { int numUpdated = DatabaseManager.instance.upkeep(); diff --git a/src/commands/CommandDBStats.java b/src/commands/CommandDBStats.java index 033bf34..e28c2a8 100644 --- a/src/commands/CommandDBStats.java +++ b/src/commands/CommandDBStats.java @@ -26,10 +26,10 @@ public class CommandDBStats extends Command } @Override - public String HelpText() { return LocStrings.Stub("DBStatsInfo"); } + public String getHelpText() { return LocStrings.Stub("DBStatsInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { KittyEmbed embed = new KittyEmbed(); embed.title = "Database Info"; diff --git a/src/commands/CommandDoWork.java b/src/commands/CommandDoWork.java index c37f85f..bda8347 100644 --- a/src/commands/CommandDoWork.java +++ b/src/commands/CommandDoWork.java @@ -15,11 +15,11 @@ public class CommandDoWork extends Command public CommandDoWork(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("DoWorkInfo"); } + public String getHelpText() { return LocStrings.Stub("DoWorkInfo"); } // Called when the command is run! @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { @SuppressWarnings("unused") long thispieceofshit = 0; diff --git a/src/commands/CommandEightBall.java b/src/commands/CommandEightBall.java index 2e90413..e3ac564 100644 --- a/src/commands/CommandEightBall.java +++ b/src/commands/CommandEightBall.java @@ -35,10 +35,10 @@ public class CommandEightBall extends Command public CommandEightBall(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("EightBallInfo"); } + public String getHelpText() { return LocStrings.Stub("EightBallInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args.trim().length() < 1) res.Call(LocStrings.Stub("EightBallError")); diff --git a/src/commands/CommandFetch.java b/src/commands/CommandFetch.java index 569c3c4..1d1607c 100644 --- a/src/commands/CommandFetch.java +++ b/src/commands/CommandFetch.java @@ -15,10 +15,10 @@ public class CommandFetch extends Command public CommandFetch(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("FetchInfo"); } + public String getHelpText() { return LocStrings.Stub("FetchInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String emote = input.args.split(" ")[0]; if(emote.startsWith("<") && emote.endsWith(">")) diff --git a/src/commands/CommandGiveBeans.java b/src/commands/CommandGiveBeans.java index a1469e9..a2c2a93 100644 --- a/src/commands/CommandGiveBeans.java +++ b/src/commands/CommandGiveBeans.java @@ -9,10 +9,10 @@ public class CommandGiveBeans extends Command public CommandGiveBeans (KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("GiveBeansInfo"); } + public String getHelpText() { return LocStrings.Stub("GiveBeansInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { int beans = 0; try { diff --git a/src/commands/CommandGuildRoleAdd.java b/src/commands/CommandGuildRoleAdd.java index f99ea33..ebca762 100644 --- a/src/commands/CommandGuildRoleAdd.java +++ b/src/commands/CommandGuildRoleAdd.java @@ -15,10 +15,10 @@ public class CommandGuildRoleAdd extends Command public CommandGuildRoleAdd(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("GuildRoleAddInfo"); }; + public String getHelpText() { return LocStrings.Stub("GuildRoleAddInfo"); }; @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String role = input.args.split(" ")[0]; if(guild.roleList.contains(role)) diff --git a/src/commands/CommandGuildRoleAllowed.java b/src/commands/CommandGuildRoleAllowed.java index 6e30d59..c61a101 100644 --- a/src/commands/CommandGuildRoleAllowed.java +++ b/src/commands/CommandGuildRoleAllowed.java @@ -15,10 +15,10 @@ public class CommandGuildRoleAllowed extends Command public CommandGuildRoleAllowed(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("GuildRoleAllowedInfo"); } + public String getHelpText() { return LocStrings.Stub("GuildRoleAllowedInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String [] roles = input.args.split(","); String role; diff --git a/src/commands/CommandGuildRoleList.java b/src/commands/CommandGuildRoleList.java index b150286..52557f6 100644 --- a/src/commands/CommandGuildRoleList.java +++ b/src/commands/CommandGuildRoleList.java @@ -12,7 +12,7 @@ public class CommandGuildRoleList extends Command public CommandGuildRoleList(KittyRole level, KittyRating rating) { super(level, rating);} @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String roles = ""; if(guild.roleList.isEmpty()) diff --git a/src/commands/CommandGuildRoleNotAllowed.java b/src/commands/CommandGuildRoleNotAllowed.java index 90d244a..76f7a1f 100644 --- a/src/commands/CommandGuildRoleNotAllowed.java +++ b/src/commands/CommandGuildRoleNotAllowed.java @@ -15,10 +15,10 @@ public class CommandGuildRoleNotAllowed extends Command public CommandGuildRoleNotAllowed(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("GuildRoleNotAllowedInfo"); } + public String getHelpText() { return LocStrings.Stub("GuildRoleNotAllowedInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String [] roles = input.args.split(","); String role; diff --git a/src/commands/CommandGuildRoleRemove.java b/src/commands/CommandGuildRoleRemove.java index 0ae47da..e44d129 100644 --- a/src/commands/CommandGuildRoleRemove.java +++ b/src/commands/CommandGuildRoleRemove.java @@ -15,10 +15,10 @@ public class CommandGuildRoleRemove extends Command public CommandGuildRoleRemove(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("GuildRoleRemoveInfo"); }; + public String getHelpText() { return LocStrings.Stub("GuildRoleRemoveInfo"); }; @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String role = input.args.split(" ")[0]; if(guild.roleList.contains(role)) diff --git a/src/commands/CommandHelp.java b/src/commands/CommandHelp.java index fd5bd0f..9277e7c 100644 --- a/src/commands/CommandHelp.java +++ b/src/commands/CommandHelp.java @@ -15,10 +15,10 @@ public class CommandHelp extends Command public CommandHelp(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("HelpInfo"); } + public String getHelpText() { return LocStrings.Stub("HelpInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String help = Stats.instance.GetHelpText(input.args); diff --git a/src/commands/CommandHelpBuilder.java b/src/commands/CommandHelpBuilder.java index 89ef69b..4c747db 100644 --- a/src/commands/CommandHelpBuilder.java +++ b/src/commands/CommandHelpBuilder.java @@ -26,10 +26,10 @@ public class CommandHelpBuilder extends Command { } @Override - public String HelpText() { return LocStrings.Stub("HelpBuilderInfo"); } + public String getHelpText() { return LocStrings.Stub("HelpBuilderInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { // Holds command groups HashMap> commandsByRole = new HashMap>(); @@ -121,7 +121,7 @@ public class CommandHelpBuilder extends Command { accumulated += leadStart + keys.get(j) + leadEnd; } - accumulated += leadFollow + commands.get(i).HelpText() + lineDelimiter;; + accumulated += leadFollow + commands.get(i).getHelpText() + lineDelimiter;; } accumulated += sectionEnd; diff --git a/src/commands/CommandInfo.java b/src/commands/CommandInfo.java index 7fee7bf..f15e62f 100644 --- a/src/commands/CommandInfo.java +++ b/src/commands/CommandInfo.java @@ -15,10 +15,10 @@ public class CommandInfo extends Command public CommandInfo(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("InfoInfo"); } + public String getHelpText() { return LocStrings.Stub("InfoInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { res.Call(LocStrings.Stub("InfoResponse")); } diff --git a/src/commands/CommandInvite.java b/src/commands/CommandInvite.java index d74dda5..077b040 100644 --- a/src/commands/CommandInvite.java +++ b/src/commands/CommandInvite.java @@ -10,10 +10,10 @@ public class CommandInvite extends Command public CommandInvite(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("InviteInfo"); } + public String getHelpText() { return LocStrings.Stub("InviteInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { res.Call("https://discordapp.com/oauth2/authorize?&client_id="+ Ref.CliID +"&scope=bot&permissions=8"); diff --git a/src/commands/CommandJDoodle.java b/src/commands/CommandJDoodle.java index ae244e4..d1eb630 100644 --- a/src/commands/CommandJDoodle.java +++ b/src/commands/CommandJDoodle.java @@ -12,10 +12,10 @@ public class CommandJDoodle extends Command public CommandJDoodle(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("JDoodleInfo"); } + public String getHelpText() { return LocStrings.Stub("JDoodleInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args.trim().length() < 1) { diff --git a/src/commands/CommandMap.java b/src/commands/CommandMap.java index 803b93b..add05a1 100644 --- a/src/commands/CommandMap.java +++ b/src/commands/CommandMap.java @@ -23,10 +23,10 @@ public class CommandMap extends Command public CommandMap(KittyRole roleLevel, KittyRating contentRating) { super(roleLevel, contentRating); } @Override - public String HelpText() { return String.format(LocStrings.Stub("MapInfo"), "" + MaxWidth, "" + MaxHeight); } + public String getHelpText() { return String.format(LocStrings.Stub("MapInfo"), "" + MaxWidth, "" + MaxHeight); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { // Variables int width = 35; diff --git a/src/commands/CommandPerish.java b/src/commands/CommandPerish.java index 73ca6e6..1847659 100644 --- a/src/commands/CommandPerish.java +++ b/src/commands/CommandPerish.java @@ -23,12 +23,12 @@ public class CommandPerish extends Command public CommandPerish(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("PerishInfo"); }; + public String getHelpText() { return LocStrings.Stub("PerishInfo"); }; private static Long num = 0l; @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String name = null; String filename = null; diff --git a/src/commands/CommandPing.java b/src/commands/CommandPing.java index 7de6205..351f8b0 100644 --- a/src/commands/CommandPing.java +++ b/src/commands/CommandPing.java @@ -15,11 +15,11 @@ public class CommandPing extends Command public CommandPing(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("PingInfo"); } + public String getHelpText() { return LocStrings.Stub("PingInfo"); } // Called when the command is run! @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { res.Call(LocStrings.Stub("PingResponse")); } diff --git a/src/commands/CommandPollManage.java b/src/commands/CommandPollManage.java index 1a0114d..4fc304b 100644 --- a/src/commands/CommandPollManage.java +++ b/src/commands/CommandPollManage.java @@ -14,10 +14,10 @@ public class CommandPollManage extends Command public CommandPollManage(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("PollManageInfo"); } + public String getHelpText() { return LocStrings.Stub("PollManageInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { switch(input.args.split(" ")[0].toLowerCase()) { diff --git a/src/commands/CommandPollResults.java b/src/commands/CommandPollResults.java index ac36aff..4ba0785 100644 --- a/src/commands/CommandPollResults.java +++ b/src/commands/CommandPollResults.java @@ -10,10 +10,10 @@ public class CommandPollResults extends Command public CommandPollResults(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("PollResultsInfo"); } + public String getHelpText() { return LocStrings.Stub("PollResultsInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String results = ""; int totalVotes = 0; diff --git a/src/commands/CommandPollShow.java b/src/commands/CommandPollShow.java index 08cde19..4aaf848 100644 --- a/src/commands/CommandPollShow.java +++ b/src/commands/CommandPollShow.java @@ -8,10 +8,10 @@ public class CommandPollShow extends Command public CommandPollShow(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("PollShowInfo"); } + public String getHelpText() { return LocStrings.Stub("PollShowInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(!guild.polling) { diff --git a/src/commands/CommandPollVote.java b/src/commands/CommandPollVote.java index d3b48f5..75de872 100644 --- a/src/commands/CommandPollVote.java +++ b/src/commands/CommandPollVote.java @@ -8,10 +8,10 @@ public class CommandPollVote extends Command public CommandPollVote(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("PollVoteInfo"); } + public String getHelpText() { return LocStrings.Stub("PollVoteInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(guild.polling) { diff --git a/src/commands/CommandRPEnd.java b/src/commands/CommandRPEnd.java index 17005d6..1aed3ae 100644 --- a/src/commands/CommandRPEnd.java +++ b/src/commands/CommandRPEnd.java @@ -14,10 +14,10 @@ public class CommandRPEnd extends Command public CommandRPEnd (KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("RPEndInfo"); } + public String getHelpText() { return LocStrings.Stub("RPEndInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { File sending = null; diff --git a/src/commands/CommandRPG.java b/src/commands/CommandRPG.java index 733d12d..275c79c 100644 --- a/src/commands/CommandRPG.java +++ b/src/commands/CommandRPG.java @@ -23,15 +23,15 @@ public class CommandRPG extends Command } @Override - public String HelpText() { return LocStrings.Stub("RPGInfo"); }; + public String getHelpText() { return LocStrings.Stub("RPGInfo"); }; @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args == null || input.args.length() == 0) { - String output = HelpText(); + String output = getHelpText(); res.Call(output); return; } diff --git a/src/commands/CommandRPStart.java b/src/commands/CommandRPStart.java index b433cd0..3e03635 100644 --- a/src/commands/CommandRPStart.java +++ b/src/commands/CommandRPStart.java @@ -12,10 +12,10 @@ public class CommandRPStart extends Command public CommandRPStart (KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("RPStartInfo"); } + public String getHelpText() { return LocStrings.Stub("RPStartInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { ArrayList users = new ArrayList(); users.add(user); diff --git a/src/commands/CommandRaffleEnd.java b/src/commands/CommandRaffleEnd.java index 47ee4f6..6d7bc72 100644 --- a/src/commands/CommandRaffleEnd.java +++ b/src/commands/CommandRaffleEnd.java @@ -15,10 +15,10 @@ public class CommandRaffleEnd extends Command public CommandRaffleEnd(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("RaffleEndInfo"); } + public String getHelpText() { return LocStrings.Stub("RaffleEndInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(guild.endRaffle()) { diff --git a/src/commands/CommandRaffleJoin.java b/src/commands/CommandRaffleJoin.java index a3ff7e0..c575443 100644 --- a/src/commands/CommandRaffleJoin.java +++ b/src/commands/CommandRaffleJoin.java @@ -15,10 +15,10 @@ public class CommandRaffleJoin extends Command public CommandRaffleJoin(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("RaffleJoinInfo"); } + public String getHelpText() { return LocStrings.Stub("RaffleJoinInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(guild.joinRaffle(user)) { diff --git a/src/commands/CommandRaffleSpin.java b/src/commands/CommandRaffleSpin.java index ecc1e2e..380a84e 100644 --- a/src/commands/CommandRaffleSpin.java +++ b/src/commands/CommandRaffleSpin.java @@ -15,10 +15,10 @@ public class CommandRaffleSpin extends Command public CommandRaffleSpin(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("RaffleSpinInfo"); } + public String getHelpText() { return LocStrings.Stub("RaffleSpinInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { try { diff --git a/src/commands/CommandRaffleStart.java b/src/commands/CommandRaffleStart.java index fb2fac1..cd359c3 100644 --- a/src/commands/CommandRaffleStart.java +++ b/src/commands/CommandRaffleStart.java @@ -15,12 +15,12 @@ public class CommandRaffleStart extends Command public CommandRaffleStart(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("RaffleStartInfo"); } + public String getHelpText() { return LocStrings.Stub("RaffleStartInfo"); } public int beanCost; @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { try { @@ -30,6 +30,7 @@ public class CommandRaffleStart extends Command { beanCost = 100; } + if(guild.startRaffle(beanCost)) { res.Call(String.format(LocStrings.Stub("RaffleStartSuccess"), beanCost)); diff --git a/src/commands/CommandRating.java b/src/commands/CommandRating.java index 0adaae6..0ae8427 100644 --- a/src/commands/CommandRating.java +++ b/src/commands/CommandRating.java @@ -15,11 +15,11 @@ public class CommandRating extends Command public CommandRating(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("RatingInfo"); } + public String getHelpText() { return LocStrings.Stub("RatingInfo"); } // Called when the command is run! @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String newRating = null; switch(input.args.toLowerCase().trim()) diff --git a/src/commands/CommandRole.java b/src/commands/CommandRole.java index e9633b8..c4aa7eb 100644 --- a/src/commands/CommandRole.java +++ b/src/commands/CommandRole.java @@ -9,10 +9,10 @@ public class CommandRole extends Command public CommandRole (KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("RoleInfo"); } + public String getHelpText() { return LocStrings.Stub("RoleInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args.isEmpty()) { diff --git a/src/commands/CommandRoll.java b/src/commands/CommandRoll.java index 1cb7ba7..d077104 100644 --- a/src/commands/CommandRoll.java +++ b/src/commands/CommandRoll.java @@ -16,10 +16,10 @@ public class CommandRoll extends Command public CommandRoll(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("RollInfo"); } + public String getHelpText() { return LocStrings.Stub("RollInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { try { diff --git a/src/commands/CommandShutdown.java b/src/commands/CommandShutdown.java index 57538a6..776f370 100644 --- a/src/commands/CommandShutdown.java +++ b/src/commands/CommandShutdown.java @@ -20,11 +20,11 @@ public class CommandShutdown extends Command public CommandShutdown(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("ShutdownInfo"); } + public String getHelpText() { return LocStrings.Stub("ShutdownInfo"); } // Called when the command is run! @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { // Flag the shutdown immediately. Stats.instance.IndicateShutdown(); diff --git a/src/commands/CommandStark.java b/src/commands/CommandStark.java index 16378c8..299794a 100644 --- a/src/commands/CommandStark.java +++ b/src/commands/CommandStark.java @@ -17,12 +17,12 @@ public class CommandStark extends Command public CommandStark(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("StarkInfo"); }; + public String getHelpText() { return LocStrings.Stub("StarkInfo"); }; private static Long num = 0l; @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String name = null; String filename = null; diff --git a/src/commands/CommandStats.java b/src/commands/CommandStats.java index 593ff66..b6f5649 100644 --- a/src/commands/CommandStats.java +++ b/src/commands/CommandStats.java @@ -17,11 +17,11 @@ public class CommandStats extends Command public CommandStats(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("StatsInfo"); } + public String getHelpText() { return LocStrings.Stub("StatsInfo"); } // Called when the command is run! @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String out = "```\n"; Stats stats = Stats.instance; diff --git a/src/commands/CommandTeey.java b/src/commands/CommandTeey.java index 6a3394a..9023064 100644 --- a/src/commands/CommandTeey.java +++ b/src/commands/CommandTeey.java @@ -23,11 +23,11 @@ public class CommandTeey extends Command private static Long num = 0l; @Override - public String HelpText() { return LocStrings.Stub("TeeyInfo"); } + public String getHelpText() { return LocStrings.Stub("TeeyInfo"); } // Called when the command is run! @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String name = null; File teeyFile = null; diff --git a/src/commands/CommandTradeBeans.java b/src/commands/CommandTradeBeans.java index 141ab46..9a7dd90 100644 --- a/src/commands/CommandTradeBeans.java +++ b/src/commands/CommandTradeBeans.java @@ -15,10 +15,10 @@ public class CommandTradeBeans extends Command public CommandTradeBeans(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("TradeBeansInfo"); } + public String getHelpText() { return LocStrings.Stub("TradeBeansInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.mentions == null) { diff --git a/src/commands/CommandTweet.java b/src/commands/CommandTweet.java index 8c9770a..a95e09e 100644 --- a/src/commands/CommandTweet.java +++ b/src/commands/CommandTweet.java @@ -11,10 +11,10 @@ public class CommandTweet extends Command public CommandTweet(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("TweetInfo"); } + public String getHelpText() { return LocStrings.Stub("TweetInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { //TODO: Figure out how to pass pictures correctly try { diff --git a/src/commands/CommandWolfram.java b/src/commands/CommandWolfram.java index 4947261..731c58a 100644 --- a/src/commands/CommandWolfram.java +++ b/src/commands/CommandWolfram.java @@ -15,10 +15,10 @@ public class CommandWolfram extends Command public CommandWolfram(KittyRole level, KittyRating rating) { super(level, rating);} @Override - public String HelpText() { return LocStrings.Stub("WolframInfo"); } + public String getHelpText() { return LocStrings.Stub("WolframInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args == null || input.args.trim().length() == 0) res.Call(LocStrings.Stub("WolframNoArgs")); diff --git a/src/commands/CommandYeet.java b/src/commands/CommandYeet.java index 65ea728..c4b0b53 100644 --- a/src/commands/CommandYeet.java +++ b/src/commands/CommandYeet.java @@ -23,11 +23,11 @@ public class CommandYeet extends Command private static Long num = 0l; @Override - public String HelpText() { return LocStrings.Stub("YeetInfo"); } + public String getHelpText() { return LocStrings.Stub("YeetInfo"); } // Called when the command is run! @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { String name = null; File yeetFile = null; diff --git a/src/core/Command.java b/src/core/Command.java index a8defdb..e23e026 100644 --- a/src/core/Command.java +++ b/src/core/Command.java @@ -59,7 +59,7 @@ public abstract class Command if(!CanCall(guild, channel, user)) return; - OnRun(guild, channel, user, input, res); + onRun(guild, channel, user, input, res); } public ArrayList RegisteredNames() @@ -79,12 +79,12 @@ public abstract class Command // OVERRIDE ME! (This is not required but advised!) // Returns if the command succeeded or not. - public String HelpText() + public String getHelpText() { return "No help text has been added yet for " + this.getClass().getSimpleName() + "!"; } // OVERRIDE ME! (This is required) // Returns if the command succeeded or not. - public abstract void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res); + public abstract void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res); } diff --git a/src/core/CommandManager.java b/src/core/CommandManager.java index 5e79a7c..ce7ed49 100644 --- a/src/core/CommandManager.java +++ b/src/core/CommandManager.java @@ -116,7 +116,7 @@ public class CommandManager Command command = commands.get(lookup); if(command != null) - return command.HelpText(); + return command.getHelpText(); return null; } From 5212ef64bfbf202160dcdbb24fb193c117a2d99d Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Sun, 2 Jun 2019 17:49:23 -0700 Subject: [PATCH 03/24] = Selectively adjusted casing on localization stubs. --- src/commands/CommandBeansShow.java | 6 +- src/commands/CommandBenchmark.java | 4 +- src/commands/CommandBetBeans.java | 12 +-- src/commands/CommandBetHistory.java | 4 +- src/commands/CommandBlurry.java | 2 +- src/commands/CommandBoop.java | 8 +- src/commands/CommandCatch.java | 2 +- src/commands/CommandChangeIndicator.java | 6 +- src/commands/CommandChoose.java | 6 +- src/commands/CommandColiru.java | 4 +- src/commands/CommandCrouton.java | 2 +- src/commands/CommandDBFlush.java | 2 +- src/commands/CommandDBStats.java | 2 +- src/commands/CommandDoWork.java | 4 +- src/commands/CommandEightBall.java | 44 ++++---- src/commands/CommandFetch.java | 16 +-- src/commands/CommandGiveBeans.java | 8 +- src/commands/CommandGuildRoleAdd.java | 8 +- src/commands/CommandGuildRoleAllowed.java | 6 +- src/commands/CommandGuildRoleList.java | 4 +- src/commands/CommandGuildRoleNotAllowed.java | 6 +- src/commands/CommandGuildRoleRemove.java | 8 +- src/commands/CommandHelp.java | 4 +- src/commands/CommandHelpBuilder.java | 2 +- src/commands/CommandInfo.java | 4 +- src/commands/CommandInvite.java | 2 +- src/commands/CommandJDoodle.java | 4 +- src/commands/CommandMap.java | 12 +-- src/commands/CommandPerish.java | 2 +- src/commands/CommandPing.java | 4 +- src/commands/CommandPollManage.java | 2 +- src/commands/CommandPollResults.java | 4 +- src/commands/CommandPollShow.java | 8 +- src/commands/CommandPollVote.java | 12 +-- src/commands/CommandRPEnd.java | 6 +- src/commands/CommandRPG.java | 4 +- src/commands/CommandRPStart.java | 2 +- src/commands/CommandRaffleEnd.java | 6 +- src/commands/CommandRaffleJoin.java | 6 +- src/commands/CommandRaffleSpin.java | 6 +- src/commands/CommandRaffleStart.java | 6 +- src/commands/CommandRating.java | 8 +- src/commands/CommandRole.java | 10 +- src/commands/CommandRoll.java | 4 +- src/commands/CommandShutdown.java | 6 +- src/commands/CommandStark.java | 2 +- src/commands/CommandStats.java | 2 +- src/commands/CommandTeey.java | 2 +- src/commands/CommandTradeBeans.java | 12 +-- src/commands/CommandTweet.java | 4 +- src/commands/CommandWolfram.java | 6 +- src/commands/CommandYeet.java | 2 +- src/core/LocCommands.java | 4 +- src/core/LocStrings.java | 4 +- src/core/ObjectBuilderFactory.java | 102 +++++++++---------- 55 files changed, 214 insertions(+), 214 deletions(-) diff --git a/src/commands/CommandBeansShow.java b/src/commands/CommandBeansShow.java index 0878608..086fc6b 100644 --- a/src/commands/CommandBeansShow.java +++ b/src/commands/CommandBeansShow.java @@ -9,13 +9,13 @@ public class CommandBeansShow extends Command public CommandBeansShow(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("BeansShowInfo"); }; + public String getHelpText() { return LocStrings.stub("BeansShowInfo"); }; @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.mentions == null) - res.Call(String.format(LocStrings.Stub("BeansShowDisplay"), user.GetBeans())); + res.Call(String.format(LocStrings.stub("BeansShowDisplay"), user.GetBeans())); else { String mentionedBeans = ""; @@ -23,7 +23,7 @@ public class CommandBeansShow extends Command { mentionedBeans += mentioned.name + " has " + mentioned.GetBeans() + " "; } - res.Call(String.format(LocStrings.Stub("BeansShowMentioned"), mentionedBeans)); + res.Call(String.format(LocStrings.stub("BeansShowMentioned"), mentionedBeans)); } } } diff --git a/src/commands/CommandBenchmark.java b/src/commands/CommandBenchmark.java index 86c4289..f727e9d 100644 --- a/src/commands/CommandBenchmark.java +++ b/src/commands/CommandBenchmark.java @@ -25,7 +25,7 @@ public class CommandBenchmark extends Command } @Override - public String getHelpText() { return LocStrings.Stub("BenchmarkInfo"); } + public String getHelpText() { return LocStrings.stub("BenchmarkInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -47,7 +47,7 @@ public class CommandBenchmark extends Command if(commandOutput == null) { - res.Call(LocStrings.Stub("BenchmarkInvalid")); + res.Call(LocStrings.stub("BenchmarkInvalid")); return; } diff --git a/src/commands/CommandBetBeans.java b/src/commands/CommandBetBeans.java index e359b5a..24ef524 100644 --- a/src/commands/CommandBetBeans.java +++ b/src/commands/CommandBetBeans.java @@ -11,7 +11,7 @@ public class CommandBetBeans extends Command public CommandBetBeans(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("BetBeansInfo"); } + public String getHelpText() { return LocStrings.stub("BetBeansInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -24,19 +24,19 @@ public class CommandBetBeans extends Command bet = Integer.parseInt(input.args); if(bet < 50) { - res.Call(LocStrings.Stub("BetBeansLowBet")); + res.Call(LocStrings.stub("BetBeansLowBet")); return; } } catch (NumberFormatException e) { - res.Call(LocStrings.Stub("BetBeansNotValid")); + res.Call(LocStrings.stub("BetBeansNotValid")); return; } if(user.GetBeans() < bet) { - res.Call(LocStrings.Stub("BetBeansNotEnough")); + res.Call(LocStrings.stub("BetBeansNotEnough")); return; } @@ -51,14 +51,14 @@ public class CommandBetBeans extends Command if(win == 0) { - res.Call(LocStrings.Stub("BetBeansLose")); + res.Call(LocStrings.stub("BetBeansLose")); guild.beans.Add(bet); return; } user.ChangeBeans(bet*win); guild.beans.Subtract(bet*win); - res.Call(String.format(LocStrings.Stub("BetBeansWin"), "" + (bet*win))); + res.Call(String.format(LocStrings.stub("BetBeansWin"), "" + (bet*win))); } private int getWinning(int [] slots) diff --git a/src/commands/CommandBetHistory.java b/src/commands/CommandBetHistory.java index 0a87b87..a1d5c3d 100644 --- a/src/commands/CommandBetHistory.java +++ b/src/commands/CommandBetHistory.java @@ -15,11 +15,11 @@ public class CommandBetHistory extends Command public CommandBetHistory(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("BetHistoryInfo"); } + public String getHelpText() { return LocStrings.stub("BetHistoryInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - res.Call(String.format(LocStrings.Stub("BetHistoryOutput"), guild.beans.Get())); + res.Call(String.format(LocStrings.stub("BetHistoryOutput"), guild.beans.Get())); } } \ No newline at end of file diff --git a/src/commands/CommandBlurry.java b/src/commands/CommandBlurry.java index 9fe2c3e..fcc0605 100644 --- a/src/commands/CommandBlurry.java +++ b/src/commands/CommandBlurry.java @@ -17,7 +17,7 @@ public class CommandBlurry extends Command public CommandBlurry(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("BlurryInfo"); }; + public String getHelpText() { return LocStrings.stub("BlurryInfo"); }; private static Long num = 0l; diff --git a/src/commands/CommandBoop.java b/src/commands/CommandBoop.java index 6862c22..c706e36 100644 --- a/src/commands/CommandBoop.java +++ b/src/commands/CommandBoop.java @@ -60,7 +60,7 @@ public class CommandBoop extends Command } @Override - public String getHelpText() { return LocStrings.Stub("BoopInfo"); } + public String getHelpText() { return LocStrings.stub("BoopInfo"); } // Called when the command is run! @Override @@ -69,14 +69,14 @@ public class CommandBoop extends Command if(input.mentions == null) { boopTracker.ApplyBoop(); - res.Call(String.format(LocStrings.Stub("BoopStandard"), user.name, boopTracker.HowMany())); + res.Call(String.format(LocStrings.stub("BoopStandard"), user.name, boopTracker.HowMany())); } else { if(input.mentions.length == 1) { boopTracker.ApplyBoop(); - res.Call(String.format(LocStrings.Stub("BoopPerson"), user.name, input.mentions[0].name)); + res.Call(String.format(LocStrings.stub("BoopPerson"), user.name, input.mentions[0].name)); return; } @@ -90,7 +90,7 @@ public class CommandBoop extends Command booped += "and " + input.mentions[i].name; } - res.Call(String.format(LocStrings.Stub("BoopMultiple"), user.name, booped)); + res.Call(String.format(LocStrings.stub("BoopMultiple"), user.name, booped)); } } } \ No newline at end of file diff --git a/src/commands/CommandCatch.java b/src/commands/CommandCatch.java index 576b936..bd74917 100644 --- a/src/commands/CommandCatch.java +++ b/src/commands/CommandCatch.java @@ -23,7 +23,7 @@ public class CommandCatch extends Command private static Long num = 0l; @Override - public String getHelpText() { return LocStrings.Stub("CatchInfo"); } + public String getHelpText() { return LocStrings.stub("CatchInfo"); } // Called when the command is run! @Override diff --git a/src/commands/CommandChangeIndicator.java b/src/commands/CommandChangeIndicator.java index 0bb9b31..eff955f 100644 --- a/src/commands/CommandChangeIndicator.java +++ b/src/commands/CommandChangeIndicator.java @@ -9,7 +9,7 @@ public class CommandChangeIndicator extends Command public CommandChangeIndicator(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("ChangeIndicatorInfo"); } + public String getHelpText() { return LocStrings.stub("ChangeIndicatorInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -17,7 +17,7 @@ public class CommandChangeIndicator extends Command String arg = input.args.trim(); if(arg.length() == 0) { - res.Call(LocStrings.Stub("ChangeIndicatorError")); + res.Call(LocStrings.stub("ChangeIndicatorError")); return; } @@ -29,6 +29,6 @@ public class CommandChangeIndicator extends Command } guild.SetCommandIndicator(indicator); - res.Call(String.format(LocStrings.Stub("ChangeIndicatorChanged"), guild.GetCommandIndicator())); + res.Call(String.format(LocStrings.stub("ChangeIndicatorChanged"), guild.GetCommandIndicator())); } } diff --git a/src/commands/CommandChoose.java b/src/commands/CommandChoose.java index f226e44..d5478bc 100644 --- a/src/commands/CommandChoose.java +++ b/src/commands/CommandChoose.java @@ -14,7 +14,7 @@ public class CommandChoose extends Command public CommandChoose(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("ChooseInfo"); } + public String getHelpText() { return LocStrings.stub("ChooseInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -22,10 +22,10 @@ public class CommandChoose extends Command String [] choices = input.args.split(","); if(choices.length == 1) { - res.Call(LocStrings.Stub("ChooseOne")); + res.Call(LocStrings.stub("ChooseOne")); return; } - res.Call(String.format(LocStrings.Stub("ChooseChoice"), (choices[(int) (Math.random()*choices.length)]).toString())); + res.Call(String.format(LocStrings.stub("ChooseChoice"), (choices[(int) (Math.random()*choices.length)]).toString())); } } diff --git a/src/commands/CommandColiru.java b/src/commands/CommandColiru.java index 2087df2..0ca72d7 100644 --- a/src/commands/CommandColiru.java +++ b/src/commands/CommandColiru.java @@ -12,14 +12,14 @@ public class CommandColiru extends Command public CommandColiru(KittyRole level, KittyRating rating) { super(level, rating);} @Override - public String getHelpText() { return LocStrings.Stub("ColiruInfo"); } + public String getHelpText() { return LocStrings.stub("ColiruInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args.trim().length() < 1) { - res.Call(LocStrings.Stub("ColiruError")); + res.Call(LocStrings.stub("ColiruError")); return; } diff --git a/src/commands/CommandCrouton.java b/src/commands/CommandCrouton.java index 1ca9f38..3002fca 100644 --- a/src/commands/CommandCrouton.java +++ b/src/commands/CommandCrouton.java @@ -18,7 +18,7 @@ public class CommandCrouton extends Command public CommandCrouton(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("CroutonInfo"); }; + public String getHelpText() { return LocStrings.stub("CroutonInfo"); }; @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) diff --git a/src/commands/CommandDBFlush.java b/src/commands/CommandDBFlush.java index 061fa7e..fd7c08f 100644 --- a/src/commands/CommandDBFlush.java +++ b/src/commands/CommandDBFlush.java @@ -19,7 +19,7 @@ public class CommandDBFlush extends Command public CommandDBFlush(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("DBFlushInfo"); } + public String getHelpText() { return LocStrings.stub("DBFlushInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) diff --git a/src/commands/CommandDBStats.java b/src/commands/CommandDBStats.java index e28c2a8..ff02330 100644 --- a/src/commands/CommandDBStats.java +++ b/src/commands/CommandDBStats.java @@ -26,7 +26,7 @@ public class CommandDBStats extends Command } @Override - public String getHelpText() { return LocStrings.Stub("DBStatsInfo"); } + public String getHelpText() { return LocStrings.stub("DBStatsInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) diff --git a/src/commands/CommandDoWork.java b/src/commands/CommandDoWork.java index bda8347..ad5e17a 100644 --- a/src/commands/CommandDoWork.java +++ b/src/commands/CommandDoWork.java @@ -15,7 +15,7 @@ public class CommandDoWork extends Command public CommandDoWork(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("DoWorkInfo"); } + public String getHelpText() { return LocStrings.stub("DoWorkInfo"); } // Called when the command is run! @Override @@ -28,6 +28,6 @@ public class CommandDoWork extends Command thispieceofshit += Math.log((double)i); } - res.Call(LocStrings.Stub("DoWorkFinished")); + res.Call(LocStrings.stub("DoWorkFinished")); } } \ No newline at end of file diff --git a/src/commands/CommandEightBall.java b/src/commands/CommandEightBall.java index e3ac564..f4253a3 100644 --- a/src/commands/CommandEightBall.java +++ b/src/commands/CommandEightBall.java @@ -8,40 +8,40 @@ public class CommandEightBall extends Command { String [] answers = { - LocStrings.Stub("EightBallYes1") - , LocStrings.Stub("EightBallYes2") - , LocStrings.Stub("EightBallYes3") - , LocStrings.Stub("EightBallYes4") - , LocStrings.Stub("EightBallYes5") - , LocStrings.Stub("EightBallYes6") - , LocStrings.Stub("EightBallYes7") - , LocStrings.Stub("EightBallYes8") - , LocStrings.Stub("EightBallYes9") - , LocStrings.Stub("EightBallYes10") + LocStrings.stub("EightBallYes1") + , LocStrings.stub("EightBallYes2") + , LocStrings.stub("EightBallYes3") + , LocStrings.stub("EightBallYes4") + , LocStrings.stub("EightBallYes5") + , LocStrings.stub("EightBallYes6") + , LocStrings.stub("EightBallYes7") + , LocStrings.stub("EightBallYes8") + , LocStrings.stub("EightBallYes9") + , LocStrings.stub("EightBallYes10") - , LocStrings.Stub("EightBallMaybe1") - , LocStrings.Stub("EightBallMaybe2") - , LocStrings.Stub("EightBallMaybe3") - , LocStrings.Stub("EightBallMaybe4") - , LocStrings.Stub("EightBallMaybe5") + , LocStrings.stub("EightBallMaybe1") + , LocStrings.stub("EightBallMaybe2") + , LocStrings.stub("EightBallMaybe3") + , LocStrings.stub("EightBallMaybe4") + , LocStrings.stub("EightBallMaybe5") - , LocStrings.Stub("EightBallNo1") - , LocStrings.Stub("EightBallNo2") - , LocStrings.Stub("EightBallNo3") - , LocStrings.Stub("EightBallNo4") - , LocStrings.Stub("EightBallNo5") + , LocStrings.stub("EightBallNo1") + , LocStrings.stub("EightBallNo2") + , LocStrings.stub("EightBallNo3") + , LocStrings.stub("EightBallNo4") + , LocStrings.stub("EightBallNo5") }; public CommandEightBall(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("EightBallInfo"); } + public String getHelpText() { return LocStrings.stub("EightBallInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args.trim().length() < 1) - res.Call(LocStrings.Stub("EightBallError")); + res.Call(LocStrings.stub("EightBallError")); res.Call(answers[(int) (Math.random()*answers.length)]); } diff --git a/src/commands/CommandFetch.java b/src/commands/CommandFetch.java index 1d1607c..33518b0 100644 --- a/src/commands/CommandFetch.java +++ b/src/commands/CommandFetch.java @@ -15,7 +15,7 @@ public class CommandFetch extends Command public CommandFetch(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("FetchInfo"); } + public String getHelpText() { return LocStrings.stub("FetchInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -27,22 +27,22 @@ public class CommandFetch extends Command switch(num) { case 1: - res.Call(String.format(LocStrings.Stub("FetchBringBack"), emote)); + res.Call(String.format(LocStrings.stub("FetchBringBack"), emote)); break; case 2: - res.Call(String.format(LocStrings.Stub("FetchRunAway"))); + res.Call(String.format(LocStrings.stub("FetchRunAway"))); break; case 3: - res.Call(String.format(LocStrings.Stub("FetchBringBackWrong"), guild.emoji.get((int)(Math.random() * guild.emoji.size()) + 1))); + res.Call(String.format(LocStrings.stub("FetchBringBackWrong"), guild.emoji.get((int)(Math.random() * guild.emoji.size()) + 1))); break; case 4: - res.Call(String.format(LocStrings.Stub("FetchEat"), emote)); + res.Call(String.format(LocStrings.stub("FetchEat"), emote)); break; case 5: - res.Call(String.format(LocStrings.Stub("FetchCatchRun"), emote)); + res.Call(String.format(LocStrings.stub("FetchCatchRun"), emote)); break; case 6: - res.Call(String.format(LocStrings.Stub("FetchStare"), user.name)); + res.Call(String.format(LocStrings.stub("FetchStare"), user.name)); break; default: res.Call("" + num); @@ -50,7 +50,7 @@ public class CommandFetch extends Command } else { - res.Call(String.format(LocStrings.Stub("FetchError"))); + res.Call(String.format(LocStrings.stub("FetchError"))); System.out.println(emote); } } diff --git a/src/commands/CommandGiveBeans.java b/src/commands/CommandGiveBeans.java index cb01a8d..03fb3ff 100644 --- a/src/commands/CommandGiveBeans.java +++ b/src/commands/CommandGiveBeans.java @@ -9,7 +9,7 @@ public class CommandGiveBeans extends Command public CommandGiveBeans (KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("GiveBeansInfo"); } + public String getHelpText() { return LocStrings.stub("GiveBeansInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -17,7 +17,7 @@ public class CommandGiveBeans extends Command // First, make sure someone is mentioned if(input.mentions == null) { - res.Call(LocStrings.Stub("GiveBeansNoneMentioned")); + res.Call(LocStrings.stub("GiveBeansNoneMentioned")); return; } @@ -42,7 +42,7 @@ public class CommandGiveBeans extends Command // If there wasn't a number we could find, well, nothing we can do. if(beans == null) { - res.Call(LocStrings.Stub("GiveBeansInvalid")); + res.Call(LocStrings.stub("GiveBeansInvalid")); return; } @@ -50,7 +50,7 @@ public class CommandGiveBeans extends Command for(int i = 0; i < input.mentions.length; i++) { input.mentions[i].ChangeBeans(beans); - res.Call(String.format(LocStrings.Stub("GiveBeansSuccess"), input.mentions[i].name, "" + beans)); + res.Call(String.format(LocStrings.stub("GiveBeansSuccess"), input.mentions[i].name, "" + beans)); } } } diff --git a/src/commands/CommandGuildRoleAdd.java b/src/commands/CommandGuildRoleAdd.java index ebca762..605ca45 100644 --- a/src/commands/CommandGuildRoleAdd.java +++ b/src/commands/CommandGuildRoleAdd.java @@ -15,7 +15,7 @@ public class CommandGuildRoleAdd extends Command public CommandGuildRoleAdd(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("GuildRoleAddInfo"); }; + public String getHelpText() { return LocStrings.stub("GuildRoleAddInfo"); }; @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -25,16 +25,16 @@ public class CommandGuildRoleAdd extends Command { if(guild.control.addRole(user.discordID, role)) { - res.Call(String.format(LocStrings.Stub("GuildRoleAddSuccess"), role, user.name)); + res.Call(String.format(LocStrings.stub("GuildRoleAddSuccess"), role, user.name)); } else { - res.Call(String.format(LocStrings.Stub("GuildRoleAddFailure"), role, user.name)); + res.Call(String.format(LocStrings.stub("GuildRoleAddFailure"), role, user.name)); } } else { - res.Call(String.format(LocStrings.Stub("GuildRoleAddNotAllowed"), role)); + res.Call(String.format(LocStrings.stub("GuildRoleAddNotAllowed"), role)); } } } \ No newline at end of file diff --git a/src/commands/CommandGuildRoleAllowed.java b/src/commands/CommandGuildRoleAllowed.java index c61a101..556f447 100644 --- a/src/commands/CommandGuildRoleAllowed.java +++ b/src/commands/CommandGuildRoleAllowed.java @@ -15,7 +15,7 @@ public class CommandGuildRoleAllowed extends Command public CommandGuildRoleAllowed(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("GuildRoleAllowedInfo"); } + public String getHelpText() { return LocStrings.stub("GuildRoleAllowedInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -27,12 +27,12 @@ public class CommandGuildRoleAllowed extends Command role = roles[i].trim(); if(guild.roleList.contains(role)) { - res.Call(LocStrings.Stub("GuildRoleAllowedDuplicate")); + res.Call(LocStrings.stub("GuildRoleAllowedDuplicate")); } else { guild.roleList.add(role); - res.Call(String.format(LocStrings.Stub("GuildRoleAllowedSuccess"), role)); + res.Call(String.format(LocStrings.stub("GuildRoleAllowedSuccess"), role)); } } } diff --git a/src/commands/CommandGuildRoleList.java b/src/commands/CommandGuildRoleList.java index 52557f6..61dda19 100644 --- a/src/commands/CommandGuildRoleList.java +++ b/src/commands/CommandGuildRoleList.java @@ -17,7 +17,7 @@ public class CommandGuildRoleList extends Command String roles = ""; if(guild.roleList.isEmpty()) { - res.Call(String.format(LocStrings.Stub("GuildRoleListEmpty"))); + res.Call(String.format(LocStrings.stub("GuildRoleListEmpty"))); return; } for(int i = 0; i < guild.roleList.size(); i++) @@ -26,6 +26,6 @@ public class CommandGuildRoleList extends Command roles += " and "; roles += guild.roleList.get(i); } - res.Call(String.format(LocStrings.Stub("GuildRoleListOutput"), roles)); + res.Call(String.format(LocStrings.stub("GuildRoleListOutput"), roles)); } } \ No newline at end of file diff --git a/src/commands/CommandGuildRoleNotAllowed.java b/src/commands/CommandGuildRoleNotAllowed.java index 76f7a1f..f6c21da 100644 --- a/src/commands/CommandGuildRoleNotAllowed.java +++ b/src/commands/CommandGuildRoleNotAllowed.java @@ -15,7 +15,7 @@ public class CommandGuildRoleNotAllowed extends Command public CommandGuildRoleNotAllowed(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("GuildRoleNotAllowedInfo"); } + public String getHelpText() { return LocStrings.stub("GuildRoleNotAllowedInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -28,11 +28,11 @@ public class CommandGuildRoleNotAllowed extends Command if(guild.roleList.contains(role)) { guild.roleList.remove(role); - res.Call(LocStrings.Stub("GuildRoleNotAllowedSuccess")); + res.Call(LocStrings.stub("GuildRoleNotAllowedSuccess")); } else { - res.Call(String.format(LocStrings.Stub("GuildRoleNotAllowedFailure"), role)); + res.Call(String.format(LocStrings.stub("GuildRoleNotAllowedFailure"), role)); } } } diff --git a/src/commands/CommandGuildRoleRemove.java b/src/commands/CommandGuildRoleRemove.java index e44d129..a5a5ba7 100644 --- a/src/commands/CommandGuildRoleRemove.java +++ b/src/commands/CommandGuildRoleRemove.java @@ -15,7 +15,7 @@ public class CommandGuildRoleRemove extends Command public CommandGuildRoleRemove(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("GuildRoleRemoveInfo"); }; + public String getHelpText() { return LocStrings.stub("GuildRoleRemoveInfo"); }; @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -25,16 +25,16 @@ public class CommandGuildRoleRemove extends Command { if(guild.control.removeRole(user.discordID, role)) { - res.Call(String.format(LocStrings.Stub("GuildRoleRemoveSuccess"), role, user.name)); + res.Call(String.format(LocStrings.stub("GuildRoleRemoveSuccess"), role, user.name)); } else { - res.Call(String.format(LocStrings.Stub("GuildRoleRemoveFailure"), role, user.name)); + res.Call(String.format(LocStrings.stub("GuildRoleRemoveFailure"), role, user.name)); } } else { - res.Call(String.format(LocStrings.Stub("GuildRoleRemoveNotAllowed"), role)); + res.Call(String.format(LocStrings.stub("GuildRoleRemoveNotAllowed"), role)); } } } \ No newline at end of file diff --git a/src/commands/CommandHelp.java b/src/commands/CommandHelp.java index 9277e7c..a03cea9 100644 --- a/src/commands/CommandHelp.java +++ b/src/commands/CommandHelp.java @@ -15,7 +15,7 @@ public class CommandHelp extends Command public CommandHelp(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("HelpInfo"); } + public String getHelpText() { return LocStrings.stub("HelpInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -24,7 +24,7 @@ public class CommandHelp extends Command if(help == null) { - help = LocStrings.Stub("HelpDisplay"); + help = LocStrings.stub("HelpDisplay"); } else { diff --git a/src/commands/CommandHelpBuilder.java b/src/commands/CommandHelpBuilder.java index 4c747db..d2f6242 100644 --- a/src/commands/CommandHelpBuilder.java +++ b/src/commands/CommandHelpBuilder.java @@ -26,7 +26,7 @@ public class CommandHelpBuilder extends Command { } @Override - public String getHelpText() { return LocStrings.Stub("HelpBuilderInfo"); } + public String getHelpText() { return LocStrings.stub("HelpBuilderInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) diff --git a/src/commands/CommandInfo.java b/src/commands/CommandInfo.java index f15e62f..3a53874 100644 --- a/src/commands/CommandInfo.java +++ b/src/commands/CommandInfo.java @@ -15,11 +15,11 @@ public class CommandInfo extends Command public CommandInfo(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("InfoInfo"); } + public String getHelpText() { return LocStrings.stub("InfoInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - res.Call(LocStrings.Stub("InfoResponse")); + res.Call(LocStrings.stub("InfoResponse")); } } \ No newline at end of file diff --git a/src/commands/CommandInvite.java b/src/commands/CommandInvite.java index 077b040..809ba1c 100644 --- a/src/commands/CommandInvite.java +++ b/src/commands/CommandInvite.java @@ -10,7 +10,7 @@ public class CommandInvite extends Command public CommandInvite(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("InviteInfo"); } + public String getHelpText() { return LocStrings.stub("InviteInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) diff --git a/src/commands/CommandJDoodle.java b/src/commands/CommandJDoodle.java index d1eb630..b9b5b7a 100644 --- a/src/commands/CommandJDoodle.java +++ b/src/commands/CommandJDoodle.java @@ -12,14 +12,14 @@ public class CommandJDoodle extends Command public CommandJDoodle(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("JDoodleInfo"); } + public String getHelpText() { return LocStrings.stub("JDoodleInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args.trim().length() < 1) { - res.Call(LocStrings.Stub("JDoodleError")); + res.Call(LocStrings.stub("JDoodleError")); return; } diff --git a/src/commands/CommandMap.java b/src/commands/CommandMap.java index add05a1..a0b88c5 100644 --- a/src/commands/CommandMap.java +++ b/src/commands/CommandMap.java @@ -23,7 +23,7 @@ public class CommandMap extends Command public CommandMap(KittyRole roleLevel, KittyRating contentRating) { super(roleLevel, contentRating); } @Override - public String getHelpText() { return String.format(LocStrings.Stub("MapInfo"), "" + MaxWidth, "" + MaxHeight); } + public String getHelpText() { return String.format(LocStrings.stub("MapInfo"), "" + MaxWidth, "" + MaxHeight); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -60,7 +60,7 @@ public class CommandMap extends Command } catch(NumberFormatException e) { - res.Call(LocStrings.Stub("MapInvalid")); + res.Call(LocStrings.stub("MapInvalid")); return; } @@ -76,10 +76,10 @@ public class CommandMap extends Command } // Response header creation - header += LocStrings.Stub("MapVersion") + "\n"; - header += LocStrings.Stub("MapSeed") + ": `" + seed + "`, "; - header += LocStrings.Stub("MapWidth") + "`"+ width +"`, "; - header += LocStrings.Stub("MapHeight") + ": `"+ height + "`\n"; + header += LocStrings.stub("MapVersion") + "\n"; + header += LocStrings.stub("MapSeed") + ": `" + seed + "`, "; + header += LocStrings.stub("MapWidth") + "`"+ width +"`, "; + header += LocStrings.stub("MapHeight") + ": `"+ height + "`\n"; // Response body creation body += "```\n"; diff --git a/src/commands/CommandPerish.java b/src/commands/CommandPerish.java index 1847659..84a33b2 100644 --- a/src/commands/CommandPerish.java +++ b/src/commands/CommandPerish.java @@ -23,7 +23,7 @@ public class CommandPerish extends Command public CommandPerish(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("PerishInfo"); }; + public String getHelpText() { return LocStrings.stub("PerishInfo"); }; private static Long num = 0l; diff --git a/src/commands/CommandPing.java b/src/commands/CommandPing.java index 351f8b0..d732ccf 100644 --- a/src/commands/CommandPing.java +++ b/src/commands/CommandPing.java @@ -15,12 +15,12 @@ public class CommandPing extends Command public CommandPing(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("PingInfo"); } + public String getHelpText() { return LocStrings.stub("PingInfo"); } // Called when the command is run! @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - res.Call(LocStrings.Stub("PingResponse")); + res.Call(LocStrings.stub("PingResponse")); } } diff --git a/src/commands/CommandPollManage.java b/src/commands/CommandPollManage.java index 4fc304b..62b24f9 100644 --- a/src/commands/CommandPollManage.java +++ b/src/commands/CommandPollManage.java @@ -14,7 +14,7 @@ public class CommandPollManage extends Command public CommandPollManage(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("PollManageInfo"); } + public String getHelpText() { return LocStrings.stub("PollManageInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) diff --git a/src/commands/CommandPollResults.java b/src/commands/CommandPollResults.java index 4ba0785..e42ff94 100644 --- a/src/commands/CommandPollResults.java +++ b/src/commands/CommandPollResults.java @@ -10,7 +10,7 @@ public class CommandPollResults extends Command public CommandPollResults(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("PollResultsInfo"); } + public String getHelpText() { return LocStrings.stub("PollResultsInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -28,7 +28,7 @@ public class CommandPollResults extends Command for(int i = 0; i < votes.size(); i++) { - results += String.format(LocStrings.Stub("PollResultsResponse"), votes.get(i).votes, votes.get(i).choice, (int)(((double)votes.get(i).votes) / ((double)totalVotes) * 100)); + results += String.format(LocStrings.stub("PollResultsResponse"), votes.get(i).votes, votes.get(i).choice, (int)(((double)votes.get(i).votes) / ((double)totalVotes) * 100)); } res.Call(results); diff --git a/src/commands/CommandPollShow.java b/src/commands/CommandPollShow.java index 4aaf848..cd332a3 100644 --- a/src/commands/CommandPollShow.java +++ b/src/commands/CommandPollShow.java @@ -8,18 +8,18 @@ public class CommandPollShow extends Command public CommandPollShow(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("PollShowInfo"); } + public String getHelpText() { return LocStrings.stub("PollShowInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(!guild.polling) { - res.Call(LocStrings.Stub("PollShowNoPoll")); + res.Call(LocStrings.stub("PollShowNoPoll")); return; } - String poll = String.format(LocStrings.Stub("PollShowPoll"), guild.poll); - poll += LocStrings.Stub("PollShowChoices"); + String poll = String.format(LocStrings.stub("PollShowPoll"), guild.poll); + poll += LocStrings.stub("PollShowChoices"); for(int i = 0; i < guild.choices.size(); i++) { poll += (i+1) + ": `" + guild.choices.get(i).choice + "`\n"; diff --git a/src/commands/CommandPollVote.java b/src/commands/CommandPollVote.java index 75de872..2a9de19 100644 --- a/src/commands/CommandPollVote.java +++ b/src/commands/CommandPollVote.java @@ -8,7 +8,7 @@ public class CommandPollVote extends Command public CommandPollVote(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("PollVoteInfo"); } + public String getHelpText() { return LocStrings.stub("PollVoteInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -17,7 +17,7 @@ public class CommandPollVote extends Command { if(guild.hasVoted.contains(user.uniqueID)) { - res.Call(LocStrings.Stub("PollVoteAlreadyVoted")); + res.Call(LocStrings.stub("PollVoteAlreadyVoted")); return; } try @@ -25,23 +25,23 @@ public class CommandPollVote extends Command int voteNum = Integer.parseInt(input.args)-1; if(voteNum >= guild.choices.size() || voteNum < 0) { - res.Call(String.format(LocStrings.Stub("PollVoteNotValidVote"), voteNum)); + res.Call(String.format(LocStrings.stub("PollVoteNotValidVote"), voteNum)); return; } KittyPoll polled = guild.choices.get(voteNum); polled.votes++; guild.hasVoted.add(user.uniqueID); - res.Call(LocStrings.Stub("PollVoteSuccess") + " `" + polled.choice + "`!"); + res.Call(LocStrings.stub("PollVoteSuccess") + " `" + polled.choice + "`!"); return; } catch (NumberFormatException e) { - res.Call(LocStrings.Stub("PollVoteNotValidNumber")); + res.Call(LocStrings.stub("PollVoteNotValidNumber")); return; } } - res.Call(LocStrings.Stub("PollVoteNoPoll")); + res.Call(LocStrings.stub("PollVoteNoPoll")); } } diff --git a/src/commands/CommandRPEnd.java b/src/commands/CommandRPEnd.java index 1aed3ae..55ac7ee 100644 --- a/src/commands/CommandRPEnd.java +++ b/src/commands/CommandRPEnd.java @@ -14,7 +14,7 @@ public class CommandRPEnd extends Command public CommandRPEnd (KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("RPEndInfo"); } + public String getHelpText() { return LocStrings.stub("RPEndInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -33,11 +33,11 @@ public class CommandRPEnd extends Command if(sending != null) { res.CallFile(sending, "txt"); - res.Call(LocStrings.Stub("RPEndFileOut")); + res.Call(LocStrings.stub("RPEndFileOut")); } else { - res.Call(LocStrings.Stub("RPEndError")); + res.Call(LocStrings.stub("RPEndError")); } } } diff --git a/src/commands/CommandRPG.java b/src/commands/CommandRPG.java index 275c79c..02a7bdc 100644 --- a/src/commands/CommandRPG.java +++ b/src/commands/CommandRPG.java @@ -23,7 +23,7 @@ public class CommandRPG extends Command } @Override - public String getHelpText() { return LocStrings.Stub("RPGInfo"); }; + public String getHelpText() { return LocStrings.stub("RPGInfo"); }; @Override @@ -44,7 +44,7 @@ public class CommandRPG extends Command if(result == null) { - res.Call(LocStrings.Stub("RPGInvalid")); + res.Call(LocStrings.stub("RPGInvalid")); return; } diff --git a/src/commands/CommandRPStart.java b/src/commands/CommandRPStart.java index 3e03635..3e530bd 100644 --- a/src/commands/CommandRPStart.java +++ b/src/commands/CommandRPStart.java @@ -12,7 +12,7 @@ public class CommandRPStart extends Command public CommandRPStart (KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("RPStartInfo"); } + public String getHelpText() { return LocStrings.stub("RPStartInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) diff --git a/src/commands/CommandRaffleEnd.java b/src/commands/CommandRaffleEnd.java index 6d7bc72..9da8b0f 100644 --- a/src/commands/CommandRaffleEnd.java +++ b/src/commands/CommandRaffleEnd.java @@ -15,18 +15,18 @@ public class CommandRaffleEnd extends Command public CommandRaffleEnd(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("RaffleEndInfo"); } + public String getHelpText() { return LocStrings.stub("RaffleEndInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(guild.endRaffle()) { - res.Call(LocStrings.Stub("RaffleEndSuccess")); + res.Call(LocStrings.stub("RaffleEndSuccess")); } else { - res.Call(LocStrings.Stub("RaffleEndFailure")); + res.Call(LocStrings.stub("RaffleEndFailure")); } } } \ No newline at end of file diff --git a/src/commands/CommandRaffleJoin.java b/src/commands/CommandRaffleJoin.java index c575443..8676693 100644 --- a/src/commands/CommandRaffleJoin.java +++ b/src/commands/CommandRaffleJoin.java @@ -15,18 +15,18 @@ public class CommandRaffleJoin extends Command public CommandRaffleJoin(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("RaffleJoinInfo"); } + public String getHelpText() { return LocStrings.stub("RaffleJoinInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(guild.joinRaffle(user)) { - res.Call(LocStrings.Stub("RaffleJoinSuccess")); + res.Call(LocStrings.stub("RaffleJoinSuccess")); } else { - res.Call(LocStrings.Stub("RaffleJoinFailure")); + res.Call(LocStrings.stub("RaffleJoinFailure")); } } } diff --git a/src/commands/CommandRaffleSpin.java b/src/commands/CommandRaffleSpin.java index 380a84e..888f2a7 100644 --- a/src/commands/CommandRaffleSpin.java +++ b/src/commands/CommandRaffleSpin.java @@ -15,18 +15,18 @@ public class CommandRaffleSpin extends Command public CommandRaffleSpin(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("RaffleSpinInfo"); } + public String getHelpText() { return LocStrings.stub("RaffleSpinInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { try { - res.Call(String.format(LocStrings.Stub("RaffleSpinSuccess"), guild.chooseRaffleWinner().name)); + res.Call(String.format(LocStrings.stub("RaffleSpinSuccess"), guild.chooseRaffleWinner().name)); } catch(Exception e) { - res.Call(LocStrings.Stub("RaffleSpinFailure")); + res.Call(LocStrings.stub("RaffleSpinFailure")); } } } \ No newline at end of file diff --git a/src/commands/CommandRaffleStart.java b/src/commands/CommandRaffleStart.java index cd359c3..f29fd34 100644 --- a/src/commands/CommandRaffleStart.java +++ b/src/commands/CommandRaffleStart.java @@ -15,7 +15,7 @@ public class CommandRaffleStart extends Command public CommandRaffleStart(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("RaffleStartInfo"); } + public String getHelpText() { return LocStrings.stub("RaffleStartInfo"); } public int beanCost; @@ -33,11 +33,11 @@ public class CommandRaffleStart extends Command if(guild.startRaffle(beanCost)) { - res.Call(String.format(LocStrings.Stub("RaffleStartSuccess"), beanCost)); + res.Call(String.format(LocStrings.stub("RaffleStartSuccess"), beanCost)); } else { - res.Call(LocStrings.Stub("RaffleStartFailure")); + res.Call(LocStrings.stub("RaffleStartFailure")); } } } diff --git a/src/commands/CommandRating.java b/src/commands/CommandRating.java index 0ae8427..3ad142e 100644 --- a/src/commands/CommandRating.java +++ b/src/commands/CommandRating.java @@ -15,7 +15,7 @@ public class CommandRating extends Command public CommandRating(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("RatingInfo"); } + public String getHelpText() { return LocStrings.stub("RatingInfo"); } // Called when the command is run! @Override @@ -55,11 +55,11 @@ public class CommandRating extends Command } if(newRating != null) - res.Call(LocStrings.Stub("RatingChanged") + " " + newRating); + res.Call(LocStrings.stub("RatingChanged") + " " + newRating); else - res.Call(LocStrings.Stub("RatingInvalid") + " `" + input.args + "`"); + res.Call(LocStrings.stub("RatingInvalid") + " `" + input.args + "`"); if(newRating.equals("Filtered")) - res.Call(LocStrings.Stub("RatingWarning")); + res.Call(LocStrings.stub("RatingWarning")); } } \ No newline at end of file diff --git a/src/commands/CommandRole.java b/src/commands/CommandRole.java index c4aa7eb..b569247 100644 --- a/src/commands/CommandRole.java +++ b/src/commands/CommandRole.java @@ -9,20 +9,20 @@ public class CommandRole extends Command public CommandRole (KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("RoleInfo"); } + public String getHelpText() { return LocStrings.stub("RoleInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args.isEmpty()) { - res.Call(LocStrings.Stub("RoleStandardResponse") + " " + user.GetRole().name() + "!"); + res.Call(LocStrings.stub("RoleStandardResponse") + " " + user.GetRole().name() + "!"); return; } if(user.GetRole().getValue() < KittyRole.Admin.getValue()) { - res.Call(String.format(LocStrings.Stub("RoleError"), KittyRole.Admin.toString())); + res.Call(String.format(LocStrings.stub("RoleError"), KittyRole.Admin.toString())); return; } @@ -46,7 +46,7 @@ public class CommandRole extends Command break; default: - res.Call(LocStrings.Stub("RoleNeededRole")); + res.Call(LocStrings.stub("RoleNeededRole")); return; } String users = ""; @@ -56,6 +56,6 @@ public class CommandRole extends Command users += input.mentions[i].name + " "; } - res.Call(String.format(LocStrings.Stub("RoleChanged"), users, newRole.name())); + res.Call(String.format(LocStrings.stub("RoleChanged"), users, newRole.name())); } } diff --git a/src/commands/CommandRoll.java b/src/commands/CommandRoll.java index d077104..3525157 100644 --- a/src/commands/CommandRoll.java +++ b/src/commands/CommandRoll.java @@ -16,7 +16,7 @@ public class CommandRoll extends Command public CommandRoll(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("RollInfo"); } + public String getHelpText() { return LocStrings.stub("RollInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -27,7 +27,7 @@ public class CommandRoll extends Command } catch(Exception e) { - res.Call(LocStrings.Stub("RollError")); + res.Call(LocStrings.stub("RollError")); } } diff --git a/src/commands/CommandShutdown.java b/src/commands/CommandShutdown.java index 776f370..45fe80e 100644 --- a/src/commands/CommandShutdown.java +++ b/src/commands/CommandShutdown.java @@ -20,7 +20,7 @@ public class CommandShutdown extends Command public CommandShutdown(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("ShutdownInfo"); } + public String getHelpText() { return LocStrings.stub("ShutdownInfo"); } // Called when the command is run! @Override @@ -46,7 +46,7 @@ public class CommandShutdown extends Command if(isSafe) { // Force upkeep, this works so long as upkeep is on the main thread. - res.CallImmediate(LocStrings.Stub("ShutdownSafe")); + res.CallImmediate(LocStrings.stub("ShutdownSafe")); DatabaseManager.instance.upkeep(); GlobalLog.Warn(LogFilter.Command, LocStrings.Lookup("ShutdownSafe")); @@ -54,7 +54,7 @@ public class CommandShutdown extends Command } else { - res.CallImmediate(LocStrings.Stub("ShutdownUnsafe"));// "``"); + res.CallImmediate(LocStrings.stub("ShutdownUnsafe"));// "``"); GlobalLog.Warn(LogFilter.Command, LocStrings.Lookup("ShutdownSafe")); System.exit(0); } diff --git a/src/commands/CommandStark.java b/src/commands/CommandStark.java index 299794a..3f3a2d5 100644 --- a/src/commands/CommandStark.java +++ b/src/commands/CommandStark.java @@ -17,7 +17,7 @@ public class CommandStark extends Command public CommandStark(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("StarkInfo"); }; + public String getHelpText() { return LocStrings.stub("StarkInfo"); }; private static Long num = 0l; diff --git a/src/commands/CommandStats.java b/src/commands/CommandStats.java index b6f5649..75c7fe2 100644 --- a/src/commands/CommandStats.java +++ b/src/commands/CommandStats.java @@ -17,7 +17,7 @@ public class CommandStats extends Command public CommandStats(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("StatsInfo"); } + public String getHelpText() { return LocStrings.stub("StatsInfo"); } // Called when the command is run! @Override diff --git a/src/commands/CommandTeey.java b/src/commands/CommandTeey.java index 9023064..f11ba14 100644 --- a/src/commands/CommandTeey.java +++ b/src/commands/CommandTeey.java @@ -23,7 +23,7 @@ public class CommandTeey extends Command private static Long num = 0l; @Override - public String getHelpText() { return LocStrings.Stub("TeeyInfo"); } + public String getHelpText() { return LocStrings.stub("TeeyInfo"); } // Called when the command is run! @Override diff --git a/src/commands/CommandTradeBeans.java b/src/commands/CommandTradeBeans.java index 9a7dd90..e713ba9 100644 --- a/src/commands/CommandTradeBeans.java +++ b/src/commands/CommandTradeBeans.java @@ -15,14 +15,14 @@ public class CommandTradeBeans extends Command public CommandTradeBeans(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("TradeBeansInfo"); } + public String getHelpText() { return LocStrings.stub("TradeBeansInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.mentions == null) { - res.Call(LocStrings.Stub("TradeBeansNoTargetError")); + res.Call(LocStrings.stub("TradeBeansNoTargetError")); return; } @@ -32,25 +32,25 @@ public class CommandTradeBeans extends Command } catch (NumberFormatException e) { - res.Call(LocStrings.Stub("TradeBeansIntParseError")); + res.Call(LocStrings.stub("TradeBeansIntParseError")); return; } if(user.GetBeans() < beans) { - res.Call(LocStrings.Stub("TradeBeansNotEnoughError")); + res.Call(LocStrings.stub("TradeBeansNotEnoughError")); return; } if(beans < 0) { - res.Call(String.format(LocStrings.Stub("TradeBeansStealingBeans"), user.name)); + res.Call(String.format(LocStrings.stub("TradeBeansStealingBeans"), user.name)); user.ChangeBeans(-10); return; } input.mentions[0].ChangeBeans(beans); user.ChangeBeans(-beans); - res.Call(String.format(LocStrings.Stub("TradeBeansSuccess"), user.name, input.mentions[0].name, beans)); + res.Call(String.format(LocStrings.stub("TradeBeansSuccess"), user.name, input.mentions[0].name, beans)); } } diff --git a/src/commands/CommandTweet.java b/src/commands/CommandTweet.java index a95e09e..fd1669e 100644 --- a/src/commands/CommandTweet.java +++ b/src/commands/CommandTweet.java @@ -11,7 +11,7 @@ public class CommandTweet extends Command public CommandTweet(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String getHelpText() { return LocStrings.Stub("TweetInfo"); } + public String getHelpText() { return LocStrings.stub("TweetInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -20,7 +20,7 @@ public class CommandTweet extends Command try { res.Call(tweet.tweet(input.args)); } catch (Exception e) { - res.Call(LocStrings.Stub("TweetError")); + res.Call(LocStrings.stub("TweetError")); } } } diff --git a/src/commands/CommandWolfram.java b/src/commands/CommandWolfram.java index 731c58a..a1a0b6e 100644 --- a/src/commands/CommandWolfram.java +++ b/src/commands/CommandWolfram.java @@ -15,13 +15,13 @@ public class CommandWolfram extends Command public CommandWolfram(KittyRole level, KittyRating rating) { super(level, rating);} @Override - public String getHelpText() { return LocStrings.Stub("WolframInfo"); } + public String getHelpText() { return LocStrings.stub("WolframInfo"); } @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args == null || input.args.trim().length() == 0) - res.Call(LocStrings.Stub("WolframNoArgs")); + res.Call(LocStrings.stub("WolframNoArgs")); try { @@ -31,7 +31,7 @@ public class CommandWolfram extends Command } catch (IOException e) { - res.Call(LocStrings.Stub("WolframError")); + res.Call(LocStrings.stub("WolframError")); } } } \ No newline at end of file diff --git a/src/commands/CommandYeet.java b/src/commands/CommandYeet.java index c4b0b53..ac9f947 100644 --- a/src/commands/CommandYeet.java +++ b/src/commands/CommandYeet.java @@ -23,7 +23,7 @@ public class CommandYeet extends Command private static Long num = 0l; @Override - public String getHelpText() { return LocStrings.Stub("YeetInfo"); } + public String getHelpText() { return LocStrings.stub("YeetInfo"); } // Called when the command is run! @Override diff --git a/src/core/LocCommands.java b/src/core/LocCommands.java index 6d5b9bd..59f30a8 100644 --- a/src/core/LocCommands.java +++ b/src/core/LocCommands.java @@ -11,7 +11,7 @@ import dataStructures.Pair; public class LocCommands extends BaseLocFile { public static final String fileName = "locCommands.config"; - public static final String function = "LocCommands.Stub"; + public static final String function = "LocCommands.stub"; private static LocCommands instance; @@ -38,7 +38,7 @@ public class LocCommands extends BaseLocFile } // Returns a pair, the raw key and the stub key - public static Pair Stub(String toStub) + public static Pair stub(String toStub) { return new Pair(toStub, instance.GetKey(toStub)); } diff --git a/src/core/LocStrings.java b/src/core/LocStrings.java index 7b95573..642a75a 100644 --- a/src/core/LocStrings.java +++ b/src/core/LocStrings.java @@ -10,7 +10,7 @@ import utils.io.FileMonitor; public class LocStrings extends BaseLocFile { public static final String fileName = "locStrings.config"; - public static final String function = "LocStrings.Stub"; + public static final String function = "LocStrings.stub"; private static LocStrings instance; @@ -36,7 +36,7 @@ public class LocStrings extends BaseLocFile } } - public static String Stub(String toStub) + public static String stub(String toStub) { return Lookup(toStub); } diff --git a/src/core/ObjectBuilderFactory.java b/src/core/ObjectBuilderFactory.java index 24738b4..692953c 100644 --- a/src/core/ObjectBuilderFactory.java +++ b/src/core/ObjectBuilderFactory.java @@ -337,63 +337,63 @@ public class ObjectBuilderFactory CommandManager manager = new CommandManager(commandEnabler); // Dev - manager.Register(LocCommands.Stub("work"), new CommandDoWork(KittyRole.Dev, KittyRating.Safe)); - manager.Register(LocCommands.Stub("shutdown"), new CommandShutdown(KittyRole.Dev, KittyRating.Safe)); - manager.Register(LocCommands.Stub("stats"), new CommandStats(KittyRole.Dev, KittyRating.Safe)); - manager.Register(LocCommands.Stub("invite"), new CommandInvite(KittyRole.Dev, KittyRating.Safe)); - manager.Register(LocCommands.Stub("buildHelp"), new CommandHelpBuilder(KittyRole.Dev, KittyRating.Safe)); - manager.Register(LocCommands.Stub("tweet"), new CommandTweet(KittyRole.Dev, KittyRating.Safe)); - manager.Register(LocCommands.Stub("dbflush"), new CommandDBFlush(KittyRole.Dev, KittyRating.Safe)); - manager.Register(LocCommands.Stub("dbstats"), new CommandDBStats(KittyRole.Dev, KittyRating.Safe)); + manager.Register(LocCommands.stub("work"), new CommandDoWork(KittyRole.Dev, KittyRating.Safe)); + manager.Register(LocCommands.stub("shutdown"), new CommandShutdown(KittyRole.Dev, KittyRating.Safe)); + manager.Register(LocCommands.stub("stats"), new CommandStats(KittyRole.Dev, KittyRating.Safe)); + manager.Register(LocCommands.stub("invite"), new CommandInvite(KittyRole.Dev, KittyRating.Safe)); + manager.Register(LocCommands.stub("buildHelp"), new CommandHelpBuilder(KittyRole.Dev, KittyRating.Safe)); + manager.Register(LocCommands.stub("tweet"), new CommandTweet(KittyRole.Dev, KittyRating.Safe)); + manager.Register(LocCommands.stub("dbflush"), new CommandDBFlush(KittyRole.Dev, KittyRating.Safe)); + manager.Register(LocCommands.stub("dbstats"), new CommandDBStats(KittyRole.Dev, KittyRating.Safe)); // Admin - manager.Register(LocCommands.Stub("rating"), new CommandRating(KittyRole.Admin, KittyRating.Safe)); - manager.Register(LocCommands.Stub("indicator"), new CommandChangeIndicator(KittyRole.Admin, KittyRating.Safe)); - manager.Register(LocCommands.Stub("guildroleallowed"), new CommandGuildRoleAllowed(KittyRole.Admin, KittyRating.Safe)); - manager.Register(LocCommands.Stub("guildrolenotallowed"), new CommandGuildRoleNotAllowed(KittyRole.Admin, KittyRating.Safe)); + manager.Register(LocCommands.stub("rating"), new CommandRating(KittyRole.Admin, KittyRating.Safe)); + manager.Register(LocCommands.stub("indicator"), new CommandChangeIndicator(KittyRole.Admin, KittyRating.Safe)); + manager.Register(LocCommands.stub("guildroleallowed"), new CommandGuildRoleAllowed(KittyRole.Admin, KittyRating.Safe)); + manager.Register(LocCommands.stub("guildrolenotallowed"), new CommandGuildRoleNotAllowed(KittyRole.Admin, KittyRating.Safe)); // Mod - manager.Register(LocCommands.Stub("poll"), new CommandPollManage(KittyRole.Mod, KittyRating.Safe)); - manager.Register(LocCommands.Stub("givebeans"), new CommandGiveBeans(KittyRole.Mod, KittyRating.Safe)); - manager.Register(LocCommands.Stub("rpg"), new CommandRPG(KittyRole.Mod, KittyRating.Safe)); - manager.Register(LocCommands.Stub("rafflestart"), new CommandRaffleStart(KittyRole.Mod, KittyRating.Safe)); - manager.Register(LocCommands.Stub("rafflespin"), new CommandRaffleSpin(KittyRole.Mod, KittyRating.Safe)); - manager.Register(LocCommands.Stub("raffleend"), new CommandRaffleEnd(KittyRole.Mod, KittyRating.Safe)); + manager.Register(LocCommands.stub("poll"), new CommandPollManage(KittyRole.Mod, KittyRating.Safe)); + manager.Register(LocCommands.stub("givebeans"), new CommandGiveBeans(KittyRole.Mod, KittyRating.Safe)); + manager.Register(LocCommands.stub("rpg"), new CommandRPG(KittyRole.Mod, KittyRating.Safe)); + manager.Register(LocCommands.stub("rafflestart"), new CommandRaffleStart(KittyRole.Mod, KittyRating.Safe)); + manager.Register(LocCommands.stub("rafflespin"), new CommandRaffleSpin(KittyRole.Mod, KittyRating.Safe)); + manager.Register(LocCommands.stub("raffleend"), new CommandRaffleEnd(KittyRole.Mod, KittyRating.Safe)); // General - manager.Register(LocCommands.Stub("fetch"), new CommandFetch(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("guildroleadd"), new CommandGuildRoleAdd(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("guildroleremove"), new CommandGuildRoleRemove(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("teey"), new CommandTeey(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("perish, thenperish"), new CommandPerish(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("yeet"), new CommandYeet(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("ping"), new CommandPing(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("boop"), new CommandBoop(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("roll"), new CommandRoll(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("choose"), new CommandChoose(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("help"), new CommandHelp(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("info, about"), new CommandInfo(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("vote"), new CommandPollVote(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("results"), new CommandPollResults(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("showpoll"), new CommandPollShow(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("wolfram"), new CommandWolfram(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("c++, g++, cplus, cpp"), new CommandColiru(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("java, jdoodle"), new CommandJDoodle(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("beans"), new CommandBeansShow(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("role"), new CommandRole(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("bet"), new CommandBetBeans(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("map"), new CommandMap(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("rpstart"), new CommandRPStart(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("rpend"), new CommandRPEnd(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("tony, stark, dontfeelgood, dontfeelsogood"), new CommandStark(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("blur"), new CommandBlurry(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("eightball, 8ball"), new CommandEightBall(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("catch"), new CommandCatch(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("guildrolelist"), new CommandGuildRoleList(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("bethistory"), new CommandBetHistory(KittyRole.General, KittyRating.Safe)); - 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("fetch"), new CommandFetch(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("guildroleadd"), new CommandGuildRoleAdd(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("guildroleremove"), new CommandGuildRoleRemove(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("teey"), new CommandTeey(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("perish, thenperish"), new CommandPerish(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("yeet"), new CommandYeet(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("ping"), new CommandPing(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("boop"), new CommandBoop(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("roll"), new CommandRoll(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("choose"), new CommandChoose(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("help"), new CommandHelp(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("info, about"), new CommandInfo(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("vote"), new CommandPollVote(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("results"), new CommandPollResults(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("showpoll"), new CommandPollShow(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("wolfram"), new CommandWolfram(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("c++, g++, cplus, cpp"), new CommandColiru(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("java, jdoodle"), new CommandJDoodle(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("beans"), new CommandBeansShow(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("role"), new CommandRole(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("bet"), new CommandBetBeans(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("map"), new CommandMap(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("rpstart"), new CommandRPStart(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("rpend"), new CommandRPEnd(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("tony, stark, dontfeelgood, dontfeelsogood"), new CommandStark(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("blur"), new CommandBlurry(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("eightball, 8ball"), new CommandEightBall(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("catch"), new CommandCatch(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("guildrolelist"), new CommandGuildRoleList(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("bethistory"), new CommandBetHistory(KittyRole.General, KittyRating.Safe)); + 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)); return manager; } From ede40ef9e3e1de16e82745d74decc33aa3abfd1d Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Mon, 17 Jun 2019 22:01:47 -0700 Subject: [PATCH 04/24] = Fixed choose to display help when there are no arguments provided --- src/commands/CommandChoose.java | 7 +++++++ src/core/CommandManager.java | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/commands/CommandChoose.java b/src/commands/CommandChoose.java index e68f783..e4ed478 100644 --- a/src/commands/CommandChoose.java +++ b/src/commands/CommandChoose.java @@ -19,7 +19,14 @@ public class CommandChoose extends Command @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { + if(input.args.trim().length() == 0) + { + res.Call(Stats.instance.GetHelpText(input.key)); + return; + } + String [] choices = input.args.split(","); + if(choices.length == 1) { res.Call(LocStrings.Stub("ChooseOne")); diff --git a/src/core/CommandManager.java b/src/core/CommandManager.java index 5e79a7c..9fcddb7 100644 --- a/src/core/CommandManager.java +++ b/src/core/CommandManager.java @@ -111,12 +111,12 @@ public class CommandManager } // Looks up command by name. If it exists, dumps help text, otherwise returns null. - public String GetCommandHelpText(String lookup) + public String GetCommandHelpText(String key) { - Command command = commands.get(lookup); + Command command = commands.get(key); if(command != null) - return command.HelpText(); + return "`" + key + "`: " + command.HelpText(); return null; } From 4eee13a359eb746063bed7b05acb5038f1dc3910 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Mon, 17 Jun 2019 22:02:04 -0700 Subject: [PATCH 05/24] = color skeleton --- commands.config | 1 + locCommands.config | 1 + locStrings.config | 5 ++- src/commands/CommandColor.java | 52 +++++++++++++++++++++++++++++ src/commands/CommandHelp.java | 4 --- src/core/ObjectBuilderFactory.java | 1 + src/dataStructures/KittyEmbed.java | 8 ++--- src/dataStructures/Response.java | 9 +++-- test.png | Bin 0 -> 283347 bytes 9 files changed, 68 insertions(+), 13 deletions(-) create mode 100644 src/commands/CommandColor.java create mode 100644 test.png diff --git a/commands.config b/commands.config index 14ef218..ff56f10 100644 --- a/commands.config +++ b/commands.config @@ -10,6 +10,7 @@ c++, g++, cplus, cpp=1 catch=1 charactercreate=1 choose=1 +color, colour=1 crouton=1 dbflush=1 dbstats=1 diff --git a/locCommands.config b/locCommands.config index bbad5ef..26a3701 100644 --- a/locCommands.config +++ b/locCommands.config @@ -11,6 +11,7 @@ bet= guildrolelist= stats= catch= +color, colour= guildroleadd= results= wolfram= diff --git a/locStrings.config b/locStrings.config index e171a11..cfe7b88 100644 --- a/locStrings.config +++ b/locStrings.config @@ -89,6 +89,9 @@ RaffleEndSuccess= RaffleEndInfo= RaffleEndFailure=I don't think there's one going! +[CommandColor] +ColorInfo= + [CommandDoWork] DoWorkFinished=I finished with my work! :D DoWorkInfo=Occupies a core for a few seconds @@ -153,7 +156,7 @@ WolframInfo=Will query wolframalpha with your question and give a full image out WolframNoArgs=You need to provide some arguments! [CommandMap] -MapInfo=Generates a map! You can pass additional information if you want with the flags `-s-w-h`. 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\nDefault seed: Random,\nDefault Width: 35(max %s),\nDefault Height: 25(max %s) +MapInfo=Generates a map! You can pass additional information if you want with the flags `-s -w -h`. 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 diff --git a/src/commands/CommandColor.java b/src/commands/CommandColor.java new file mode 100644 index 0000000..aac5c04 --- /dev/null +++ b/src/commands/CommandColor.java @@ -0,0 +1,52 @@ +package commands; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; + +import javax.imageio.ImageIO; + +import core.Command; +import core.LocStrings; +import dataStructures.KittyChannel; +import dataStructures.KittyEmbed; +import dataStructures.KittyGuild; +import dataStructures.KittyRating; +import dataStructures.KittyRole; +import dataStructures.KittyUser; +import dataStructures.Response; +import dataStructures.UserInput; + +public class CommandColor extends Command +{ + public CommandColor(KittyRole level, KittyRating rating) { super(level, rating); } + + @Override + public String HelpText() { return LocStrings.Stub("ColorInfo"); } + + @Override + public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + { + int sideLength = 50; + + float r = 0; + float g = 0; + float b = 0; + float a = 1; + Color parsed = new Color(r, g, b, a); + + BufferedImage img = new BufferedImage(sideLength, sideLength, BufferedImage.TYPE_4BYTE_ABGR); + Graphics2D graphics = img.createGraphics(); + graphics.setColor(parsed); + graphics.fillRect(0, 0, sideLength, sideLength); + graphics.dispose(); + + KittyEmbed response = new KittyEmbed(); + response.color = parsed; + response.thumbnailURL = "attachment://test.png"; + + res.CallEmbed(response); + //ImageIO.write(bufferedImage, "png", file); + }; + +} diff --git a/src/commands/CommandHelp.java b/src/commands/CommandHelp.java index fd5bd0f..b507f6d 100644 --- a/src/commands/CommandHelp.java +++ b/src/commands/CommandHelp.java @@ -26,10 +26,6 @@ public class CommandHelp extends Command { help = LocStrings.Stub("HelpDisplay"); } - else - { - help = "`" + input.args + "`: " + help; - } res.Call(help); } diff --git a/src/core/ObjectBuilderFactory.java b/src/core/ObjectBuilderFactory.java index 66c8ad0..5fee819 100644 --- a/src/core/ObjectBuilderFactory.java +++ b/src/core/ObjectBuilderFactory.java @@ -425,6 +425,7 @@ public class ObjectBuilderFactory 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)); + manager.Register(LocCommands.Stub("color, colour"), new CommandColor(KittyRole.General, KittyRating.Safe)); return manager; } diff --git a/src/dataStructures/KittyEmbed.java b/src/dataStructures/KittyEmbed.java index 3bc8382..c871bbe 100644 --- a/src/dataStructures/KittyEmbed.java +++ b/src/dataStructures/KittyEmbed.java @@ -4,7 +4,7 @@ import java.awt.Color; public class KittyEmbed { - public String title = null; + public String title = null; // Required, but if this remails null or is empty, it's made a blank space in Response.java. public Color color = null; public String footerText = null; public String authorText = null; @@ -13,9 +13,5 @@ public class KittyEmbed public String descriptionText = null; public String bodyImageURL = null; public String imageURL = null; - - - public KittyEmbed() - { - } + public String thumbnailURL = null; // Did you know? This is the only field that can actually be a local image file. Use attachment://file.png as the string for it. } diff --git a/src/dataStructures/Response.java b/src/dataStructures/Response.java index 012130b..afbc8a4 100644 --- a/src/dataStructures/Response.java +++ b/src/dataStructures/Response.java @@ -33,8 +33,10 @@ public class Response { EmbedBuilder embed = new EmbedBuilder(); - if(embedInfo.title != null) + if(embedInfo.title != null && !embedInfo.title.isEmpty()) embed.setTitle(embedInfo.title); + else + embed.setTitle(" "); if(embedInfo.color != null) embed.setColor(embedInfo.color); @@ -49,7 +51,10 @@ public class Response embed.setAuthor(embedInfo.authorText, embedInfo.authorLink, embedInfo.authorImage); if(embedInfo.imageURL != null) - embed.setImage(embedInfo.imageURL); + embed.setImage(embedInfo.imageURL); + + if(embedInfo.thumbnailURL != null) + embed.setThumbnail(embedInfo.thumbnailURL); event.getChannel().sendMessage(embed.build()).queue(); } diff --git a/test.png b/test.png new file mode 100644 index 0000000000000000000000000000000000000000..0c987f98df88543e5816e6edce5c6f9c86389060 GIT binary patch literal 283347 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Π-2UrRem6nRxwkh zi*J`^t8ISOB56Wie9fQP@0;P_+n`V~YafH#N+w<{20dyW{2sK}sD~qMip_1fmrAkT zyutu6s-w7IW~I-~qB_n|p6cE8vK^e4RIjdH9XnT4NI5=kW?NXi7D$J}NK7GiQ2nW|_pE<$%oyx?Yh~K% zT3}5u^3^sHx~j|EkL&Zr@nR0RC=B(|g0X)>!zfI($4^FD!mXPby0kqeGsK2_1Lypk z_xns$ywuL6a|oHNPL(ySXJ7jM&{IFnqUevuttH*@2b~afF`;EOnviG`Cgc-+;6!Hf zEMfUB{#fRr9q*%i=Nku#gRJhX7pJUIdXJ#pcBL9C=T%IJ{;)%#jX~`vA#te0!pD#| z(hlsaTXtOn^r{XL+)JT@*GlUoc&Z&fnc;ivxtGd>0@G|pnwo)>H|r)jfy$Vd-)9uI zh3O*)#)KSFMtA~GhGOrN406g&DOQ5_L3dX%nMug-2)SwvT?90F~W8Rr5HqMYto*`j>M zwaI-&`<$SnRxLVJ@U5m-I~vy8PGmh*fyqXGmkPVsd`0ltxs?V@SB+jN0fXk$1xOOs zmr@6Yddss^RkdR}Y8%5`*m15 ziR1X5y1F@rXX}sK-a1WZv~|G9Cn!9)I25y<7-%Fkw9?3qXmo z&GLI`kgba7aELM>l3D8_Y*lmQPE44Gg^Q8097hQo2)b+%c($(NbY&*uv`Jfg1qO)aB-M#<`$~$CCj+@x8u270el3;D7u65lxV0++vR^xk#hu`X}WOqIJ0p~^G+P({I1!oH4);2*lA-1xc zoG}`Fc%c{B`?-r*+%rD$>Km<(oAzE?EB`h3W_?6{>smu3QN8mTe0LvyD#f~)iT&qd z@~8Hx?wW<+pyjiMR^@u969v*f07W^0Ryti2XBVD=&nu8)3HiwWIC;j`T8xiUX3{7y z9wsx~5BM1#C+Ao%Q-5J7s`_#e4j>TmgW{b;*Hok6DY;PBHtdx z)O3%u>#J%da6|m}(fq_`A;`$h;+*zYF|%;(iE)1eC;iHL9@qNtatvM#5})O*tvWw|v`-cIAoj?~z?n z+ElG8y#ZJE2JSSK;DX=?sbukwCgU|h78KephPH4s<5}!)^&z7aURAM-(I#06Y;mTi z{A+(Z@?DSBn64wmR+bG5k8W-IVYe}8yhn$*v~BJB6T#68O^KW#4R za({6w@kCt~qMcIuf>cg8RRxog(_>SOyB8S%MVNpvl{6nGA<(*-$sbCy1=dmo_vIUe zpb*t>*btFJr_D-b=q`${@k+2fb6$=kCsxX>-dz>TI*ieD)`=a z=ZC?Cg|9c`8C`idcUVewt0+j)Fo>O))HaC7cE8^k``^cEx7o3ceIF}E{Ss&S;ker4 zeT(X#!jE2&A-{1&8Dmt6KWJgLDHD5W7@1mYltOhOf)KSGa7VG1FVmE{kk7573eL8A z?$nS7KRgb93D$&vSK^q7vzemsNkJ(mFUk4VNW@quaVT_cZz)TL1*={V=H z6u=&Klx%w4cf%hkClM=aIdiY!JikBO%(%|&aPgtS99F$lN2d(B_&LcBt#K?AXRzQEncm|Q|p*a`zGs#@7oZlAi9|AWBUqbYPoKFT0 zT)W$fN1e^qazFm1@6PX@sPQ|u;^&Kc4`#(HkSHRYW2b6P(W8-lMO1CHXu1@6aOPZl zA;=vvDC+5Rjp2GdO%1=le~xHeU^OUbH%Y8V&JGwapI6t8Oh%$iH(&OB8=S`8j?%Zs zqE648wQCZk?>~O}KCN4ccRJ%=8G$q$(kZC3<^&n0nHFv$*qR<|N(4%r+x8%Og(FUo zg$32E&KKmIw}al+Y|C6AY)WHOyLu(sGbp`33xLy<$t%?Gv$7?&Jit4XMp7tkrA)`3 zJ6%0U{uyrXp9H#rz*qEr2IYpqAG^htP2LSy_svKe)IWuEvxb2o#$X~?ZnLtN8j3}p z?IDyGqdh3UWT`qOQw-I&cYcd-wo`nz6e~hhRn?8jlW(io!Hyb+F~1^4tDh2!uE@W_KDMh79{l=<~mgYb+n}7*W-n zozH7JyR4Bl;^X){h3kWY7zm6-Ic|>v7*Y`vMi^sc*3HV2sWZNjh~NBeO?zX%O?OQX zv?`ouu1&(2@;hQQH3}CINBsaXTavfzD})h{uk3l&E*^qy;6fRIfKin+Wv{s#6Dn-| zH-`+X8+}8MpZ!(;NCrIh2Yo{2*iJz5^P~NtC4Zl#mo1f|qR_VmWT~ze7)i26u9rl-eQRg-92c}E+~2_m_G{UE|@rzjzu?5D~$v%m;H zOaMIzzP($BU=$XmODC+M%k>Es28$&NE^%^=*ug||CSAHSJ5^-}048*QCm+YZ+~Ol!L$!q-$N;MmUp{?GDP{O8OHF@)Vl-Q)vZUbJ+3pVh-4 z=mr@}(Jdbo*NfK2gRH(7icRgU`4sF*$uQTZA2jSHeJa#9kItmux9MXH9{bdgz)fBA z?f>xjyKz7BeQ4s^6)g9&VTA46V~DVh-(?qnqNw*rZ_38Ih-(WyX{|vDkakpgM^`3w zTWM!#h94v}FrNG5mjGhxSt7(#q!69$5xyB*WF6^TmB zrd3x?U^2w16Cjikj$01~nY|%D7n7S7<9|LIMu6rFhBv|9&8#$_b)c7W(ALd*A2TzbS5X)H-SZuOBXTPFlbo&c1B}8HqsK9(}ua~-A+wW z{$HIJ40jnzV$38y?ICcjj-B#J4a;5{|rzCtanCCEguPG(>Y>2{;2j`IVz6f~W zvss{#D_d!&tva8X{Iq>?N;C=jor4a+!e8D%qlBfY3PB_^l13W&yee0nL_g?)>VpeU zX5tBFuywsqg&Agb=>Zm{42a?fpdU)G9iyRp#RP@?o=JY`+bMU*ETh)U{WSLE<#g5v zqZW-fT_jcb| zKedjZbXNJP)!5bKymupDX5pxBrtM>7*39_G^d!1F*mq6ZG?UhS5!r!6Rl241Y^7)Z zSU>yfOu_n;`TO11=E`ffU2XC|eL-by_cxPW)&Czl({rQP6t@)<^0YvB;*|_bYIhZO zD-&GI6%Z11O0?@bm_0MvK*v$^&9V0naW-gY=&;n2`LGQG*Cc>&I?;72Xr~fRVlZ33~Mel+c_WW9hv7GT`U8%R6K8j*4=}40pg512nXcOq@^Mf>Nvm1$w%c zP-#1gE5!%kHiVD_T#AaG@zNmj0@0Rcj*rz1h-QyA%^^*fEH$H9;_UR`r2qT0B(eK? zmOYS^*gE>MO5Y?53B+m0YuoM!GWcU>E4>5%rUg&xa8Gz+d$ps2gUP&xz{My1^)`K# zWntiH7f;WM`St!YqCz2aov4vo^2zFEu>Hoz(_Qj=l#gCkbcpL1t~hhmEoO|99cbux zk_cBKh{IpTkWph96gwJaD@H9{oTEB?_|K9+?pf`RaP(e`rTnKJNE!U2ft%HSMTT?OPXV$kR?~ns?)eDWrA~B$)LHO~T8QRokYuS~^ z>CZD`0SoU!PFK!9k%cHhS)VeuN*Q_0+qx@h1mD5NR|9yquIhTeUR@B+c5sf zq(q0DXouh?NfJ2J8j^r-(sKTscWozPaztKL7rO)3ekn`@jC?_tc~ahknXN6oSergy zLNG1H&egW3^!YXqZd7L^+~|08##9A_Np!nH`a=H&ahA!~-W|xp4A_Q*ov8F?c_{Ve zfb+<1LE&DDvxCcaXP~JU#oG>3gB^Qfo2)ChgGB+Dn$mB&Y?B}|Mk;pI#SZ^Z3D#qN zKYqArdHt7L=A+umyQwe67(1@VpNo*LEIS})<>1k69-nnBK6Nzoz7Cq>0KJ45zqzC% zw*b)Hgr)od=L6Lx732Q0IFd(r+(Pt3CVal4fDB>u-7!$*J>8f_55Dapmil4YG{y}f=c%!2_3C!V5=PtroSCp3}K2G zVK1Za|1!^^W{rk^7xj^#WW1J1bGD#pM0OgFy?~{jBa;QYD3?{zqhWn6JcC-cZWCcuLKa*M1R!-BI;;1h0L9<%Rbo{}8 z+-(W~JmZl2zWM1boP<#w!m*8;zWu$&=Wc&q3n&WM(C@b1{bXuJvCnMz@mV9_t*>o> z&S&EbN8__;Md-drEzBH|w2QL24hrZgqkLn9hvFPvbb%&@7yweHcpBlMlGsknHx&r@ z$l%EURG@D@BS!Vp!g&6Yr)ETu@tOrzx8l}|^5nAkDw=SUpTk*pN&R1Jx1NxPo>dhe z8=GXPn}Oujb6I9>n#;MS@5MP8YImW>Hr%4b&wbJrd5;?y`;m6_=(JkTRU6!?0<%Sc zZQz;8YOjZX%((3^FN4o1Tfd+s3u?naS)fOls1b-)BNBA6qN(q8E{kxI&yhdfRH6`^ zHc`8T5({RX9Q!e>dQrRooYBHXp}H331u}4_o<=HhZeI$V30K$5f$e^;_KIBBH!(+t6qspNic7%|riNz3 zCnzjZVtR_HpVE|ut6Rm8o=ujw@=HMp$yzCh!XQhhAZ!!!+WtRZ#!`krik%5GoFx)- z)>1S_8n*1T|CM0chF?|}_4UpwYm4FBe;(VR;f&oE_Mdt&LtCJ3^Yf%Ih5RBLkOLGG zKm1q8U;?Yr{&gFIs&?~U09u?sCCf^qHeUoN<6hLDctSaCetUp0U_3sZ9G~wy#Z%O< z(l(D&m}Z%6*TT)J^l33^DmaEp!hv4x-2L>gT4}J*;yQRKw#s56FVv`&z^f8^z~LML z=}Y3pqB6j9`{*K#0ttgpXrUHRQPz8T?HU(g)i#!{7gxpOY8x(|#H{=F^q#E`otOV{9Iy9t<#@Tr ztCg!2R%6fmD;mJ?#b`VaM*nFoB>%t28$PHxREGIx-o7PZP%hN!{dmt!>j%iGG$EW{ zFLG6<+cWckeA8sn=UeaN=H@5dO{L~4Q$i$bvo00C+q*at#*BAInlD@JZThA^z>j1r zGwBo$jH*iVs8G5ROotiQX)3U(BHufZ)a_dWF()aME-6-q7SVRrhY6fdD{PZ!)#U!w zs|3=WT` z|B;6poS1vGcfgtkPxXuW&q}jdweT~bVhfeyfLb-p1*4DI>L6ONelg3M|omc1y*Q0T6+oW2AD1XB~qV)^}8H4U^yz2DF~*J%CZE7 z9D3ZpX!6ewqlO7m^RVnZjW-5i#2lElGeN#Lv3Pt=9gcLKys?e}Y!BqQUv0*;_%wJFU(K3|D8M_}KO0eG5BNr_{o~IGqwDH2`HuoLV zJ|HYCu9ro-=-*v@i>`K67=F^2RZyB=B|%O2u`<%9r?&@N|MmBZFkj=^DC9BL*r3)D z=wiOs#FonF+AzR1EmSzl-BoMvmI_^!6RntB2!+sZhdcZVD_Rlr^<~wy;?6k8pXMwf z9gA$^Bq#KyVR1kLHhC67CHE(p9UAUTiX$@=N`8QHf!|Dk2^|oOA_P^0cq!JG(N|Hv`%PO_JW&NsO{IY#+AL$64{-geJU*JBql6fTlq0}csm0H zFVD%Gqlx(4)qC}EZ!Z}i%LwV&R7Ll#6gpn!N7fn(a2T9i&hewc5C;^o$M}N;+HD=i0{r`+Q7diz<03q}9;cxvOU;cCP-H{CHfke!osi+p^@^4Hnh)ZjZ&cNBtX7 zU0X!JoLQNuK>G?2Tp0=6OVm)E6#C1u-m_qV7 z(!+;KOVOB&ocOqJTWVhy;yXAo+zZ9>1IteeF&nOdtWB&ek8h3~?P|*eu{X>+Z7v^2vLMrSxefY7l+578PFJ6AY_>2B>c60vmzPvG9 z#swvYv-7lfT}H?;pQh#q^537*rjPMiPGEQoQf8@;K6dYf zh{CZ28bj4?BTSCHF>&NXRXi^ua$DCiWRz16Vb^xOp98%cnY*9-to}UHv~tiMZ+KGp zI~wVF06vQauS9(D91N;HoN`towK|FG?Xg(}|K$LXPdbOW->%CEJK6X1yKn!-g>kk1 z1Gj43ZH>I*J}hkf?~`b~{6n8p|AW-#gbFb}3o!Z6vT!Yo{?^(-6bZsM7ek&7g|d2Y zJcCsQJZ~v7nwiNHN9HgUfkJ9LpVi9Df?~~5}hNIn38f)sIh6Ryr`jJXq~N|HfY zr}!R8I{-(oS`Xf!ij1QTj9GqVzONL!%L_eX5(?6!3@&$ zQ2U37{eTtZ(Fd%t@t<+9zlzT1%agj6-uIg5QdBw^H|A-gTKQ!eCbrCu^@ry_nF4k{yL z`yQhmXVzH0?JKMOC!m8R+n&_=TDIl+aa_e`rT|@GB#W~OpYPi z;O+>R9{XJBgs=Jioh>#;yev?xf(2@|icbNgn-fZhc7cydlH_?V`?2u?0&coU zZcBex(rZ5Ftg+OmKU`c31i(}SqN07+R!NcuD%=DMUUjjN^V%1@B~dwBF-_MyBn{rA z<>1&XZ{WY=w0iBC3C$aYb;NDUtm60D$zbE50vok)pRwvrC@WFvoR$qEjXH0}G+}gN zcon(U@r@tw{?EVKeVWoPdb~XSaC*N#W^LEpU6uJ;I^nXk_atj$kVp*ady zuSlb^Zy;>$!PuD#LLv>-L_53Q5{?;|K?@;~HZaHM%&B6PG2z;cBZX5-$ChUS)gQR~ z+WEI%&h*QknO2F-ZCX`)QSNmvcZAuqbsV@ndUgCJ!0(=-kyr)Z#rG=I6mn8p(SWme zgLk6ulx4tn$i(Emdvw`(l5BPI&q!&`_CK0*(8CjynFtHm0_jwy&2xf}`55=PZayST z;)tcJ-&yfo@M5`OWSK#(qG(C(DQ1CW3_9)TR`gilgE_}hlD)TBPvO>};-{Uah&PRn zOCD{{#V7k#8f01`hxn64U&+cUZ3)5zkB#vH7P(m*asT59;1lHupTKP2(B6ml%rJ}7 zvy~LrBUnasAUE1*YvJ6_1N6DI2Cmzl57nGZ+9~noHfM@G9Oq#fwvqJJW4|lc!OV~6 zfJh{nB?D&XfiTMCCiX+okmsUxn!U_&6-Cw64vU#@&ndV|m707GPv6@V7aVuHBJUAD z*saorpOamDYNdhR;X`$%&`0^7kvy~d?Fq%+g*pn7yu5qf2T0)k?Di~zHI5&C8`0*K zb#5L3I}UFOa!ERM)c3shwRc}iUd(Kn?zQcX=9bt56vcl3vSmCuWjO`{icTNq^y8n| z#SE2j%?nRVp&E20P915^=}&XXwGaf#D5M zjV-RHgI0bWTgsXGSzTT;yd^FE;h=eApef2H5@qm7C3Yxi{=CuJ&MY}-g;YLOUzh6u z{_FoX@+I^|v@3GD0lp3=S0cq3+kC?k=-2L0_HDqrGP8>N7Q!0SAlfeBBhqKDtcaB1 zH3fXVRBS0Bz3so6TnK}rR* zAp^ln_d3GNH%^6@u>^7S6ycS86<6g{_{HbV>#@>=XDG~|$Lyd>SsNWovA}mDRw)Dw z)rG>A!l=KWu7DvZ*mDrsofOQ$ZP*Dh?>~c_J`{woxC*0j{9+!2x(J{1>0Kd-!V^kN zuUI2z;~`1xueBrb{Xa)OhI`(K&s)0OY6Xwx&C06tYuDn3|FMw9=*p(T&9uu|rYIUs z{YoBB^94c1r|=is-+eJ(d%&u1+~;>G?zp=3q59zopN)Lp`$!85oB|LYWf}Onm6VO( zgMdOOn9{;roN@M*Nny%ZW#o~;RbLY8-P$IS8%kS@XFsZkRpf>XOX@@5MtA8%z?|%8 zo_ZL(+gh!@_oy%bs1AF(ns;b;F4%Bld3{y={J|a5Mf>TvwBcWuv;*0vlvAM!14-TW z(>N!omY~P#^CiS>q`DG9*_<>l6GSX`lhm5ewd#zk-+>Qq?lpL`3;J8)()GaDc3J|~ zE<+x6HLBje`osw8zNv)Csf4^S>W~yemi36qgp~}wcTffYrYbyE)tOAH`w6TbG?zDm z@*v7>!q(o0ZAVev6CF<=%y&G56*(3xxP@;@pPvGN=2N^X2$$&_p7{V zUin3KUv1w6Ip%Ml&nt{|Yv1^VCBH+<>T%!40v;Obp!-?VP8t2-+`HG;>bLVdRpmj` zP0J<|qf8VYgrF6yD@8b_)oUMeR$f?ObF4fk-4Ebqa;3ki^I}wck+1!?EctZxHwsWt zq}`eZ3?qbtDEDga?t)i@$jJOyd}y~AH<9MGSuWP9DAz**3vjh`sBZS_IE#1Ih`OW@ z>Rp>S@8<3#lq|M^92;PuU7O8gG$aE+~V9J-;l#=i*bX`)=~<+ zeWNmErb}X#euDJ0)?d{Uz?2rns&FljWKo7Xs}y1Sq8Y*l7LPE>`GG@AF`+CuE(u@ zzIPxb)^#mfG_iZ-e96!C4<6SFx_8etjtu|h{4dP3Rz4!R5Hc>x3Vcif|I(9_Om|dt30600;JofSQ)0&LzwAztniI@md25 zN7z1YgH_0wRbTt(`T53@l$G6Vri*bVZ}d}DxU}$(?9OGllgJ87c)NCxX}uC^vs-w< zWv*Cp%W}dSlj>D{W~m3b2H=OV!(f`O2`FN)$B?LOd-tyd@y!6&lclP$`1?adJGc^t zrd{dUH}6(s2AwH+o3X#F7qocd?MSv|{bqPNavCz|n=q zP^T2I6DXdTTcXg=63$J4Azv3QnBc_DeS=E7US;II?Q^#nXT;7uP5qALpi<2OC#{ zq0IYsFxU&0Z4lys^*sY#`2voW4`pWFLzZzVRBmUTMR`p_M7?=(X-%wh;|@bcBkY|9@4dx>zNf zP-cnI1+<(D% zkq~bLnb)=0AR4dxDCJJpV8v zM>%5<`Qdfqgl*h+z{J5(t+FRv7C?MTO1z-G=62bnp^a+~q?sNj5LQcovk~NL*IQ_J zmgMjYB`7{I0U<2d^9DOWj!=$sV#D?D^7;A6&j?1+rSP~AnofCN<+h+o$So_a# zAVa)O;Pg=7ZcI?;CA>c`PoG<&imY<4U=Db&)rGso=F z{XFl&r_U^rU<&Uk12B6h5pbTmZq6cWdjg;@WN1V8Cr`@pG|zTTaInqx;SctA zW5GEH5U77lO=7HD91mYT{GxnlwHDZL;=YjYYmsS9qj?=dq~-MuaP*l4i5&8gBPS0q zKm1n(ZuujsMY?j9{+mb`=xya4LZoK4i(@}O102?nBPz3Ek}@OUppw)%HcOL=VgPdF z2R8idUr;Km4`1!f-`qZY`1FO|#JBfxop;?A-Y)!GeT!ZGFd%B-D6%c3Wl~eY(gA~s ztdH33eXY3`$<5mf^&!74dqTV|M*sk+&b#4afK1FIsHqaGpu%A;;kDZQMv>PE`K}y# zTNuS%C2^-uZx-h)W#1m-pz`T?Id(|%((7>LL%VPwd0!CQC}fJa?s_NHc6$EzrxpV; zFZ)9}PpMEd!Y@2q(9OOokSr+!3 z=sN@nUt}Bnpvcy;IW#=Kc0t&D7xL~_sk@ipFd{4U<|h2zg~&9-EMP1y3p}#aUNIy` zCCBtwVwE$Ys;CvWD;YFb^n(!i3PF`UX4}T1Q56(nkR3|{Eqwu!I~lzgiX4}xNrFAm z7hbqzYH@(FB2PUX@+gCLVJKJ!zJDG;F-5i_;j&R4|EX+B*jM{W;g`UAM)K~8^^b=D zfirB4uTk3FW1+gZ+LC@ee0(8&ZtdHGRF;~GC`r`7qby0LCa`wXHNp3=6)w`yY4Y0h z64&yOPck5+i7puR`b<(v%cnM}y>`LrCHcs(*!EJfcSsnvCVyEi!HGEjBWLgFqO!PW zhrh2qtI+7)8n}L47eDP#0^jYTdG`f0FBaPDUUs7X(RBrp4i-APX_MzkrM^U1z)S-4 zDY*-k5e>XYL5FuS@c(WwHQiSg4eIOA+(IOGxxl)J6PF~^OAlHM0^)b_DL8YfZ%ivz zpjHLM>|(g7AMx0e5oQlfAWDMIphzO5^cU-C?gzR?qOssPK%>X~ z@MSva$dfRu$bi{vLg&xFimYv7zqdp@GS@fx!TvkP)-HWg-6ycT_x#8Bii7?}50_aq ziTK%YF2gXOFdR_HMfX3>r_o)N^&wza+lbTjkVsVvNoA!Q8g6NeJsNs(9{ibArtM&& zct!8p4xfP=#g{4egyFG96|M@;LV~4A-Osc#$<*WO8Wh$;F2goh+IC(Mm$_!UkCIpo?lYueHFC3C^%&oib@u?|FDqYk`DFfwnc2 zGk084cD)gjk>ZHR2J(P z(;oVS$HIrLov8+&Z!*<62l8Zr?t)IfZ3{o#TMK%R+J zzlyXhPyPx#b9*N(U1@cCi_0-hLEsLw)xpLy1(Aso*;?UR^uJpj|0BBRGVY@sg+mf z-BW$dC+0mz4xqfRme4uMri27-r052le;Lve=B@v8p`LfIy8IsHE?8(Qk=#m7_O>1xv414RN_6p>;SVIeV zzR&Cd#8u$euX@-c2uMuT+;^SlAyl{V+J_%1{JZQ>qDvDq4+`fzGxrwNuDo=Ct70V9a2S& zZr_JA!V6zRX20OTdWM}6`A_~#`S~T|pRu2>#`*uM9<$lo>SuKWP`^qGRIg@XqOndd zGthBN>{Mmzz?!CjGc5st>zz#r1bt4>U_Z-AG$Gak$>YOrN(1miiaQ5?h!cZ?iM=!B zC1osB60=guYHYRSb4sbsyRQ$z&aDRleJOjP1hx*40;cK!>_c|I2UtTvkt^4c;0>=V z;KM@`sw<{Gf{L!FuEwZm99lg|D2v`&X?=-fc`DKD$eDHz$kJ4~8qbu9xn zNXiwx6Qv5Xo6~zfgnM`I#QZ2+W*j|0$Zv^4QR~L1?rAjRm5*EURf~h^6WFHyV|1NX0$u$X6GG z{>X1hgyD%&V6$J;ue;3{lWKc-we#mL?8H5|&u8}|``RfjWCA?m>8wYnv8%;|(KxZn zU{6a5w)SPv-6ca6u7vQ-elXGdFGd$jf7wOq{_|Dal}PPae)sC~zT=1YE&Z=&foagU zSiK%yXLTd*iZI?*z>!N;;lcP86zKdwO?OJ6udkuS^a}kum!4!y>m8k!=Y(a|ZO?MT zoqTtP8+^VxX$`!gIL`20%1pa8_CAqVr$C^Z(+T5-!TZ3X>KAG_X54n=sx(7rEO8;y z1SQ>$gfJP6{65c_V|Belg*(XajB6Gwg1iRwW-a|64GbI-?n9;8GI<0P%JuGdY0eN< z6Ubq0K2J4s5Q4l>N>KAU`hAz6_?ZEqHq>>p3TVR19c2^^reCT=LFBy zh<(d$Sg+K1^B2m2@T0oH@*s%QzYku}$BH+%rU)yFfwqC>rL`%5kRS}&SrG7fy&WsQ z^NzvI8Ck#>a$HdZ@nz6zi9)1m0^tQ}T(;|lN^fkhrYMV>CA}i0pluz$pq*6q4}SB~ zhUc}9FS)5{MRTq`j0=CSQ5^0-!dDbjxUX5Wr5TbVBk)0lH-y~(wCtYZRI!H-OJVcb z!a*2%u_5{yJ9laAcNOBi+|)#(WhZ8xRLb2NIW zF2?sZVK=gsfv=!qZk-<3T~Y_Ac%Z}kYU6c=pfxD8iV zkAB`gKDW0I$EySIdv4qA>ulx%D)skvpKd+u0Q_4b*5q_1$L7=#kmY*WZ(eGgr;O3! z8P;zj5+Jk%zBfb59od}|aMbSOQ=Y&DOOd3i=81u%FEU+{c(TE=@F0u>r2C-BV8b@& zdng-=VmIMgMwdV}c9ljBbu!)s{Et%V%;iu@lTc~T(`R3CEbbM)DMokWI=PD|oWln> z?W!@DS1@jf*m=MKCbUaxm0)Fl%FC?A6Mmn+p3b`iFXoZf8jl1WB zA;URonj{oQ&j-C&Mqe7qQjU$bk>A5&16J+S8SRX zxVdDZ%u&yXW(&7B0|2PVF#}+ve0TFTovi~XJvyN&a-Oy|kmwrQ#6`ftc)$KA#}0Emez(BE`izjA$SXA8FmtBOG~O@j1w!ays@%l$%PgAaDY1 zr>SjsnM8@rnjXeT9E?GW6%C%C*f@YKP*4*mh3p<}f1FXvCxWLPS`9#dNvu8zcHNI4 zD!o)#>y21A{*~=q#8Ja zNS?NvV(e6d4qD82qp{2h&HF1G^g`lQS;fX>RI+a+4eYoURj8C1cRF2Tr0RrE3ayW6U~FM$n%baDxov9`-M)n@BgUTPC>g1!wdys?ZTxSXFA{i1eQj-dU|H7m=LUj9#U8f zUG&PHp=w38CA8baI`xF`CsT|&6Qt?>JTuD)8vzqPCE|CkqP|Fw4A7~qpij^#o49Bo z)AsT>wepgo=_c-PyX~BfOQ|(hOlIDwae+m}1&qQ3m<%RV=z}5x(NoNPqp10CV(J1C zJ+HsFTZW$S+`JTaX&JpIbLZcza5V*TY7yl#d#M>NcnC4THrw-;#nGtRk+hr#X#RJM zwr68eazoLjjZV3o>N%S+$KkUh3!SoaVMK}8E)@Hb#+`I8e{&KG2cA8-@Z(gM-6<@M z^GtdXW#9dRLHIz*sMdb4l7iBXoy^|uOS?4YH9bJf2rwP70LMQ}km0H@CC}wA%N?=H ze)=Rupj&z5wA-|6TOC(A_I<@a7o$Og2{%XtlzubpL7~}Jb`{_`2IiHh6nU;vbQ*J? zM-2*sjT_4eKjUsD&L^z)GEAQ|FfaN;^EPx+V3TL`7-@Rs0X2aoMIj<;UzVPjkPU_v zS`v7Rq(uy|8Z*+iAL=tfL;Qf)rh9gmeQWKDI>^OyGlI$RuZN#aRlf^3wNx_~cleU% zZ!^$Ik;~+Xn2V3{$3oKx6IrxWLTJF=?%>7*!dw{XHILQU(U3fP+5;v7Mm^hiVaC)7 zR5rM`)d?{C-RFYNf4Kz@H76DRtno&HEWy0S&DtxGa~q zKnJ@v@!VYL*D!ExF$r$mL8>|l8w+^5064*YZmoDEt#hQ(Lf7iEnMkO2>b}kVE#2P> zr{UN2*kfpM{dH9LHy}0o&V|H{wjSFvB*#byYJ$YMyP){tB`sd*Hk({Ph!$Cp98UCh zfO1et6WeRjaFvADJLU?9fOeMEU!4yxx3i_-6uo&-45Uk7um-G;u_Te#o}Jhd*B_RmtytMG_(n)6 zKsG!{beHLOEgLec;#M!vl;P%~^AcRM`toGLc;j#==k;3U0**v z%b$!|?I5;~tMp{hx}tv#CW;ir5yAP9N=%oy5#{5B@6Nut6FiVxuPOMmX+)Ema`z~5 z9B%hsRobz`;aV)`<-s(@+w&i%{vW;U zg~=cWFIQhu;aW5o~?#O-ra#3e@MVaHG#D%(;I;^0oviXBN`={ zQRtE6uOX+2%@)&HYm^DHLgnDR_fD&4h_;BK72#Ns^YI8OTibm67c z%8J^5eCa^Iwk_$^X|%aZSFT5c80;T^NLhYQY`)+CJ3=yRZ%;xVdoH{%jD0GtMs=k0 znXcB5m6|60b74%=Lw3=K*Q)l>gG&)bz6;eq?k|R$+xJ2s<*)2XCNSwUTDP1hTx~N?+Vub#+@kK|b7txL^8HVIvNvL;fW|a~BNpFw=7hjC$ zP!!l`Oe*aTQCM4X$qx?LpS^?ckW32ZAMP+!PD>M|v@#gI&cIN4MZ3h`xb4n!pgjRq z0^sM7AYA>W?W2D=sr|sj>D!UUvss)5a5D*>uhmu+D~#Tg?b&WrCC(j|k;|9H%2NHL zp$=8pVH+K^YxPRFB4s1~f!Zs(zx}n5M~n?1Pflz$D8a1O^%aoUTYA6$9PhBr$l!bE z0yg1N?Z&KE%`}m|?NV|b^W+LZ~bH6T0z`_>7K{7;qr_Rhc9`n&7IW-I~5_z z-!5JZo^lz6x0SHn_pkRxL7`|D{aBUiTRLDCxNM;yc* zwl1k^2i_)Oj-cRMfT2h&XghhA8qZ`+>Y!dJ@T7#+*On7%K`TG*Xk4Rc@Xi8nGLwri zuMWI74}eC}9Zh35U*j}!4M^IDs9sP zJ$4c$&X}{Ok&Mqlr=fe0!gx>^qR2j~hjMfp5@TGyP9l|D?mv-2yD157=NV@IrQosO z;Q*!L5WNk(gkg)|B~r%RX}}8d4kDA_%onliUZoBig@xu&3w|xKz=uR~!;ed;hJ~aO z$a%t(LZ8r@nbNKPG~sqvCBP=-RbLnm3zR)sP9+oYggbkmxgCY@JiadQmg!(E7>zk% zkVchf%k!>Cw3R`RP&k4@P4nw7r|(7U0LM;tHvUi*ZeYEM ztNO!h(L$#;ffKzUEJOJ=b&g2F zXVGVPY;RY@kBc;CC>UH4H81L5#chW_HYNzSgQp}-o+r(%{7?#kFjASJWk~X9eEjrw z1f}#H`iw4KE8<)8&?%3X)3b#=@cLEvadxsAQz^e1_r3j~IOoxpzY<{u?&bksbMCGk z&eWOi{RlPKONsd7DXn5G#o2%q2NsMJ$Fa!-34{jfFazg`k!}UOZ_2U5F7Z-~MXfY5 zdtWxa_Ndsu`vD+;t^F{>FBW6T(7p8Go(6q!S9I+0GjTh0v+vTr_9A)7YS@O>d^_8O z&W{0gkMaW&>2~BxrW;F{6Hc9qgq$P8-6`$9N2j~Meg(J)kb zTcC>v8(j^;II!cr6d+B;0s&KXK$cM}BeE$W>H!m5^V{i(*8n7nS61bUVj>9Wo8Cbr zUxeS?e*-98OaDZB;@IQ^+?5q=pYm9x3G253l6Ne}Ka7fQ)tr|H}0nyp8p5mplZCW>?^*_S-eSoSf%t7_g1w!~k%57S#@% z0ceuQ%)>1T$!1HnMGi!YF}|Nq6pp8~!Sb4*1Iu5|Z{JI7zHfq(oH#=)Xfr8F8dmrd z&&!N<`@YLoV;VSl+4qKH_?>d;;-a3~AK$h&?Yh2nweL+hHzaoY2-|qqVI36r&VJeO z`M$O%qm%PJ0pCn^TKxRd_xR`W2S0rklTSJM>A~=SMlv8nk8_IY^06XQNdk1k;87{u z3tvPqzad*A5h;;xOiah?K-}S^*3Dda$s2_N+=iiGwP17v2AJuRb-lBaJZI|~Z<{R6 zR}zhc{DU6|4>gPh4SkzQM8yuZh2>R)Ukk5SH#201p5k*{a1LVn!xb37XE50P8RP{m zmW*ln=*P9yFS}-ahi&_|j!#6NaWytR`Dgg&hu^CQdzh4Qt8#aE5JWhE%NqIsb$9Zc zDUz_0jT1vJ{V(pgHUtQL|nEybc65nfHML{-9 zTds<{?I9nUFCmJccdx%N-G#gbtGvj%V|!rELK&#$6a-8^rqXQ-0RznH`mlBUDi6Rl z&ON_r0LIg>MX1vY0q^v^B#AspqUXs)=7cU#E0-3JO~|yqE&^Pv*tl^}4$Od4go(^% zupqB#VPe685ypcz_CBtnp*^cjr{!(8l<;zPe}v`OZUt=9V%wTxy2OnVIBA(rc*J}Q z@3=MC6MILTP0~!9^qVLM?P z^-_y1n^Bb?{ac<3NCtHiXjyrp_Nl;~YU5&VY4nBgn#LfCOVh={ZvU8We!r&;yPx0r zP?qFnWIa}GL9TbpE=DDu)JGkv8OsMU?**yw-@pa}L(+n$!23V}A{i8n0i+;b&@87I z0*qc|%M!@d)Zy#D3qSt;sxP_F5pD#MtaR@{xdrnq5TvaA?f{EJtu$a&m~M2&ZI!u* z*~8Rc81YQ};Yx;86->EVjWUemXI@vqCR<7ba&U!Kw>@4&@yhfB3YbcwUe9wC)79XJ ze>{~iOU4V2>*7x*vRa2Ss$!1sy|21-*tmQx=WJ7~?OZ_rC74RTnfS5$>C)t`Cf^X| zf}T(-eheCh(L|Gan*`S83y_@57M!b! zbQ_L#!xx^-XR*KlDc<*Z7!5sQXs515lj`u{4 zo6(F~Dx+3L&;L%ez5z=j^#xd!o{D}T z92#!_fxK@MKk;M0QsSn~uPQOP_^HG0LVSlK?CL}PM?7Lh5U+pQ^{15>D_5$`gB5{u z*xEa9U{NWBI#O8c8~P?jiP06j+tit|FIJ1|izlKENo1<-K}1Ccs&*h z^L#w2sf1Bik(kd#ca#d@Yk=*-Z<0ts>y1+m%qXMQ6LY=ILv)Ra1LI`N++$I<1zE55 z+w8u*^&?K0buEN*^5^RE^nc~qeMT{hQ#7Ijj%OutE3sFZDr&U72C(uq3Lh@jifn*w zww~}8dnyP77;w$98oujkH!Q>il(7ms^1BHGl$!x2_2hjqcO*^F``$?n!*TS~gDR_z zswrkeQ=cRlLB+NU`U@EgmX9jnPtbTD)5Q$F;rn{FMd%qam4&FxF5#1U)UO z)(r5|OSJ`ql`w)L!jWMI15I~G(ABq>fE~haBLnqc_a2d2Zv*$u+tO$HAe)npm1S)_ z8GPaRp5i^b8{rso93Cgke%5@D*#z|iENhvi;w=U?ufJ6%Kh11A%+KzdFc9>!ihBAm zlRL|!$L=2*o~`a#eh_K1xTqC5OSJ1PKL?AOV0S>(%t|p*@cWoVAe2&B;Ig_!AdeU? zxeFliP#=*9Z6YMm1W1B4daO_2tBHZhwyVmLVjF_ivnNpqxAwI}VZ=^l-o7;81@trf z!6}H#j6JOn-;6<6B3nuGYJge!jUichxBB=wM_FKyDFV7h+O8UNjF4sT*>% z;MaJcpY`mViOi}&&AO&*g zkWphxjKl#4?2HZMW}@{#gK5YN>d}!1SW94S8g~GMh%9sH-HRow~?+WfbjgaTq;s@o$pbFh8eTUPzNd*2jVrK za-WR8T=`nI^p#DfnKqC=be(?Gc0yiyM2?}Td!lk)gC zYIswM@F0|6!>-@u2gVLv`%BOd>2O_CgVcV!r|}M)1}^MUds@p-h&rM2CT;Y05U)EB zM?q2*^6z|0x}v$%bGbu30Y?8$3KKR995|I9^B!r&`WtSSOuZ2p`Qw(+eM>!#{b=LN z5H%307gf@5KUL%c2yI{jGq0SuvC{zROkM(u=TrHQ9s0cmnwfyAGo@w6;*H#ufCnA|;TUl`P!)C;q|)Z*Nw{cLn96$D zdC{PmSWO)bOZJ&L>+rK$GgIRv=O()BnA~mI@aa69FzBppE0|QR41V|tL$MDS{$ z)_0g)hm%?M&=*+*5G-!|;jLu2L7mtICAcmLo}nTy@4iCOAqLD({zu5Z-9tRH535S_ zbmLPTSdSrHgfS8@zl^>7=Lfh6xze#6J}ydz_2W5hs^8HG2F3vwV7K?D^_Rw?vcvx^ z`F(gbceP0trn%#DJzsf*>^wm+nMLxuW8;03s21^xF~an~Dx5lF20!MO&7``2{JWx6 zDudmchdfTiA!QWaBRt5F)0hNXQi@0(40h=zhv`mV9IPq zNRK#Xk5|Nab)u!{_2BT&?-Q}PH=zejRs*`#uqd@#2V?530Sne%s4M6ZZCAiD#pa4?m z1|_x>ARzMx8~Q(U@h$Jg`GNSe&>cn7beVxqdo~dXbuSTM%e3jEq1SyFu=EBa($z6_ zM!9ykE8QMFhM-ORK9nT1tFRO4ULZAV5v;x~NQT(hX?FO5_7M%t-K&(=eI6Mnw~XYF zRVl4zY}Wgp>iWLfkU#q-dfrT^UmLrS=IgR^{UP;#!^*bXNBeq}NH&@(fbBaX=&wRD z{8H#gqKpn3So_XUUB1gOyp*x}C?zRILYC!O((Cu0E|^!2Qj8uso@bPeIx{Fo^tU+n zhH&Hfb5*+UjLKIc6|M=u`1!gb!AKtIW{S+pfj#sAidN#hwAR0*+Irqvy#3OC&wyH+ zi#i?yY5~G1*66{v{FZ-x^GAFJyjDNXj+p&@`pv!@CxzeasUxHk@1Kj)w(m-KP;6aM zBUSU~C>fG{f-g{{n902s7F-T5RNeZU zKgD>KNi07}?CzbrkXsb+dXHWf3MR*--~0&wE$kq2VoW>kz_6LS{C)DAvRuw`{?Eg| zY+}!QIX1;RpqW47>_@9JXwK!6*I;L}2`}6NbUWYth6R0Cpog3FzR*Dzea`APaUhIR zW9m*Hdwd%)q*H1}vJ${00Z(eULuj^uW?P$ukW}x-uiy7J)@RyhmegvHzML@_-o1=tsGxXeYY1 zPK!4Cc-(mVc)RJ)p3)-sa&+1cGfZ}mtb*gn+}8Nurp3>F61)^0F@GS7ksW=~Sp2N{ z*8z8I{sY+YmZ#4Y#&y+pBL@`N=CGF%yPh?<_c^S)#>#lmgQ$;Bp>1IeQ~hSkhHcnwGm^s_FQp2rTufGY{htM6OA3ik z=N5iSWd1g#{p{KBMBnF!jSDl(uFCxeTF7uQW2omWiesBL=g_445Gj-Hc#~sxF%BMG z)SX0=$9F^Phe%t&i_?EuM@#OMF< z``h#&=9NkJ-;G7LFmu}O$97cHzD~hS#y>~wMl&iFRte_*ud-rk!b|cD{FlMw?L)`- zd5In@_&ZdZdlUNgcuAuh$=>xf_qV9`tgWFbg~=(Qy6+uEdhXy|Uo)SeF0PvCi}bSB z>=T9WOv2amL(EAwvwwQKEIx;e(j89yrKv(kztCrQcz3Jh3?i?m8>={5I-AfdDz7W!t2SxNYb=ieel*WXQ)_J?y6 z5>n6R&}DN+kYlPDT7fH3nrjm?KMNus{_?uk7fWtmOr!tm8V&z5!_Vc-`N%D>y*zA3 z1XMy0ER<88U^(*lW=f?aFhM83Taza z*q#xpnENh7sQa-{cU`gJTf@K~2IQe^$M-ds)Qhpe{CL*e(ddI-M=<`U#ZI=|CdiT} zc}k;wH+4|Gl12%-03BwO<1_ioSbqN_&a(bmUXkT$<<$OLwOhSxe% z<7be>l0P~vWm$t$8EaxRp|Nl8m4e-*s8cHRgB#GeH}(HzaaP2!edjHsfq|d^jSe*@ z1CVI+maw%Sa{pobXz2nL>Y1>z=Nxn4r#b1(xC;ItGXsA8$TYK~j9y)}T^O@jK-+@1 zW#;$`P;RTr+u1pf>7Wj!Sjt|r>+-2n;i<;mWGvM!t1WE`n-7?X9_-1teX$<(ZDO?g z_xq=ZLyCgeH{-F^NkVtb`Bb4+>GkIx`n;Z5xi%;@RBtCqq+Wv*s|>ivC%0g*i~C0R zunE-xBndyy)7n0j_Gn83QuizR!C7cz7zJ#&q?WvB+3NW0DY!Nl{3YmoLYUuS`}3cv z_UbpL>80IwADmiA#keW0oLV32i}jBBHnz0C>BmU<0o!vQpF#b!$?{R>6Wt;ozr`~P zTHANG%oP3msZNCi^2jp#?BMBgJ7-t8Rk=bauZ-&4qh|ymV8WOa#7qJ(%Gk|efV;Q) z!$d+@1#z)^6?4Aj+Au8MzzsdP+z-q)pro`QA(pCz)yEtUWs1B2nKOjq6+#r`#W{_pHuT-qu*_eGrId;ofA zzKYjEG0na^1_1;5`b)cC9V#igS^%BEWSYUUB@)*Z`U5_uipz68WC4n4*3#I6}yZzg?G zhpmFm4z;RtSPlFp>|FqZnUlJG0qaI3{AXy{_erP2f;<`W$R`t&FHnWv@&MgwuZMNr zpRqLnw8oF*@ZUfkqRxmZvO}+5y$Fi3P`SSk8-oLu2^|6B+&k=sEzF=wcmr|jw(V;Cso)GPKn$hDVXnUqZ{7^002;FA_t2@J_ z(H}MwHurtd!_ZY22Py=_@HTdy-&5hUA(jJC=ZDP|2W5^ZQ7=vxjQ7gCKU*~WStoEl zJ$lo(QJc5Z!4~W_wWfQ&)PrsK%dvGZcAexx!2g8g(Vk z3oz2nLp_T&S^za?WptQsu=}hy9v{r_V%+OF=&?;a*`xidW@3`K5q3w>u z#fY=drf%78?=i&;O%#3KAr7n3Ujl$S~>G64b(Q{su-@uE9v|gz{5!k}A#R2TSM0#%;TPv zcB{2xj4r2)vreMeAjQ3?09%*ch3;6@?2Egv%X$=K zx4*a9`!FE3`?-JU3+sP(EDc_8cpG!~*TA}2b4B;ZqFZl!SG7S|te4s9Bv!fT3*cv} zfn8Xd&lKoLWB=y{zb7d1A&j>XBW@d)IuYf1jS8J%cs;&-cB!JMN`j#Stfu?$OSUH* zf(I+$l2hwm;^4X=$(p{z?;kPlK=%3fgDFI9PJ-b;wUUR|0eSAU+t#mxo~MzxZs>Ep zH3@%HgK->_Sb(gtCT$YR|TkGn4s{>K#OP{eys_IN`5s$d7~(qqaiI7YN`l zx2d{roLYA$jAqcg?kM4mfZZj|O%g83Qe#BQY6~k!4g@u>xuN*aGn@8MYM`9$K=P6n z-hytwcdk#r9l9_3!adXM$-U2lb4|w)Ttf*M9wq-X0d0XYQzXs4vK3CriI6#G9X&nE zFSaO0@#Hz#reCWq?9s8qpK*cv@ONDQP0*MN`}^6FLg2f5b6=+$6axF^m%bPE4Bw45 zyA{3Gvs}OCwU4So8_m|{88$_99DUKz6MM~$ol`k6eYmOiOW)b% zQ^)#fy@v$LA3m!^$BjrHFMJp_aPdXXt$P;5lTDXi9WvT{DeiULjlPxj#J#6a?tKcY zr9@D|-Hn3$-18lfcu?JtIP@u_DqOUeni7zb z6GqjoYX7!UV?Pf_#sHa)dz+UX{=Ia&T}EvlzX;%7_5^&a;CCkEfBTvFVV~*^$)aOk z+(UA)&&~yq%p&ClMI=|WdXu|4YVOetT@-hT9PW8vw^@EKiE3uf&U{WV9WQnkd`LP&Qe3~@@~JwH$^`O zO~hd{$AW_`u!*Y04_n97?U5{O#odpZOW!4zTgEvpBN#F4`_$wGV;x{~XG!DoRB$J4 zxG!$zsr+dWy)=CEs8@8a^ZV{c%}?fsrjwH{eMt2jnQMQxHTfJ!3M;>iD}ZiCfgrvI zT6qI$x2y4@ON6I+upX79v=}HPG5y4d8>XZt&R-)^w80{ZVVLNd1m4^4$rvU2PcB8T zbC(dSyn!S0@TLxsMo^!NtnYR$LJDf~I!AX=lbuQxn^T-3feqVeD8+Bfuya!*L&`AK z-4yiebsFR?wl@Rpa`cP6n=Za>{^!XX!6Qjjr&)%toAu0SWXmTD4!lQmr}ekTQ2q8X z?#7G0B1f*jmW4S&jSuLOPPqVRx>%8+XqRBg8!dbK)xBQ7!@R@r(A-kVhnq{~t)E{G z(gz;5w%YoxE-zc9^j?a(`L1GHMb6Y@z{=Hr5S||#2f1&q3BH#lSag(P+zm0$@RwpM z4lA=28zRrm7Fqw1Q3L_ z!RFt_9&8C)CuczeG#`;@@O#ewb>qmsokC-2V$L6p&(t;~8k+soq$w?mKKoFJ{LmN6 z$r9WF`>xfGbCD6(rj^DKI$Oq8-_J#Fm24k!7Hy>pq=mz2Dg%2~{u;B{9=VuxLtK)m zeD{;ewGXKersjXT9#Q#p?PyY+9L>9_rs9zl(HRQ54~4^0b)RklYktbAI`q$V@^6g! z9LhbaLUJGlG%1oq+q>cB1hGwn0e>E3FOu7o3eTEhVRzxO6QW3hx7uTVUUQ|*AmCLQ zOl5pU1xDI9t4_QCXlwE3sH$6>Z-6RJWkKxO770E8E(%SMe7I3%lwotmr5@Br?Qb>u z1(8hfr6>VM@ z@l2}-$ z#tLV&brtXRC0WPfW;4wM?OOo~II)dR!3Ndg0{eC+s8-d;GH*0Mk_)O3Npv|@c?pZ% zkOVd%If}#sYzYWr%5joGmc-O8Dsa+}oHBWAaACs>T@_ZNkc- z0e>OIRl+F7k3NccOCi|IW-dV-^~%Bb*n$O&Yo`#HyER_&P;E=;zyV1SBTMT#b+`x~jOq-FdGu)Dg*FwDSQ>GS+cs(dp z>uDw_NL`>B{67O`)Fz^=e(|T4JPj@M&g>CwRn25mjTcvG>Gm;TL0WW#6^9a_JO207 z6s<`yxO?y8T+xM5$l63~NU$7!8s>hj@LKn#>2ehQ+J^q<)?;{j(cgAAU2P37Q9=jRNYbwsQtfv04~t-SVqCH>wzaV)**v*je3`s;tf5 zOAyScPfuhq)40j@mF4WL@An=pd6XZ)^<+i*A?ixUv-oi6;jTbfL+}>O1dnr;JI?6_ zpY(%y?MQ72Q9}{sL-cOETAWWelKa?Ugxlx-j)!0w8*K$^1;0^)0~?wxuo1ooTvM=B zATD0*;OE-dk_TY$Sor^*2LYA*6dl z*euxytNFR8f#L31NFNu|gP=B^GJJmI$#vTG>Bi|x@u{he3(Xr(y$>DTlReUG)+oU( zmDzyNlG~UmbR?MEjGmvLvF-a&`~K5NW!SY^)85;=p1sYNei77s{fYI^;V^Y4w+|OA zh9JXpx6y@U9IaAmB%;5HZS#kBZdalIdR(iXG+0K1JOQ;KLp9PX2yXZsZflr^!WcT3 zN5?ySkvKmpkJ(s#Y0qZV3cEF!!jPwun`2uwF`CKJTaVq{blj5^H>pK$7o|x(;dY$CR|WU(?KHo4b=A zFRdvrU2c6nb!tP*#I-fe{)Vv$-AMnXz0pxCN7iimM|>k&Ro8i!3=}xbAXEs1#9BD3 z$xa!n*ZJ(bnZ#c|PPP29@&B8g2B3601ggQw>FHA@SBFylsDbsv*-ZCNStzr~9Z0|_ zBfG)F0CVw$4Q4oLPi3YfW)tBXc>?&kh?Jdy^o!s&4oEudAn`^PGZpA?4afK%)pQ21 z2$H*R++0w`1LF=XWRRn+1W_?f3)5_u!>0>wH-_tBBTmxC^OC+9#!wT7{w%!5hP=o} zpcOG7dXpS!_@D3_4$6ppWJHdY@2&C@aVkEf#z!}gu6>TXa^&vbn+~G^4;wePUcG)C zEn9PPe=)OA*F?fc?%|!BoOuJ5Q>1>ocqQq4x&PvO*XYofD~HP~chli3?mD@0;Kcd* zD?lZ!?h^Y-wVT`+zn&@;?Q-I@ZCySW6=$G7{P;5|UI3R2C&qqxd~_%(!~(g?o@hw4 zn{v8w(*f2y8(|jcLJ)f@71gUIB#Ll3O8Vlc*_c|AqJ!pf)vz8pjix;qg<2LPg+zfyx(4EcSv&MJk;1^3D-%O5qDOr9Os`7p%lxpL)`PtTTH7HpP~%YEnn z-Mw<{(%RmJ>)*3IU9Rl*$7+Er`r6T1;+njA$t8wM>#d#Bmspt9|J z`E?i*qe|SNr8u<^Og?>_R`4GHixx5g-W4khp2Kv<&s5d``^0t)ZRBglC`>VU8PFu89zGg@ zc$_rJTwS@_zvI-Eefe77=J*xx5a5>oaE+*9B8q9OLa15K;v7!{!-R7c_E%+=^{FCV zuA`Ko4gxxUS?}_J`os5c%0mZ2({JSDi*%U^+zlwCV?<6rPJBVlWGahFuhJs>d|OTN za&}F!m~QbkB)!Y>NzqN%EO|-`WIHWD_RPZn@ZaC*0tkWYGUD3oy}KwxVAw>(2~t3- zEb5aDgL*0~meHaLywKk*uIzd48)^=zv^iu$^RC!dKmF~pNh(NQE`oc&mG;F$7C&UJ zY?SI9;4ATOeSdcKsn#n;Rn8dge)SUJhTK+a@d4fU&U)gyRwF*@lSD?L_RpEj`P5a5 zg+1^PN7vi>3yDt_tQ)1c8xq10bqhKzWx6XnHmXyTr8#G}8VC={(?ogfAm$dh6CgJw z4RGmaMv}oW1qnqUq2`r^>$dy)^3A21{;5Q9%Wf)wA=g=@+$J<29g?&6Cb`A9r4exZ zen5qSrU#wSPa|TaZr`zNA!qrpCwClUO zh=$84AY*W#YF*o}Ee(@DnSB*!Wf$akeX?394|!b=0-6D(*SqPh$D+Pw9o&#~*$=Oe z_1=NmUX=y0IGUUeMvFLd%g){l7WEped@7)@0?aQ0hrkdn1$7Q2AsQOtt(9Y*k6wph zRZRD01mMR?n@y20enNgnX{^UR|Et-lhFSW{Z>HRPt6`cs&K?EYIMAt#bpL$N(ywR0 zglI^+nFJ9S?buvNC&>z|1H;o#L$wz>hv165k88BU2!6!K�vpc7w|jToqwnz(-24 z0+#|CBIOth22+-+;lN0uvD!>Hdv%jQlGs~un>_~omUM|`GKcaDG9-zA8nZMzK4`rn zwZ4!P3tE>JmwNr*yosw5Zmd)7->_erk%cK?@7_HFeE||Om74UVFy+Sn z;C1&r?{|Zlz-U(G{wCui{mwU-eiKH_+KJ-Agx0zB?^JOXw%DA5n?1Nz!59R8oK zLuP4Rt6@Z8YFqmW?)u_lgDE$V?r}JQ@dnnuu>wP)XZw}jssGx0Qx8Xf?YVi_i!^fk zzl+hS$E;M?5z5#dM&A`_&KscMbQnAW1D|r63%~Q$FPuN1`r(IfiG#&`nBI@yaf$bV zvwU8r?xoKeB~14&f)=vjU&lT@Ow2#8V$PVVTA%cTJQl!aI-P-)6u@f$R@|B$1U=_> zS#Gv2mkncVm-TQ0*_ACocvzlj)r7(u!=G)}(APp+Ct+v$j=ugrS>os2+Zr)g-o zpEG|*j=^nKx}m_1*a}zF!(>+OX^45gO3l~pkO@xbvPKJ<_JHGK3635*+6gAki|m`oi%QKvGni;_k-e*X^;U!2Uj z?{dp4dhOKvXy(GwBlm%DPwy$$fh(?Lp#h2owjN%icfqO?d~+bi00I*rjk@a5sb(Ea zq^BcQw~|v`q9}6ON1{Rygtdoz=G_NrhH=TPGWM;E8m1ztTpcSsNEtNTVqHFnBw!KUVwT}*3~cQX zca(+#kPmA?Cw;|gPTSS|?yUgdn6_R6WGAajcHpZc%<}YyFS=oXuC5$*9A*;z*5OMB z6k`a~sXi(NQ(vR8-E}#>;G%V_@Dlk~``oY4z#oAtWq-H+Z)|oI8U3l%Y1k|7d&&~A zqjfvs@<)msHi$kG2-!{RUz>*53TKtq>RJ!4l^G!GG;e@DfK9FYp$c48kZS{y#;ML6 zOf{DPsyrl%+4&1>DOpH>E0(eZk0^qNMHJse#tmMVB+AaR5x8o#{ybb+4jB&yIN6rs2EaX?2L{ssYEooIJgF zJQgnZTJxgOp`(x{F7X@Gm)}(Yui}{U%?> znbIUMXHXcB7?gY^UOZH#|K2W5z4lK{&R#`%+abhaqbmDAjMx{=G{FWR%~ciI^}Sl*o{$$W41XEh8JqKF{B3s*W?+fvL4G%e!0lH~m9s zV(MSs52=$NDL8Bfoa0IzUI3vuPcXM-z5v+;NlE)1K{sI~(e*k)7p96>c|@3Pvn2bd z3V+l9Nt`Rr-v6Nm;=$Rl9;71deA-!#$^ebRbQcbq`%BOU+w8Hh-y9Cwhxdl2i>F5x zjcf<24BLR&^7J-)bu$q_m8+sOm8=;U!|WT34(~4C2%8hI5LJm0NiZo9nt8FCtdnGm6g%4h#LsVYA%o4y zKtr=C|9|$(l6wTz4&m>&uqaF*Elq#M1*VDW>sDz3{%Q+Q+0DpTqZ7rS-czK!^xsZa zXGyk9mMlF!OgQLvqxD43l~&fw*h^cRxXD`Ulf$~Fa-#i~b{2abJ5b@Z-qzWJS>Tkc z)7fcBT0Z`1tL3Z?r&SvxSsV4jN?xK@ma8pfV=*uaQy!7nHZ#Er{tUAP5N^OOH>>~E zQdtR;S-~|;sB?iAl4qo=2ywY#IDjd*Rl#})ZgI_~ z2^9BeKXYJ4#r8+{fA8M+UQOCOgwT2LSNM3%+w1zeXt*HUVVP#4&PAi- zOli4h*b+++6Y9E792o~Z4vh@Jdks8lKglBr|6L7Xicz2(O%y!%BRrRGwx3>Xc?&Mx zZ6LLW3%dG8f)ouODw|{#D`1r=*4?uvGfy~ES=G{ZM5#llM5vm51x5D6(1fe4p8SB$ zi#c%xOIc@DqkNu}>z$n|0a5?^*tHWh!Ylnwtomp?glw;TP;_7OJ3Yrk8N_e@l* zcy2p}BSH+DV074FEOPO$WrMq!(wrtpKB`NkG%3Zw98+~eLfP7ts7NIYir@B7*nEbt z$=n8@7?R`LF^_X@dk2gdX{q*>`3NChGI|p#=L!9IsU7iQn@<3TXqQ1}kIT>oRsU%i zY?AEnC>kXfkEjBH^`@hdvJP;ogNVE01@(@J0t2T(EDD$b2Cz2I-PAIXT>EaLa#*E3 zj3?@Dg|DHx()wG|5RL2E0H&o^6MP^CyvKrbw#f)09D!2Ds(T~>deh@k6Tiy;-gD#~ zYWMD@#ki2&(UKy!%Y~%l`_?Uewlb$BZ@8Rla-69MW(<<5%>f`wZVP2w<>LhdvSH*w zwM0?JB-j^mNx(CT!lh6U7hZG&nhF9qU^AtnZ;~;f1n<<_Gb2{k=uA!SN*XD(fs8jK z2%K#tVG1PSb3{Mw1k^m!#C_!(2~SVyw_DhQ=^?p$EE^gyaXUPIiYJPwyt+Qz_Z}06O47?{ASzW+?4wDJT34};y6t|noYm?>jRgfO3<2Ta59NO1GQ+;-!?v@t%P6e zI!tM{RmSA4T;jVy`j8wY-vrG;dARF4RbSd?UZAP(r0t@Go(v8K80n~R3N>?#(Ffm> z9sp(K=|Tj~XeS9d;@uM382HakHwcBnm0~f|(`;0ZwmuQkNxr`l$xt5LB^cSKbBNPXpL#U|X0K%jPA8U@*{rtM zET xb8lj~dJ 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 literal 0 HcmV?d00001 From e76bb6bb2750523bedf891f220194960bba46a87 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Mon, 17 Jun 2019 22:50:43 -0700 Subject: [PATCH 06/24] = Format updates and color iteration --- src/commands/CommandBlurry.java | 4 ++-- src/commands/CommandCatch.java | 2 +- src/commands/CommandColor.java | 28 +++++++++++++++++++-------- src/commands/CommandPerish.java | 4 ++-- src/commands/CommandStark.java | 4 ++-- src/commands/CommandTeey.java | 2 +- src/commands/CommandWolfram.java | 2 +- src/commands/CommandYeet.java | 2 +- src/dataStructures/Response.java | 32 ++++++++++++++++++++++++++----- src/utils/ImageUtils.java | 29 +++++++++++++++++++++++++++- test.png | Bin 283347 -> 58691 bytes 11 files changed, 85 insertions(+), 24 deletions(-) diff --git a/src/commands/CommandBlurry.java b/src/commands/CommandBlurry.java index c875ff2..a777897 100644 --- a/src/commands/CommandBlurry.java +++ b/src/commands/CommandBlurry.java @@ -39,7 +39,7 @@ public class CommandBlurry extends Command { try { - filename = ImageUtils.DownloadFromURL(input.args.split(" ")[0], ".png"); + filename = ImageUtils.downloadFromURL(input.args.split(" ")[0], ".png"); preProcessed = new File(filename); } catch(Exception e) @@ -48,7 +48,7 @@ public class CommandBlurry extends Command if(input.mentions != null) person = input.mentions[0]; - filename = ImageUtils.DownloadFromURL(person.avatarID, ".png"); + filename = ImageUtils.downloadFromURL(person.avatarID, ".png"); if(filename == null) return; } diff --git a/src/commands/CommandCatch.java b/src/commands/CommandCatch.java index fac6208..a2a55c7 100644 --- a/src/commands/CommandCatch.java +++ b/src/commands/CommandCatch.java @@ -48,7 +48,7 @@ public class CommandCatch extends Command else person = input.mentions[0]; - String catchFilename = ImageUtils.DownloadFromURL(person.avatarID, ".png"); + String catchFilename = ImageUtils.downloadFromURL(person.avatarID, ".png"); if(catchFilename == null) return; diff --git a/src/commands/CommandColor.java b/src/commands/CommandColor.java index aac5c04..5bdd9e9 100644 --- a/src/commands/CommandColor.java +++ b/src/commands/CommandColor.java @@ -3,6 +3,7 @@ package commands; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; +import java.io.File; import javax.imageio.ImageIO; @@ -16,6 +17,8 @@ import dataStructures.KittyRole; import dataStructures.KittyUser; import dataStructures.Response; import dataStructures.UserInput; +import utils.GlobalLog; +import utils.ImageUtils; public class CommandColor extends Command { @@ -27,26 +30,35 @@ public class CommandColor extends Command @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { + // Config int sideLength = 50; - - float r = 0; - float g = 0; - float b = 0; + float r = 209.0f/255; + float g = 74.0f/255; + float b = 153.0f/255; float a = 1; Color parsed = new Color(r, g, b, a); + GlobalLog.Log("1"); + + // Construct the image example file that we intend to display locally BufferedImage img = new BufferedImage(sideLength, sideLength, BufferedImage.TYPE_4BYTE_ABGR); Graphics2D graphics = img.createGraphics(); graphics.setColor(parsed); graphics.fillRect(0, 0, sideLength, sideLength); graphics.dispose(); - + GlobalLog.Log("2"); + String tempFileName = ImageUtils.writeTempImageData(img, ".png"); + File file = new File(tempFileName); + GlobalLog.Log("3"); KittyEmbed response = new KittyEmbed(); + response.title = "Color Name"; response.color = parsed; - response.thumbnailURL = "attachment://test.png"; - + response.descriptionText = "`rgba` test\n`hex` test\n`hsv` test"; + response.thumbnailURL = "attachment://" + tempFileName; + GlobalLog.Log("4"); res.CallEmbed(response); - //ImageIO.write(bufferedImage, "png", file); + ImageUtils.BlockingFileDelete(file); + GlobalLog.Log("5"); }; } diff --git a/src/commands/CommandPerish.java b/src/commands/CommandPerish.java index 73ca6e6..d5803ee 100644 --- a/src/commands/CommandPerish.java +++ b/src/commands/CommandPerish.java @@ -45,7 +45,7 @@ public class CommandPerish extends Command { try { - filename = ImageUtils.DownloadFromURL(input.args.split(" ")[0], ".png"); + filename = ImageUtils.downloadFromURL(input.args.split(" ")[0], ".png"); preProcessed = new File(filename); } catch(Exception e) @@ -54,7 +54,7 @@ public class CommandPerish extends Command if(input.mentions != null) person = input.mentions[0]; - filename = ImageUtils.DownloadFromURL(person.avatarID, ".png"); + filename = ImageUtils.downloadFromURL(person.avatarID, ".png"); if(filename == null) return; } diff --git a/src/commands/CommandStark.java b/src/commands/CommandStark.java index 16378c8..1f474ae 100644 --- a/src/commands/CommandStark.java +++ b/src/commands/CommandStark.java @@ -39,7 +39,7 @@ public class CommandStark extends Command { try { - filename = ImageUtils.DownloadFromURL(input.args.split(" ")[0], ".png"); + filename = ImageUtils.downloadFromURL(input.args.split(" ")[0], ".png"); preProcessed = new File(filename); } catch(Exception e) @@ -48,7 +48,7 @@ public class CommandStark extends Command if(input.mentions != null) person = input.mentions[0]; - filename = ImageUtils.DownloadFromURL(person.avatarID, ".png"); + filename = ImageUtils.downloadFromURL(person.avatarID, ".png"); if(filename == null) return; } diff --git a/src/commands/CommandTeey.java b/src/commands/CommandTeey.java index 6a3394a..99f2631 100644 --- a/src/commands/CommandTeey.java +++ b/src/commands/CommandTeey.java @@ -48,7 +48,7 @@ public class CommandTeey extends Command else person = input.mentions[0]; - String yeeteeFilename = ImageUtils.DownloadFromURL(person.avatarID, ".png"); + String yeeteeFilename = ImageUtils.downloadFromURL(person.avatarID, ".png"); if(yeeteeFilename == null) return; diff --git a/src/commands/CommandWolfram.java b/src/commands/CommandWolfram.java index 4947261..2fe5871 100644 --- a/src/commands/CommandWolfram.java +++ b/src/commands/CommandWolfram.java @@ -29,7 +29,7 @@ public class CommandWolfram extends Command res.CallFile(pic, "png"); ImageUtils.BlockingFileDelete(pic); } - catch (IOException e) + catch (IOException e) { res.Call(LocStrings.Stub("WolframError")); } diff --git a/src/commands/CommandYeet.java b/src/commands/CommandYeet.java index 65ea728..b3fd5b4 100644 --- a/src/commands/CommandYeet.java +++ b/src/commands/CommandYeet.java @@ -48,7 +48,7 @@ public class CommandYeet extends Command else person = input.mentions[0]; - String yeeteeFilename = ImageUtils.DownloadFromURL(person.avatarID, ".png"); + String yeeteeFilename = ImageUtils.downloadFromURL(person.avatarID, ".png"); if(yeeteeFilename == null) return; diff --git a/src/dataStructures/Response.java b/src/dataStructures/Response.java index afbc8a4..5ce4c3b 100644 --- a/src/dataStructures/Response.java +++ b/src/dataStructures/Response.java @@ -4,6 +4,7 @@ import java.io.File; import java.io.InputStream; import net.dv8tion.jda.core.JDA; +import net.dv8tion.jda.core.MessageBuilder; import net.dv8tion.jda.core.entities.TextChannel; import net.dv8tion.jda.core.events.message.guild.*; import net.dv8tion.jda.core.EmbedBuilder; @@ -51,12 +52,33 @@ public class Response embed.setAuthor(embedInfo.authorText, embedInfo.authorLink, embedInfo.authorImage); if(embedInfo.imageURL != null) - embed.setImage(embedInfo.imageURL); + embed.setImage(embedInfo.imageURL); - if(embedInfo.thumbnailURL != null) - embed.setThumbnail(embedInfo.thumbnailURL); - - event.getChannel().sendMessage(embed.build()).queue(); + if(embedInfo.thumbnailURL != null && embedInfo.thumbnailURL.contains("attachment://")) + { + // This is the case where you have a thumbnail image, but you want it to be a local file. + // TODO: Make this more generic. Consider message builder for the entire thing. + String thumbPath = embedInfo.thumbnailURL; + String thumbName = thumbPath.replace("attachment://", ""); + + MessageBuilder message = new MessageBuilder(); + embed.setThumbnail(thumbPath); + message.setEmbed(embed.build()); + + File thumbImage = new File(thumbName); + if(thumbImage.exists()) + { + event.getChannel().sendFile(thumbImage, thumbName, message.build()).queue(); + } + } + else + { + if(embedInfo.thumbnailURL != null) + embed.setThumbnail(embedInfo.thumbnailURL); + + event.getChannel().sendMessage(embed.build()); + } + } // Queues a standard text-based message response to the channel that issued the command. diff --git a/src/utils/ImageUtils.java b/src/utils/ImageUtils.java index e85af12..23dcbdc 100644 --- a/src/utils/ImageUtils.java +++ b/src/utils/ImageUtils.java @@ -5,19 +5,45 @@ import java.awt.image.BufferedImage; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; +import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; +import javax.imageio.ImageIO; + public class ImageUtils { private static Long uniqueID = 0l; + public static String writeTempImageData(BufferedImage data, String extension) + { + String name = null; + synchronized(uniqueID) + { + name = "imagetempwriterutil_" + (uniqueID++) + extension; + } + + try + { + File outputfile = new File(name); + ImageIO.write(data, extension, outputfile); + + return name; + } + catch (IOException e) + { + GlobalLog.Error(LogFilter.Util, "Exception in writeTempImageData: " + e.toString()); + return null; + } + + } + // Downloads the file at the url and assigns it a unique local string. // The string (filename) is returned, and can be used. It will have to be // deleted later. By assigning a unique name to the files, this is - public static String DownloadFromURL(String URL, String extension) + public static String downloadFromURL(String URL, String extension) { String name = null; synchronized(uniqueID) @@ -51,6 +77,7 @@ public class ImageUtils } catch(Exception e) { + GlobalLog.Error(LogFilter.Util, "Exception in downloadFromURL: " + e.toString()); return null; } } diff --git a/test.png b/test.png index 0c987f98df88543e5816e6edce5c6f9c86389060..3e5466761c1ea097930fc562cc1d82895963f4e7 100644 GIT binary patch literal 58691 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
p;_ zE08bOcfyqC@ic7AqN6&WZ_+eO9iqk8)z z@ripK<_ysC$fE=nF~sa!fwVI-E?KtPN!ln-L;yed1T%s=zQ%J_%9mXPL2U+8KQ(#^ ze$>StrkZ5C=-^QJ+YWF{H$9y+O1CF-2O>!w2q_kbD_JyECRpLW07t{lKVaH$Pnf*B zUgJtL!9IKfuh{emn+m)zAjWcxfTt)i|MeY_U(sT9XkCV&@tm{v4->_xEf!qgHj4Ce zl-IVAo^)5qj+d)!pX}y$4;KFsQY>$f_||$(Y%!_}c~niZ$zJdE4Q5pC^roHDwI1YZ zYYO%UxpXW{+nBCfcr^5`yu3Zrd`3~S(bGBI<#bWbvr_rxBb1t{vZA#yd8a8eUQ)&p zXaWf{mXi07fP(}`rn;{&e1j9P4S88oK@o3`86`CSjc2=m=n{?09gI(FH`jl6e5h?Q z^YBLVuJ1t;Bs8W%xF4)#G%u3uTaMe1Qjs+-oVB)wPlSqdEjeK1 zEezz0jy=aTtIAur=cyQHKL6#<-=r&gEzV@XB9~z7tWg)5`eK-s!E#qy}kYEi0q# zu(Mjh4JogG`4`4`DGaa84Qt`tH&+@Fps=?5cnQMZT7#uAeRmxOAJ0GzbnU=o^PvfI zStd%V?CI@*>`~+6p2ewqZrgkG*$hEYcA&J&QCqX6sqwS3IjuU)?O8_;KMEY8N4L@@ zis`C~M4tA0mT^t|FvB2oOl`C0uEJ`-R}NH>I5UGK`*Ipo{5z+2?V0}D4q-8dF;r#C z)U2haK=>?6m;EZ&M4Ail+#Z$ z$k={;Jy0wv3v_vL|9^Zuj1Zj~!>;PEXafJD2!&q~^F>$eoIsY|mM{A=jHokbN#H1g zm3KCVg!;`t(RYO$5^&p58f#Lf?T4s*K8C^csWg!wtVh)chT z)IOBKjk0#>F?8RT1XBj{-|cq;>ejo}%NPl*EeDYx%bAtII`| zDn)I__i44$t9&2sXPMib@eRK8R?YN>CvrAK!^WB?whXdQ*|iR1Qfm5o`FMXpiq5%_ ztNOnE)C-l|I>PQqExb3RpgT6()^($Yn?o+GOKpe)$ku&u(x9Uapxz6*m$k@ zq@J3bi`|KPKFMOI&FuyN-}ZJsG;#3AUg4(a6PiFVbqJG~mw;>g#G;FP-MV}|wncw; z4;YIbVudnHFdo|bV`h}|2XbJDhRn8w;W_(ZbtQi)WG<&O9{J7^0MTmLq7#j9Bz^Dm gT9Te;z8Xtzc2hn)d|==f1^>MzTe<9PV7Tf(02ct9s{jB1 literal 283347 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Π-2UrRem6nRxwkh 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�vpc7w|jToqwnz(-24 z0+#|CBIOth22+-+;lN0uvD!>Hdv%jQlGs~un>_~omUM|`GKcaDG9-zA8nZMzK4`rn zwZ4!P3tE>JmwNr*yosw5Zmd)7->_erk%cK?@7_HFeE||Om74UVFy+Sn z;C1&r?{|Zlz-U(G{wCui{mwU-eiKH_+KJ-Agx0zB?^JOXw%DA5n?1Nz!59R8oK zLuP4Rt6@Z8YFqmW?)u_lgDE$V?r}JQ@dnnuu>wP)XZw}jssGx0Qx8Xf?YVi_i!^fk zzl+hS$E;M?5z5#dM&A`_&KscMbQnAW1D|r63%~Q$FPuN1`r(IfiG#&`nBI@yaf$bV zvwU8r?xoKeB~14&f)=vjU&lT@Ow2#8V$PVVTA%cTJQl!aI-P-)6u@f$R@|B$1U=_> zS#Gv2mkncVm-TQ0*_ACocvzlj)r7(u!=G)}(APp+Ct+v$j=ugrS>os2+Zr)g-o zpEG|*j=^nKx}m_1*a}zF!(>+OX^45gO3l~pkO@xbvPKJ<_JHGK3635*+6gAki|m`oi%QKvGni;_k-e*X^;U!2Uj z?{dp4dhOKvXy(GwBlm%DPwy$$fh(?Lp#h2owjN%icfqO?d~+bi00I*rjk@a5sb(Ea zq^BcQw~|v`q9}6ON1{Rygtdoz=G_NrhH=TPGWM;E8m1ztTpcSsNEtNTVqHFnBw!KUVwT}*3~cQX zca(+#kPmA?Cw;|gPTSS|?yUgdn6_R6WGAajcHpZc%<}YyFS=oXuC5$*9A*;z*5OMB z6k`a~sXi(NQ(vR8-E}#>;G%V_@Dlk~``oY4z#oAtWq-H+Z)|oI8U3l%Y1k|7d&&~A zqjfvs@<)msHi$kG2-!{RUz>*53TKtq>RJ!4l^G!GG;e@DfK9FYp$c48kZS{y#;ML6 zOf{DPsyrl%+4&1>DOpH>E0(eZk0^qNMHJse#tmMVB+AaR5x8o#{ybb+4jB&yIN6rs2EaX?2L{ssYEooIJgF zJQgnZTJxgOp`(x{F7X@Gm)}(Yui}{U%?> znbIUMXHXcB7?gY^UOZH#|K2W5z4lK{&R#`%+abhaqbmDAjMx{=G{FWR%~ciI^}Sl*o{$$W41XEh8JqKF{B3s*W?+fvL4G%e!0lH~m9s zV(MSs52=$NDL8Bfoa0IzUI3vuPcXM-z5v+;NlE)1K{sI~(e*k)7p96>c|@3Pvn2bd z3V+l9Nt`Rr-v6Nm;=$Rl9;71deA-!#$^ebRbQcbq`%BOU+w8Hh-y9Cwhxdl2i>F5x zjcf<24BLR&^7J-)bu$q_m8+sOm8=;U!|WT34(~4C2%8hI5LJm0NiZo9nt8FCtdnGm6g%4h#LsVYA%o4y zKtr=C|9|$(l6wTz4&m>&uqaF*Elq#M1*VDW>sDz3{%Q+Q+0DpTqZ7rS-czK!^xsZa zXGyk9mMlF!OgQLvqxD43l~&fw*h^cRxXD`Ulf$~Fa-#i~b{2abJ5b@Z-qzWJS>Tkc z)7fcBT0Z`1tL3Z?r&SvxSsV4jN?xK@ma8pfV=*uaQy!7nHZ#Er{tUAP5N^OOH>>~E zQdtR;S-~|;sB?iAl4qo=2ywY#IDjd*Rl#})ZgI_~ z2^9BeKXYJ4#r8+{fA8M+UQOCOgwT2LSNM3%+w1zeXt*HUVVP#4&PAi- zOli4h*b+++6Y9E792o~Z4vh@Jdks8lKglBr|6L7Xicz2(O%y!%BRrRGwx3>Xc?&Mx zZ6LLW3%dG8f)ouODw|{#D`1r=*4?uvGfy~ES=G{ZM5#llM5vm51x5D6(1fe4p8SB$ zi#c%xOIc@DqkNu}>z$n|0a5?^*tHWh!Ylnwtomp?glw;TP;_7OJ3Yrk8N_e@l* zcy2p}BSH+DV074FEOPO$WrMq!(wrtpKB`NkG%3Zw98+~eLfP7ts7NIYir@B7*nEbt z$=n8@7?R`LF^_X@dk2gdX{q*>`3NChGI|p#=L!9IsU7iQn@<3TXqQ1}kIT>oRsU%i zY?AEnC>kXfkEjBH^`@hdvJP;ogNVE01@(@J0t2T(EDD$b2Cz2I-PAIXT>EaLa#*E3 zj3?@Dg|DHx()wG|5RL2E0H&o^6MP^CyvKrbw#f)09D!2Ds(T~>deh@k6Tiy;-gD#~ zYWMD@#ki2&(UKy!%Y~%l`_?Uewlb$BZ@8Rla-69MW(<<5%>f`wZVP2w<>LhdvSH*w zwM0?JB-j^mNx(CT!lh6U7hZG&nhF9qU^AtnZ;~;f1n<<_Gb2{k=uA!SN*XD(fs8jK z2%K#tVG1PSb3{Mw1k^m!#C_!(2~SVyw_DhQ=^?p$EE^gyaXUPIiYJPwyt+Qz_Z}06O47?{ASzW+?4wDJT34};y6t|noYm?>jRgfO3<2Ta59NO1GQ+;-!?v@t%P6e zI!tM{RmSA4T;jVy`j8wY-vrG;dARF4RbSd?UZAP(r0t@Go(v8K80n~R3N>?#(Ffm> z9sp(K=|Tj~XeS9d;@uM382HakHwcBnm0~f|(`;0ZwmuQkNxr`l$xt5LB^cSKbBNPXpL#U|X0K%jPA8U@*{rtM zET xb8lj~dJ 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 From f4212f7c7d4a23bfc5bd70d06e3e2e53d46310bf Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Mon, 17 Jun 2019 23:00:52 -0700 Subject: [PATCH 07/24] = Removed old test and improved image utils --- src/commands/CommandColor.java | 7 +++++++ src/dataStructures/Response.java | 7 +++++++ src/utils/ImageUtils.java | 17 +++++++++++++++-- test.png | Bin 58691 -> 0 bytes 4 files changed, 29 insertions(+), 2 deletions(-) delete mode 100644 test.png diff --git a/src/commands/CommandColor.java b/src/commands/CommandColor.java index 5bdd9e9..a74d3a4 100644 --- a/src/commands/CommandColor.java +++ b/src/commands/CommandColor.java @@ -46,18 +46,25 @@ public class CommandColor extends Command graphics.setColor(parsed); graphics.fillRect(0, 0, sideLength, sideLength); graphics.dispose(); + GlobalLog.Log("2"); + String tempFileName = ImageUtils.writeTempImageData(img, ".png"); File file = new File(tempFileName); + GlobalLog.Log("3"); + KittyEmbed response = new KittyEmbed(); response.title = "Color Name"; response.color = parsed; response.descriptionText = "`rgba` test\n`hex` test\n`hsv` test"; response.thumbnailURL = "attachment://" + tempFileName; + GlobalLog.Log("4"); + res.CallEmbed(response); ImageUtils.BlockingFileDelete(file); + GlobalLog.Log("5"); }; diff --git a/src/dataStructures/Response.java b/src/dataStructures/Response.java index 5ce4c3b..ab0fc03 100644 --- a/src/dataStructures/Response.java +++ b/src/dataStructures/Response.java @@ -35,9 +35,15 @@ public class Response EmbedBuilder embed = new EmbedBuilder(); if(embedInfo.title != null && !embedInfo.title.isEmpty()) + { embed.setTitle(embedInfo.title); + } else + { + // We have to set the title to at least something that's not empty. + // By defualt, this creates nothing really visible. embed.setTitle(" "); + } if(embedInfo.color != null) embed.setColor(embedInfo.color); @@ -61,6 +67,7 @@ public class Response String thumbPath = embedInfo.thumbnailURL; String thumbName = thumbPath.replace("attachment://", ""); + // Build the message and send if the file is valid MessageBuilder message = new MessageBuilder(); embed.setThumbnail(thumbPath); message.setEmbed(embed.build()); diff --git a/src/utils/ImageUtils.java b/src/utils/ImageUtils.java index 23dcbdc..7d8822a 100644 --- a/src/utils/ImageUtils.java +++ b/src/utils/ImageUtils.java @@ -22,13 +22,26 @@ public class ImageUtils String name = null; synchronized(uniqueID) { - name = "imagetempwriterutil_" + (uniqueID++) + extension; + String end = extension; + if(!extension.contains(".")) + { + end = "." + extension; + } + + name = "imagetempwriterutil_" + (uniqueID++) + end; } try { File outputfile = new File(name); - ImageIO.write(data, extension, outputfile); + extension = extension.replace(".", ""); + + boolean didWrite = ImageIO.write(data, extension, outputfile); + if(!didWrite) + { + GlobalLog.Error(LogFilter.Util, "Could not identify the writer for extension type '" + extension + "' - Did you accidentally include a period or other punctuation?"); + return null; + } return name; } diff --git a/test.png b/test.png deleted file mode 100644 index 3e5466761c1ea097930fc562cc1d82895963f4e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58691 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
p;_ zE08bOcfyqC@ic7AqN6&WZ_+eO9iqk8)z z@ripK<_ysC$fE=nF~sa!fwVI-E?KtPN!ln-L;yed1T%s=zQ%J_%9mXPL2U+8KQ(#^ ze$>StrkZ5C=-^QJ+YWF{H$9y+O1CF-2O>!w2q_kbD_JyECRpLW07t{lKVaH$Pnf*B zUgJtL!9IKfuh{emn+m)zAjWcxfTt)i|MeY_U(sT9XkCV&@tm{v4->_xEf!qgHj4Ce zl-IVAo^)5qj+d)!pX}y$4;KFsQY>$f_||$(Y%!_}c~niZ$zJdE4Q5pC^roHDwI1YZ zYYO%UxpXW{+nBCfcr^5`yu3Zrd`3~S(bGBI<#bWbvr_rxBb1t{vZA#yd8a8eUQ)&p zXaWf{mXi07fP(}`rn;{&e1j9P4S88oK@o3`86`CSjc2=m=n{?09gI(FH`jl6e5h?Q z^YBLVuJ1t;Bs8W%xF4)#G%u3uTaMe1Qjs+-oVB)wPlSqdEjeK1 zEezz0jy=aTtIAur=cyQHKL6#<-=r&gEzV@XB9~z7tWg)5`eK-s!E#qy}kYEi0q# zu(Mjh4JogG`4`4`DGaa84Qt`tH&+@Fps=?5cnQMZT7#uAeRmxOAJ0GzbnU=o^PvfI zStd%V?CI@*>`~+6p2ewqZrgkG*$hEYcA&J&QCqX6sqwS3IjuU)?O8_;KMEY8N4L@@ zis`C~M4tA0mT^t|FvB2oOl`C0uEJ`-R}NH>I5UGK`*Ipo{5z+2?V0}D4q-8dF;r#C z)U2haK=>?6m;EZ&M4Ail+#Z$ z$k={;Jy0wv3v_vL|9^Zuj1Zj~!>;PEXafJD2!&q~^F>$eoIsY|mM{A=jHokbN#H1g zm3KCVg!;`t(RYO$5^&p58f#Lf?T4s*K8C^csWg!wtVh)chT z)IOBKjk0#>F?8RT1XBj{-|cq;>ejo}%NPl*EeDYx%bAtII`| zDn)I__i44$t9&2sXPMib@eRK8R?YN>CvrAK!^WB?whXdQ*|iR1Qfm5o`FMXpiq5%_ ztNOnE)C-l|I>PQqExb3RpgT6()^($Yn?o+GOKpe)$ku&u(x9Uapxz6*m$k@ zq@J3bi`|KPKFMOI&FuyN-}ZJsG;#3AUg4(a6PiFVbqJG~mw;>g#G;FP-MV}|wncw; z4;YIbVudnHFdo|bV`h}|2XbJDhRn8w;W_(ZbtQi)WG<&O9{J7^0MTmLq7#j9Bz^Dm gT9Te;z8Xtzc2hn)d|==f1^>MzTe<9PV7Tf(02ct9s{jB1 From d54d839ab5170fd639b01aa781b2c3348fb7cfcb Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 18 Jun 2019 02:11:36 -0400 Subject: [PATCH 08/24] =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; From 4d6444f8ad9981f2159aa02171f8d0fb1a9ab939 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Mon, 17 Jun 2019 23:13:30 -0700 Subject: [PATCH 09/24] Auto stash before merge of "develop" and "origin/develop" --- src/commands/CommandColor.java | 18 +++--------- src/network/NetworkTheColorAPI.java | 45 +++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 14 deletions(-) create mode 100644 src/network/NetworkTheColorAPI.java diff --git a/src/commands/CommandColor.java b/src/commands/CommandColor.java index a74d3a4..e59bf6a 100644 --- a/src/commands/CommandColor.java +++ b/src/commands/CommandColor.java @@ -5,8 +5,6 @@ import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; -import javax.imageio.ImageIO; - import core.Command; import core.LocStrings; import dataStructures.KittyChannel; @@ -17,7 +15,6 @@ import dataStructures.KittyRole; import dataStructures.KittyUser; import dataStructures.Response; import dataStructures.UserInput; -import utils.GlobalLog; import utils.ImageUtils; public class CommandColor extends Command @@ -38,8 +35,6 @@ public class CommandColor extends Command float a = 1; Color parsed = new Color(r, g, b, a); - GlobalLog.Log("1"); - // Construct the image example file that we intend to display locally BufferedImage img = new BufferedImage(sideLength, sideLength, BufferedImage.TYPE_4BYTE_ABGR); Graphics2D graphics = img.createGraphics(); @@ -47,25 +42,20 @@ public class CommandColor extends Command graphics.fillRect(0, 0, sideLength, sideLength); graphics.dispose(); - GlobalLog.Log("2"); - String tempFileName = ImageUtils.writeTempImageData(img, ".png"); File file = new File(tempFileName); - - GlobalLog.Log("3"); - + + // Build the response KittyEmbed response = new KittyEmbed(); response.title = "Color Name"; response.color = parsed; response.descriptionText = "`rgba` test\n`hex` test\n`hsv` test"; response.thumbnailURL = "attachment://" + tempFileName; + response.footerText = "All percentages and values are rounded to the nearest whole number"; - GlobalLog.Log("4"); - + // Send then delete the temp local files res.CallEmbed(response); ImageUtils.BlockingFileDelete(file); - - GlobalLog.Log("5"); }; } diff --git a/src/network/NetworkTheColorAPI.java b/src/network/NetworkTheColorAPI.java new file mode 100644 index 0000000..5126f53 --- /dev/null +++ b/src/network/NetworkTheColorAPI.java @@ -0,0 +1,45 @@ +package network; + +import com.google.gson.Gson; + +// This class is designed to easily query and ask for responses from https://www.thecolorapi.com/. +// Unlike some of the other networking classes, the query is much more wrapped. +@SuppressWarnings("unused") +public class NetworkTheColorAPI +{ + private static final Gson jsonParser_ = new Gson(); + + private class tca_hsv + { + public int h; // 0-255 + public int s; // 0-100, % + public int v; // 0-100, % + } + + private class tca_hsl + { + public int h; // 0-255 + public int s; // 0-100, % + public int l; // 0-100, % + } + + private class tca_rgb + { + public int r; // 0-255 + public int g; // 0-255 + public int b; // 0-255 + } + + private class tca_hex + { + public String clean; // format xxxxxx, with no # + } + + private class tca_obj + { + public tca_hex hex; + public tca_rgb rgb; + public tca_hsl hsl; + public tca_hsv hsv; + } +} From d6aa2232c8463dc4a45a8f281527122074fa05d2 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Mon, 17 Jun 2019 23:20:47 -0700 Subject: [PATCH 10/24] = Classpath update --- .classpath | 2 +- src/network/NetworkTheColorAPI.java | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/.classpath b/.classpath index 148f4f1..9f1f1b2 100644 --- a/.classpath +++ b/.classpath @@ -14,6 +14,6 @@ - + diff --git a/src/network/NetworkTheColorAPI.java b/src/network/NetworkTheColorAPI.java index 5126f53..716a068 100644 --- a/src/network/NetworkTheColorAPI.java +++ b/src/network/NetworkTheColorAPI.java @@ -2,12 +2,15 @@ package network; import com.google.gson.Gson; +import network.NetworkE621.E621ResponseObject; +import utils.HTTPUtils; + // This class is designed to easily query and ask for responses from https://www.thecolorapi.com/. // Unlike some of the other networking classes, the query is much more wrapped. @SuppressWarnings("unused") public class NetworkTheColorAPI { - private static final Gson jsonParser_ = new Gson(); + private static final Gson jsonParser = new Gson(); private class tca_hsv { @@ -35,11 +38,19 @@ public class NetworkTheColorAPI public String clean; // format xxxxxx, with no # } - private class tca_obj + public class ColorData { public tca_hex hex; public tca_rgb rgb; public tca_hsl hsl; public tca_hsv hsv; } + + public ColorData LookupHex() + { + String response = HTTPUtils.SendPOSTRequest("https://www.thecolorapi.com/id?hex=24B1E0"); + + // Use class evaluation on an array of the response imageObject to be able to hold multiple. + ColorData imageObj = jsonParser.fromJson(response, ColorData.class); + } } From b495625d4c660d3cd03514c29eac6e8bfae8103b Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Mon, 17 Jun 2019 23:47:11 -0700 Subject: [PATCH 11/24] + Added first pass formatting --- src/commands/CommandColor.java | 24 ++++++++++++++----- src/network/NetworkTheColorAPI.java | 36 ++++++++++++++++++++--------- 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/src/commands/CommandColor.java b/src/commands/CommandColor.java index e59bf6a..3a86243 100644 --- a/src/commands/CommandColor.java +++ b/src/commands/CommandColor.java @@ -15,10 +15,14 @@ import dataStructures.KittyRole; import dataStructures.KittyUser; import dataStructures.Response; import dataStructures.UserInput; +import network.NetworkTheColorAPI; +import network.NetworkTheColorAPI.ColorData; import utils.ImageUtils; public class CommandColor extends Command { + private NetworkTheColorAPI theColorAPI = new NetworkTheColorAPI(); + public CommandColor(KittyRole level, KittyRating rating) { super(level, rating); } @Override @@ -27,12 +31,15 @@ public class CommandColor extends Command @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { + // First, parse out the color. + ColorData colorData = theColorAPI.LookupHex(input.args.trim()); + // Config int sideLength = 50; - float r = 209.0f/255; - float g = 74.0f/255; - float b = 153.0f/255; - float a = 1; + int r = colorData.rgb.r; + int g = colorData.rgb.g; + int b = colorData.rgb.b; + int a = 255; // Alpha not supported at this time Color parsed = new Color(r, g, b, a); // Construct the image example file that we intend to display locally @@ -47,9 +54,14 @@ public class CommandColor extends Command // Build the response KittyEmbed response = new KittyEmbed(); - response.title = "Color Name"; + response.title = colorData.name.value + (colorData.name.exact_match_name ? "" : " (ish)"); response.color = parsed; - response.descriptionText = "`rgba` test\n`hex` test\n`hsv` test"; + response.descriptionText = "```"; + response.descriptionText += "\nrgb: " + String.format("%1$03d", r) + " " + String.format("%1$03d", g) + " " + String.format("%1$03d", b); + response.descriptionText += "\nhsl: " + String.format("%1$03d", colorData.hsl.h) + " " + String.format("%1$02d", colorData.hsl.s) + "% " + String.format("%1$02d", colorData.hsl.l) + "%"; + response.descriptionText += "\nhsv: " + String.format("%1$03d", colorData.hsv.h) + " " + String.format("%1$02d", colorData.hsv.s) + "% " + String.format("%1$02d", colorData.hsv.v) + "%"; + response.descriptionText += "\nhex: #" + colorData.hex.clean; + response.descriptionText += "```"; response.thumbnailURL = "attachment://" + tempFileName; response.footerText = "All percentages and values are rounded to the nearest whole number"; diff --git a/src/network/NetworkTheColorAPI.java b/src/network/NetworkTheColorAPI.java index 716a068..333bff0 100644 --- a/src/network/NetworkTheColorAPI.java +++ b/src/network/NetworkTheColorAPI.java @@ -2,55 +2,69 @@ package network; import com.google.gson.Gson; -import network.NetworkE621.E621ResponseObject; import utils.HTTPUtils; // This class is designed to easily query and ask for responses from https://www.thecolorapi.com/. // Unlike some of the other networking classes, the query is much more wrapped. -@SuppressWarnings("unused") public class NetworkTheColorAPI { private static final Gson jsonParser = new Gson(); - private class tca_hsv + public class tca_name + { + public String value; // The name of the color in english + public boolean exact_match_name; // Is this exactly the name of the color searched for? + public String closest_named_hex; // The hex value of the actual value + } + + public class tca_hsv { public int h; // 0-255 public int s; // 0-100, % public int v; // 0-100, % } - private class tca_hsl + public class tca_hsl { public int h; // 0-255 public int s; // 0-100, % public int l; // 0-100, % } - private class tca_rgb + public class tca_rgb { public int r; // 0-255 public int g; // 0-255 public int b; // 0-255 } - private class tca_hex + public class tca_hex { public String clean; // format xxxxxx, with no # } public class ColorData { + public tca_name name; public tca_hex hex; public tca_rgb rgb; public tca_hsl hsl; public tca_hsv hsv; } - public ColorData LookupHex() + public ColorData LookupHex(String hex) { - String response = HTTPUtils.SendPOSTRequest("https://www.thecolorapi.com/id?hex=24B1E0"); - - // Use class evaluation on an array of the response imageObject to be able to hold multiple. - ColorData imageObj = jsonParser.fromJson(response, ColorData.class); + try + { + hex = hex.replace("#", ""); + String response = HTTPUtils.SendGETRequest("https://www.thecolorapi.com/id?hex=" + hex); + + ColorData data = jsonParser.fromJson(response, ColorData.class); + return data; + } + catch (Exception e) + { + return null; + } } } From 4946c6b4b832c01ebd7ad11370fa06982d34ca4f Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Mon, 17 Jun 2019 23:53:33 -0700 Subject: [PATCH 12/24] = Clean formatting and mild error handling --- src/commands/CommandColor.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/commands/CommandColor.java b/src/commands/CommandColor.java index 3a86243..53e221b 100644 --- a/src/commands/CommandColor.java +++ b/src/commands/CommandColor.java @@ -31,11 +31,18 @@ public class CommandColor extends Command @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - // First, parse out the color. + // First, try and parse out the color to make sure we can even get it. ColorData colorData = theColorAPI.LookupHex(input.args.trim()); + // Verify the color was even found + if(colorData == null) + { + res.Call(LocStrings.Stub("ColorNotSearchable")); + return; + } + // Config - int sideLength = 50; + int sideLength = 150; int r = colorData.rgb.r; int g = colorData.rgb.g; int b = colorData.rgb.b; @@ -63,7 +70,7 @@ public class CommandColor extends Command response.descriptionText += "\nhex: #" + colorData.hex.clean; response.descriptionText += "```"; response.thumbnailURL = "attachment://" + tempFileName; - response.footerText = "All percentages and values are rounded to the nearest whole number"; + response.footerText = "All percentages and values are rounded to the nearest whole number." + (colorData.name.exact_match_name ? "" : " " + colorData.name.value + " is actually " + colorData.name.closest_named_hex + "."); // Send then delete the temp local files res.CallEmbed(response); From 6f1881c65faa6762413889fbb7496470cd49e237 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Tue, 18 Jun 2019 01:01:40 -0700 Subject: [PATCH 13/24] + Added help and error text --- locStrings.config | 3 ++- src/commands/CommandColor.java | 18 +++++++++++------- src/network/NetworkTheColorAPI.java | 19 +++++++++++++++++++ 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/locStrings.config b/locStrings.config index f5358b0..d402f1e 100644 --- a/locStrings.config +++ b/locStrings.config @@ -97,7 +97,8 @@ CharacterSearchOneCharacter=I found one character with that name! \n Owner: %s | CharacterSearchInfo=Find a character with their name or Unique ID! `charactersearch name` or `charactersearch UniqueID` [CommandColor] -ColorInfo= +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 diff --git a/src/commands/CommandColor.java b/src/commands/CommandColor.java index 53e221b..2e50bd8 100644 --- a/src/commands/CommandColor.java +++ b/src/commands/CommandColor.java @@ -4,6 +4,7 @@ import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; +import java.text.DecimalFormat; import core.Command; import core.LocStrings; @@ -41,8 +42,8 @@ public class CommandColor extends Command return; } - // Config - int sideLength = 150; + // Set up the variables we'll be using based on the color, and get the color itself. + int sideLength = 80; // It's 80x80 because as far as I know, that's the size of a thumbnail in discord. int r = colorData.rgb.r; int g = colorData.rgb.g; int b = colorData.rgb.b; @@ -61,16 +62,19 @@ public class CommandColor extends Command // Build the response KittyEmbed response = new KittyEmbed(); + String postEntry = ", "; response.title = colorData.name.value + (colorData.name.exact_match_name ? "" : " (ish)"); response.color = parsed; response.descriptionText = "```"; - response.descriptionText += "\nrgb: " + String.format("%1$03d", r) + " " + String.format("%1$03d", g) + " " + String.format("%1$03d", b); - response.descriptionText += "\nhsl: " + String.format("%1$03d", colorData.hsl.h) + " " + String.format("%1$02d", colorData.hsl.s) + "% " + String.format("%1$02d", colorData.hsl.l) + "%"; - response.descriptionText += "\nhsv: " + String.format("%1$03d", colorData.hsv.h) + " " + String.format("%1$02d", colorData.hsv.s) + "% " + String.format("%1$02d", colorData.hsv.v) + "%"; - response.descriptionText += "\nhex: #" + colorData.hex.clean; + response.descriptionText += "\n hex: #" + colorData.hex.clean; + response.descriptionText += "\n rgb: " + String.format("%1$03d", r) + postEntry + String.format("%1$03d", g) + postEntry + String.format("%1$03d", b); + response.descriptionText += "\n hsl: " + String.format("%1$03d", colorData.hsl.h) + postEntry + String.format("%1$02d", colorData.hsl.s) + "%" + postEntry + String.format("%1$02d", colorData.hsl.l) + "%"; + response.descriptionText += "\n hsv: " + String.format("%1$03d", colorData.hsv.h) + postEntry + String.format("%1$02d", colorData.hsv.s) + "%" + postEntry + String.format("%1$02d", colorData.hsv.v) + "%"; + response.descriptionText += "\n xyz: " + String.format("%1$03d", colorData.XYZ.X) + postEntry + String.format("%1$03d", colorData.XYZ.Y) + postEntry + String.format("%1$03d", colorData.XYZ.Z); + response.descriptionText += "\ncmyk: " + String.format("%1$03d", colorData.cmyk.c) + postEntry + String.format("%1$03d", colorData.cmyk.m) + postEntry + String.format("%1$03d", colorData.cmyk.y) + postEntry + String.format("%1$03d", colorData.cmyk.k); response.descriptionText += "```"; response.thumbnailURL = "attachment://" + tempFileName; - response.footerText = "All percentages and values are rounded to the nearest whole number." + (colorData.name.exact_match_name ? "" : " " + colorData.name.value + " is actually " + colorData.name.closest_named_hex + "."); + response.footerText = "All percentages and values are rounded to the nearest whole number!" + (colorData.name.exact_match_name ? "" : " '" + colorData.name.value + "' is actually " + colorData.name.closest_named_hex + "."); // Send then delete the temp local files res.CallEmbed(response); diff --git a/src/network/NetworkTheColorAPI.java b/src/network/NetworkTheColorAPI.java index 333bff0..2bb9f0d 100644 --- a/src/network/NetworkTheColorAPI.java +++ b/src/network/NetworkTheColorAPI.java @@ -10,6 +10,23 @@ public class NetworkTheColorAPI { private static final Gson jsonParser = new Gson(); + public class tca_XYZ + { + // This is also known as the CIE 1931 colorspace. + // Value meanings: https://en.wikipedia.org/wiki/CIE_1931_color_space + public int X; + public int Y; + public int Z; + } + + public class tca_cymk + { + public int c; // 0-100 + public int m; // 0-100 + public int y; // 0-100 + public int k; // 0-100 + } + public class tca_name { public String value; // The name of the color in english @@ -50,6 +67,8 @@ public class NetworkTheColorAPI public tca_rgb rgb; public tca_hsl hsl; public tca_hsv hsv; + public tca_cymk cmyk; + public tca_XYZ XYZ; } public ColorData LookupHex(String hex) From 2a2b46a507b351608bbd2ef536e48e9361b1b031 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Wed, 19 Jun 2019 19:56:43 -0700 Subject: [PATCH 14/24] = Merge cleanup --- src/commands/CommandCharacterCreate.java | 10 +-- src/commands/CommandCharacterEditBio.java | 10 +-- src/commands/CommandCharacterEditName.java | 10 +-- src/commands/CommandCharacterEditURL.java | 10 +-- src/commands/CommandCharacterSearch.java | 12 ++-- src/commands/CommandColor.java | 7 +- src/commands/CommandLeaderboard.java | 6 +- src/core/ObjectBuilderFactory.java | 82 +++++++++++----------- src/main/Main.java | 12 ++-- 9 files changed, 79 insertions(+), 80 deletions(-) diff --git a/src/commands/CommandCharacterCreate.java b/src/commands/CommandCharacterCreate.java index 12a22c5..9a3b5c0 100644 --- a/src/commands/CommandCharacterCreate.java +++ b/src/commands/CommandCharacterCreate.java @@ -16,22 +16,22 @@ public class CommandCharacterCreate extends Command public CommandCharacterCreate(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("CharacterCreateInfo"); } + public String getHelpText() { return LocStrings.stub("CharacterCreateInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + 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")); + res.Call(LocStrings.stub("CharacterCreateNullInfo")); return; } if(CharacterManager.instance.addCharacter(user, info[0], info[1], info[2])) { - res.Call(LocStrings.Stub("CharacterCreateSuccess")); + res.Call(LocStrings.stub("CharacterCreateSuccess")); return; } - res.Call(LocStrings.Stub("CharacterCreateDuplicate")); + res.Call(LocStrings.stub("CharacterCreateDuplicate")); } } \ No newline at end of file diff --git a/src/commands/CommandCharacterEditBio.java b/src/commands/CommandCharacterEditBio.java index 52b57c7..7f37e75 100644 --- a/src/commands/CommandCharacterEditBio.java +++ b/src/commands/CommandCharacterEditBio.java @@ -10,10 +10,10 @@ public class CommandCharacterEditBio extends Command public CommandCharacterEditBio(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("CharacterEditBioInfo"); } + public String getHelpText() { return LocStrings.stub("CharacterEditBioInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { try { @@ -21,18 +21,18 @@ public class CommandCharacterEditBio extends Command } catch(Exception e) { - res.Call(LocStrings.Stub("CharacterEditBioNotValid")); + 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")); + res.Call(LocStrings.stub("CharacterEditBioSuccess")); } else { - res.Call(LocStrings.Stub("CharacterEditBioNotAuth")); + res.Call(LocStrings.stub("CharacterEditBioNotAuth")); } } } \ No newline at end of file diff --git a/src/commands/CommandCharacterEditName.java b/src/commands/CommandCharacterEditName.java index 0fadb64..92615e8 100644 --- a/src/commands/CommandCharacterEditName.java +++ b/src/commands/CommandCharacterEditName.java @@ -10,10 +10,10 @@ public class CommandCharacterEditName extends Command public CommandCharacterEditName(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("CharacterEditNameInfo"); } + public String getHelpText() { return LocStrings.stub("CharacterEditNameInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { try { @@ -21,18 +21,18 @@ public class CommandCharacterEditName extends Command } catch(Exception e) { - res.Call(LocStrings.Stub("CharacterEditNameNotValid")); + 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")); + res.Call(LocStrings.stub("CharacterEditNameSuccess")); } else { - res.Call(LocStrings.Stub("CharacterEditNameNotAuth")); + res.Call(LocStrings.stub("CharacterEditNameNotAuth")); } } } \ No newline at end of file diff --git a/src/commands/CommandCharacterEditURL.java b/src/commands/CommandCharacterEditURL.java index 887468a..387722a 100644 --- a/src/commands/CommandCharacterEditURL.java +++ b/src/commands/CommandCharacterEditURL.java @@ -10,10 +10,10 @@ public class CommandCharacterEditURL extends Command public CommandCharacterEditURL(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("CharacterEditURLInfo"); } + public String getHelpText() { return LocStrings.stub("CharacterEditURLInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { try { @@ -21,18 +21,18 @@ public class CommandCharacterEditURL extends Command } catch(Exception e) { - res.Call(LocStrings.Stub("CharacterEditURLNotValid")); + 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")); + res.Call(LocStrings.stub("CharacterEditURLSuccess")); } else { - res.Call(LocStrings.Stub("CharacterEditURLNotAuth")); + res.Call(LocStrings.stub("CharacterEditURLNotAuth")); } } } \ No newline at end of file diff --git a/src/commands/CommandCharacterSearch.java b/src/commands/CommandCharacterSearch.java index 56ce5a6..46b125b 100644 --- a/src/commands/CommandCharacterSearch.java +++ b/src/commands/CommandCharacterSearch.java @@ -12,29 +12,29 @@ public class CommandCharacterSearch extends Command public CommandCharacterSearch(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("CharacterSearchInfo"); } + public String getHelpText() { return LocStrings.stub("CharacterSearchInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + 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")); + res.Call(LocStrings.stub("CharacterSearchNoCharacterFound")); return; } if(characters.size() > 1) { - res.Call(LocStrings.Stub("CharacterSearchMultipleCharacterHeader")); + res.Call(LocStrings.stub("CharacterSearchMultipleCharacterHeader")); for(KittyCharacter character:characters) { - res.Call(String.format(LocStrings.Stub("CharacterSearchMultipleCharacter"), character.getName(), character.getOwner().name, character.getUID())); + 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())); + 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/commands/CommandColor.java b/src/commands/CommandColor.java index 2e50bd8..b16a371 100644 --- a/src/commands/CommandColor.java +++ b/src/commands/CommandColor.java @@ -4,7 +4,6 @@ import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; -import java.text.DecimalFormat; import core.Command; import core.LocStrings; @@ -27,10 +26,10 @@ public class CommandColor extends Command public CommandColor(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("ColorInfo"); } + public String getHelpText() { return LocStrings.stub("ColorInfo"); } @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { // First, try and parse out the color to make sure we can even get it. ColorData colorData = theColorAPI.LookupHex(input.args.trim()); @@ -38,7 +37,7 @@ public class CommandColor extends Command // Verify the color was even found if(colorData == null) { - res.Call(LocStrings.Stub("ColorNotSearchable")); + res.Call(LocStrings.stub("ColorNotSearchable")); return; } diff --git a/src/commands/CommandLeaderboard.java b/src/commands/CommandLeaderboard.java index cfc06af..f20c921 100644 --- a/src/commands/CommandLeaderboard.java +++ b/src/commands/CommandLeaderboard.java @@ -25,11 +25,11 @@ public class CommandLeaderboard extends Command public CommandLeaderboard(KittyRole roleLevel, KittyRating contentRating) { super(roleLevel, contentRating); } @Override - public String HelpText() { return LocStrings.Stub("LeaderboardInfo"); } + public String getHelpText() { return LocStrings.stub("LeaderboardInfo"); } // Called when the command is run! @Override - public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { // Start by force-flushing. We need to be up-to-date. GlobalLog.Log("Flushed database for " + DatabaseManager.instance.upkeep() + " items."); @@ -80,7 +80,7 @@ public class CommandLeaderboard extends Command final int listSize = 10; KittyEmbed embed = new KittyEmbed(); embed.color = Config.ColorDefault; - embed.title = LocStrings.Stub("LeaderboardTitle"); + embed.title = LocStrings.stub("LeaderboardTitle"); embed.descriptionText = ""; for(int i = 0; i < listSize && i < users.size(); ++i) diff --git a/src/core/ObjectBuilderFactory.java b/src/core/ObjectBuilderFactory.java index 2547801..ad93b09 100644 --- a/src/core/ObjectBuilderFactory.java +++ b/src/core/ObjectBuilderFactory.java @@ -325,7 +325,7 @@ public class ObjectBuilderFactory Member jdaMember = jdaGuild.getMemberById(userID); User jdaUser = jdaMember.getUser(); - user = ExtractUserByJDAUser(guildID, jdaMember.getNickname(), jdaUser.getId(), jdaUser.getAvatarUrl(), jdaUser.getId()); + user = extractUserByJDAUser(guildID, jdaMember.getNickname(), jdaUser.getId(), jdaUser.getAvatarUrl(), jdaUser.getId()); updateUser(user, jdaMember); } @@ -397,46 +397,46 @@ public class ObjectBuilderFactory manager.Register(LocCommands.stub("raffleend"), new CommandRaffleEnd(KittyRole.Mod, KittyRating.Safe)); // General - manager.Register(LocCommands.Stub("fetch"), new CommandFetch(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("guildroleadd"), new CommandGuildRoleAdd(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("guildroleremove"), new CommandGuildRoleRemove(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("teey"), new CommandTeey(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("perish, thenperish"), new CommandPerish(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("yeet"), new CommandYeet(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("ping"), new CommandPing(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("boop"), new CommandBoop(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("roll"), new CommandRoll(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("choose"), new CommandChoose(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("help"), new CommandHelp(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("info, about"), new CommandInfo(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("vote"), new CommandPollVote(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("results"), new CommandPollResults(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("showpoll"), new CommandPollShow(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("wolfram"), new CommandWolfram(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("c++, g++, cplus, cpp"), new CommandColiru(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("java, jdoodle"), new CommandJDoodle(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("beans"), new CommandBeansShow(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("role"), new CommandRole(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("bet"), new CommandBetBeans(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("map"), new CommandMap(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("rpstart"), new CommandRPStart(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("rpend"), new CommandRPEnd(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("tony, stark, dontfeelgood, dontfeelsogood"), new CommandStark(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("blur"), new CommandBlurry(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("eightball, 8ball"), new CommandEightBall(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("catch"), new CommandCatch(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("guildrolelist"), new CommandGuildRoleList(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.Stub("bethistory"), new CommandBetHistory(KittyRole.General, KittyRating.Safe)); - 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("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)); + manager.Register(LocCommands.stub("fetch"), new CommandFetch(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("guildroleadd"), new CommandGuildRoleAdd(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("guildroleremove"), new CommandGuildRoleRemove(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("teey"), new CommandTeey(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("perish, thenperish"), new CommandPerish(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("yeet"), new CommandYeet(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("ping"), new CommandPing(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("boop"), new CommandBoop(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("roll"), new CommandRoll(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("choose"), new CommandChoose(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("help"), new CommandHelp(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("info, about"), new CommandInfo(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("vote"), new CommandPollVote(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("results"), new CommandPollResults(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("showpoll"), new CommandPollShow(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("wolfram"), new CommandWolfram(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("c++, g++, cplus, cpp"), new CommandColiru(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("java, jdoodle"), new CommandJDoodle(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("beans"), new CommandBeansShow(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("role"), new CommandRole(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("bet"), new CommandBetBeans(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("map"), new CommandMap(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("rpstart"), new CommandRPStart(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("rpend"), new CommandRPEnd(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("tony, stark, dontfeelgood, dontfeelsogood"), new CommandStark(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("blur"), new CommandBlurry(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("eightball, 8ball"), new CommandEightBall(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("catch"), new CommandCatch(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("guildrolelist"), new CommandGuildRoleList(KittyRole.General, KittyRating.Safe)); + manager.Register(LocCommands.stub("bethistory"), new CommandBetHistory(KittyRole.General, KittyRating.Safe)); + 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("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)); return manager; } diff --git a/src/main/Main.java b/src/main/Main.java index 2647acf..3573590 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -48,13 +48,13 @@ public class Main extends ListenerAdapter { // Factory startup. The ordering is intentional. GlobalLog.initialize(); - databaseManager = ObjectBuilderFactory.ConstructDatabaseManager(); - commandEnabler = ObjectBuilderFactory.ConstructCommandEnabler(); - commandManager = ObjectBuilderFactory.ConstructCommandManager(commandEnabler); - stats = ObjectBuilderFactory.ConstructStats(commandManager); + databaseManager = ObjectBuilderFactory.constructDatabaseManager(); + commandEnabler = ObjectBuilderFactory.constructCommandEnabler(); + commandManager = ObjectBuilderFactory.constructCommandManager(commandEnabler); + stats = ObjectBuilderFactory.constructStats(commandManager); charManager = new CharacterManager(); - rpManager = ObjectBuilderFactory.ConstructRPManager(); - pluginManager = ObjectBuilderFactory.ConstructPluginManager(); + rpManager = ObjectBuilderFactory.constructRPManager(); + pluginManager = ObjectBuilderFactory.constructPluginManager(); // Bot startup kittyCore = ObjectBuilderFactory.ConstructKittyCore(); From 51e40610a2dbc7cb7eecc475174f0d9a7731985a Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Wed, 19 Jun 2019 20:03:16 -0700 Subject: [PATCH 15/24] = Benchmark subsystem formatting update --- src/commands/CommandBeansShow.java | 4 +-- src/commands/CommandBenchmark.java | 10 +++--- src/commands/CommandBetBeans.java | 12 +++---- src/commands/CommandBetHistory.java | 2 +- src/commands/CommandBoop.java | 6 ++-- src/commands/CommandChangeIndicator.java | 6 ++-- src/commands/CommandCharacterCreate.java | 6 ++-- src/commands/CommandCharacterEditBio.java | 6 ++-- src/commands/CommandCharacterEditName.java | 6 ++-- src/commands/CommandCharacterEditURL.java | 6 ++-- src/commands/CommandCharacterSearch.java | 8 ++--- src/commands/CommandChoose.java | 6 ++-- src/commands/CommandColiru.java | 4 +-- src/commands/CommandColor.java | 4 +-- src/commands/CommandCrouton.java | 2 +- src/commands/CommandDBFlush.java | 2 +- src/commands/CommandDBStats.java | 2 +- src/commands/CommandDoWork.java | 2 +- src/commands/CommandEightBall.java | 4 +-- src/commands/CommandFetch.java | 16 ++++----- src/commands/CommandGiveBeans.java | 6 ++-- src/commands/CommandGuildRoleAdd.java | 6 ++-- src/commands/CommandGuildRoleAllowed.java | 4 +-- src/commands/CommandGuildRoleList.java | 4 +-- src/commands/CommandGuildRoleNotAllowed.java | 4 +-- src/commands/CommandGuildRoleRemove.java | 6 ++-- src/commands/CommandHelp.java | 2 +- src/commands/CommandInfo.java | 2 +- src/commands/CommandInvite.java | 2 +- src/commands/CommandJDoodle.java | 4 +-- src/commands/CommandLeaderboard.java | 2 +- src/commands/CommandMap.java | 4 +-- src/commands/CommandPing.java | 2 +- src/commands/CommandPollManage.java | 6 ++-- src/commands/CommandPollResults.java | 2 +- src/commands/CommandPollShow.java | 4 +-- src/commands/CommandPollVote.java | 10 +++--- src/commands/CommandRPEnd.java | 4 +-- src/commands/CommandRPG.java | 6 ++-- src/commands/CommandRPStart.java | 2 +- src/commands/CommandRaffleEnd.java | 4 +-- src/commands/CommandRaffleJoin.java | 4 +-- src/commands/CommandRaffleSpin.java | 4 +-- src/commands/CommandRaffleStart.java | 4 +-- src/commands/CommandRating.java | 6 ++-- src/commands/CommandRole.java | 8 ++--- src/commands/CommandRoll.java | 4 +-- src/commands/CommandStats.java | 2 +- src/commands/CommandTradeBeans.java | 10 +++--- src/commands/CommandTweet.java | 4 +-- src/commands/CommandWolfram.java | 4 +-- .../benchmark/BenchmarkCommandCompare.java | 4 +-- .../benchmark/BenchmarkCommandFind.java | 4 +-- .../benchmark/BenchmarkCommandInfo.java | 6 ++-- src/core/benchmark/BenchmarkCommand.java | 2 +- src/core/benchmark/BenchmarkFormattable.java | 6 ++-- src/core/benchmark/BenchmarkFramework.java | 24 ++++++------- src/core/benchmark/BenchmarkLog.java | 6 ++-- src/core/benchmark/BenchmarkManager.java | 36 +++++++++---------- src/dataStructures/Response.java | 4 +-- src/main/Main.java | 2 +- 61 files changed, 172 insertions(+), 172 deletions(-) diff --git a/src/commands/CommandBeansShow.java b/src/commands/CommandBeansShow.java index 086fc6b..08db78f 100644 --- a/src/commands/CommandBeansShow.java +++ b/src/commands/CommandBeansShow.java @@ -15,7 +15,7 @@ public class CommandBeansShow extends Command public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.mentions == null) - res.Call(String.format(LocStrings.stub("BeansShowDisplay"), user.GetBeans())); + res.call(String.format(LocStrings.stub("BeansShowDisplay"), user.GetBeans())); else { String mentionedBeans = ""; @@ -23,7 +23,7 @@ public class CommandBeansShow extends Command { mentionedBeans += mentioned.name + " has " + mentioned.GetBeans() + " "; } - res.Call(String.format(LocStrings.stub("BeansShowMentioned"), mentionedBeans)); + res.call(String.format(LocStrings.stub("BeansShowMentioned"), mentionedBeans)); } } } diff --git a/src/commands/CommandBenchmark.java b/src/commands/CommandBenchmark.java index f727e9d..bdfaa03 100644 --- a/src/commands/CommandBenchmark.java +++ b/src/commands/CommandBenchmark.java @@ -30,27 +30,27 @@ public class CommandBenchmark extends Command @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - framework.Update(); + framework.update(); if(input.args == null || input.args.length() == 0) { String output = getHelpText(); - res.Call(output); + res.call(output); return; } BenchmarkFormattable commandOutput = null; synchronized(framework) { - commandOutput = framework.Run(input.args.trim()); + commandOutput = framework.run(input.args.trim()); } if(commandOutput == null) { - res.Call(LocStrings.stub("BenchmarkInvalid")); + res.call(LocStrings.stub("BenchmarkInvalid")); return; } - commandOutput.Call(res); + commandOutput.call(res); } } \ No newline at end of file diff --git a/src/commands/CommandBetBeans.java b/src/commands/CommandBetBeans.java index 24ef524..e8440af 100644 --- a/src/commands/CommandBetBeans.java +++ b/src/commands/CommandBetBeans.java @@ -24,19 +24,19 @@ public class CommandBetBeans extends Command bet = Integer.parseInt(input.args); if(bet < 50) { - res.Call(LocStrings.stub("BetBeansLowBet")); + res.call(LocStrings.stub("BetBeansLowBet")); return; } } catch (NumberFormatException e) { - res.Call(LocStrings.stub("BetBeansNotValid")); + res.call(LocStrings.stub("BetBeansNotValid")); return; } if(user.GetBeans() < bet) { - res.Call(LocStrings.stub("BetBeansNotEnough")); + res.call(LocStrings.stub("BetBeansNotEnough")); return; } @@ -47,18 +47,18 @@ public class CommandBetBeans extends Command win = getWinning(slots); - res.Call(call); + res.call(call); if(win == 0) { - res.Call(LocStrings.stub("BetBeansLose")); + res.call(LocStrings.stub("BetBeansLose")); guild.beans.Add(bet); return; } user.ChangeBeans(bet*win); guild.beans.Subtract(bet*win); - res.Call(String.format(LocStrings.stub("BetBeansWin"), "" + (bet*win))); + res.call(String.format(LocStrings.stub("BetBeansWin"), "" + (bet*win))); } private int getWinning(int [] slots) diff --git a/src/commands/CommandBetHistory.java b/src/commands/CommandBetHistory.java index a1d5c3d..700e26e 100644 --- a/src/commands/CommandBetHistory.java +++ b/src/commands/CommandBetHistory.java @@ -20,6 +20,6 @@ public class CommandBetHistory extends Command @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - res.Call(String.format(LocStrings.stub("BetHistoryOutput"), guild.beans.Get())); + res.call(String.format(LocStrings.stub("BetHistoryOutput"), guild.beans.Get())); } } \ No newline at end of file diff --git a/src/commands/CommandBoop.java b/src/commands/CommandBoop.java index c706e36..7abc488 100644 --- a/src/commands/CommandBoop.java +++ b/src/commands/CommandBoop.java @@ -69,14 +69,14 @@ public class CommandBoop extends Command if(input.mentions == null) { boopTracker.ApplyBoop(); - res.Call(String.format(LocStrings.stub("BoopStandard"), user.name, boopTracker.HowMany())); + res.call(String.format(LocStrings.stub("BoopStandard"), user.name, boopTracker.HowMany())); } else { if(input.mentions.length == 1) { boopTracker.ApplyBoop(); - res.Call(String.format(LocStrings.stub("BoopPerson"), user.name, input.mentions[0].name)); + res.call(String.format(LocStrings.stub("BoopPerson"), user.name, input.mentions[0].name)); return; } @@ -90,7 +90,7 @@ public class CommandBoop extends Command booped += "and " + input.mentions[i].name; } - res.Call(String.format(LocStrings.stub("BoopMultiple"), user.name, booped)); + res.call(String.format(LocStrings.stub("BoopMultiple"), user.name, booped)); } } } \ No newline at end of file diff --git a/src/commands/CommandChangeIndicator.java b/src/commands/CommandChangeIndicator.java index eff955f..c8786d6 100644 --- a/src/commands/CommandChangeIndicator.java +++ b/src/commands/CommandChangeIndicator.java @@ -17,18 +17,18 @@ public class CommandChangeIndicator extends Command String arg = input.args.trim(); if(arg.length() == 0) { - res.Call(LocStrings.stub("ChangeIndicatorError")); + res.call(LocStrings.stub("ChangeIndicatorError")); return; } String indicator = arg.substring(0, 1); if(indicator.charAt(0) == '\n' || indicator.charAt(0) == '\t' || indicator.charAt(0) == '\r') { - res.Call(LocStrings.Lookup("ChangeIndicatorError")); + res.call(LocStrings.Lookup("ChangeIndicatorError")); return; } guild.SetCommandIndicator(indicator); - res.Call(String.format(LocStrings.stub("ChangeIndicatorChanged"), guild.GetCommandIndicator())); + res.call(String.format(LocStrings.stub("ChangeIndicatorChanged"), guild.GetCommandIndicator())); } } diff --git a/src/commands/CommandCharacterCreate.java b/src/commands/CommandCharacterCreate.java index 9a3b5c0..53b0165 100644 --- a/src/commands/CommandCharacterCreate.java +++ b/src/commands/CommandCharacterCreate.java @@ -24,14 +24,14 @@ public class CommandCharacterCreate extends Command String [] info = input.args.split(","); if(info.length < 3) { - res.Call(LocStrings.stub("CharacterCreateNullInfo")); + res.call(LocStrings.stub("CharacterCreateNullInfo")); return; } if(CharacterManager.instance.addCharacter(user, info[0], info[1], info[2])) { - res.Call(LocStrings.stub("CharacterCreateSuccess")); + res.call(LocStrings.stub("CharacterCreateSuccess")); return; } - res.Call(LocStrings.stub("CharacterCreateDuplicate")); + res.call(LocStrings.stub("CharacterCreateDuplicate")); } } \ No newline at end of file diff --git a/src/commands/CommandCharacterEditBio.java b/src/commands/CommandCharacterEditBio.java index 7f37e75..f22c420 100644 --- a/src/commands/CommandCharacterEditBio.java +++ b/src/commands/CommandCharacterEditBio.java @@ -21,18 +21,18 @@ public class CommandCharacterEditBio extends Command } catch(Exception e) { - res.Call(LocStrings.stub("CharacterEditBioNotValid")); + 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")); + res.call(LocStrings.stub("CharacterEditBioSuccess")); } else { - res.Call(LocStrings.stub("CharacterEditBioNotAuth")); + res.call(LocStrings.stub("CharacterEditBioNotAuth")); } } } \ No newline at end of file diff --git a/src/commands/CommandCharacterEditName.java b/src/commands/CommandCharacterEditName.java index 92615e8..fcddca6 100644 --- a/src/commands/CommandCharacterEditName.java +++ b/src/commands/CommandCharacterEditName.java @@ -21,18 +21,18 @@ public class CommandCharacterEditName extends Command } catch(Exception e) { - res.Call(LocStrings.stub("CharacterEditNameNotValid")); + 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")); + res.call(LocStrings.stub("CharacterEditNameSuccess")); } else { - res.Call(LocStrings.stub("CharacterEditNameNotAuth")); + res.call(LocStrings.stub("CharacterEditNameNotAuth")); } } } \ No newline at end of file diff --git a/src/commands/CommandCharacterEditURL.java b/src/commands/CommandCharacterEditURL.java index 387722a..cabfcbc 100644 --- a/src/commands/CommandCharacterEditURL.java +++ b/src/commands/CommandCharacterEditURL.java @@ -21,18 +21,18 @@ public class CommandCharacterEditURL extends Command } catch(Exception e) { - res.Call(LocStrings.stub("CharacterEditURLNotValid")); + 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")); + res.call(LocStrings.stub("CharacterEditURLSuccess")); } else { - res.Call(LocStrings.stub("CharacterEditURLNotAuth")); + res.call(LocStrings.stub("CharacterEditURLNotAuth")); } } } \ No newline at end of file diff --git a/src/commands/CommandCharacterSearch.java b/src/commands/CommandCharacterSearch.java index 46b125b..aaf3698 100644 --- a/src/commands/CommandCharacterSearch.java +++ b/src/commands/CommandCharacterSearch.java @@ -20,21 +20,21 @@ public class CommandCharacterSearch extends Command ArrayList characters = CharacterManager.instance.searchCharacter(input.args); if(characters.size() < 1) { - res.Call(LocStrings.stub("CharacterSearchNoCharacterFound")); + res.call(LocStrings.stub("CharacterSearchNoCharacterFound")); return; } if(characters.size() > 1) { - res.Call(LocStrings.stub("CharacterSearchMultipleCharacterHeader")); + res.call(LocStrings.stub("CharacterSearchMultipleCharacterHeader")); for(KittyCharacter character:characters) { - res.Call(String.format(LocStrings.stub("CharacterSearchMultipleCharacter"), character.getName(), character.getOwner().name, character.getUID())); + 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())); + 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/commands/CommandChoose.java b/src/commands/CommandChoose.java index 1143985..fbcecb7 100644 --- a/src/commands/CommandChoose.java +++ b/src/commands/CommandChoose.java @@ -21,7 +21,7 @@ public class CommandChoose extends Command { if(input.args.trim().length() == 0) { - res.Call(Stats.instance.GetHelpText(input.key)); + res.call(Stats.instance.GetHelpText(input.key)); return; } @@ -29,10 +29,10 @@ public class CommandChoose extends Command if(choices.length == 1) { - res.Call(LocStrings.stub("ChooseOne")); + res.call(LocStrings.stub("ChooseOne")); return; } - res.Call(String.format(LocStrings.stub("ChooseChoice"), (choices[(int) (Math.random()*choices.length)]).toString())); + res.call(String.format(LocStrings.stub("ChooseChoice"), (choices[(int) (Math.random()*choices.length)]).toString())); } } diff --git a/src/commands/CommandColiru.java b/src/commands/CommandColiru.java index 0ca72d7..3091670 100644 --- a/src/commands/CommandColiru.java +++ b/src/commands/CommandColiru.java @@ -19,11 +19,11 @@ public class CommandColiru extends Command { if(input.args.trim().length() < 1) { - res.Call(LocStrings.stub("ColiruError")); + res.call(LocStrings.stub("ColiruError")); return; } - res.Call(compiler.compileCPlus(input.args)); + res.call(compiler.compileCPlus(input.args)); } } diff --git a/src/commands/CommandColor.java b/src/commands/CommandColor.java index b16a371..fd19c89 100644 --- a/src/commands/CommandColor.java +++ b/src/commands/CommandColor.java @@ -37,7 +37,7 @@ public class CommandColor extends Command // Verify the color was even found if(colorData == null) { - res.Call(LocStrings.stub("ColorNotSearchable")); + res.call(LocStrings.stub("ColorNotSearchable")); return; } @@ -76,7 +76,7 @@ public class CommandColor extends Command response.footerText = "All percentages and values are rounded to the nearest whole number!" + (colorData.name.exact_match_name ? "" : " '" + colorData.name.value + "' is actually " + colorData.name.closest_named_hex + "."); // Send then delete the temp local files - res.CallEmbed(response); + res.callEmbed(response); ImageUtils.BlockingFileDelete(file); }; diff --git a/src/commands/CommandCrouton.java b/src/commands/CommandCrouton.java index 3002fca..2ea8800 100644 --- a/src/commands/CommandCrouton.java +++ b/src/commands/CommandCrouton.java @@ -34,7 +34,7 @@ public class CommandCrouton extends Command embed.imageURL = "https://crouton.net/crouton.png"; - res.CallEmbed(embed); + res.callEmbed(embed); } } diff --git a/src/commands/CommandDBFlush.java b/src/commands/CommandDBFlush.java index 4f26c03..5c11278 100644 --- a/src/commands/CommandDBFlush.java +++ b/src/commands/CommandDBFlush.java @@ -30,6 +30,6 @@ public class CommandDBFlush extends Command embed.descriptionText = "**Dirty:** " + numUpdated; embed.color = Config.ColorDefault; - res.CallEmbed(embed); + res.callEmbed(embed); } } diff --git a/src/commands/CommandDBStats.java b/src/commands/CommandDBStats.java index 7a856e4..448f923 100644 --- a/src/commands/CommandDBStats.java +++ b/src/commands/CommandDBStats.java @@ -38,6 +38,6 @@ public class CommandDBStats extends Command embed.descriptionText += "**Last Upkeep:** " + dateFormat.format(DatabaseManager.instance.getLastUpkeep()) + " UTC-7"; embed.color = Config.ColorDefault; - res.CallEmbed(embed); + res.callEmbed(embed); } } diff --git a/src/commands/CommandDoWork.java b/src/commands/CommandDoWork.java index ad5e17a..840a2d1 100644 --- a/src/commands/CommandDoWork.java +++ b/src/commands/CommandDoWork.java @@ -28,6 +28,6 @@ public class CommandDoWork extends Command thispieceofshit += Math.log((double)i); } - res.Call(LocStrings.stub("DoWorkFinished")); + res.call(LocStrings.stub("DoWorkFinished")); } } \ No newline at end of file diff --git a/src/commands/CommandEightBall.java b/src/commands/CommandEightBall.java index f4253a3..531e49c 100644 --- a/src/commands/CommandEightBall.java +++ b/src/commands/CommandEightBall.java @@ -41,8 +41,8 @@ public class CommandEightBall extends Command public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args.trim().length() < 1) - res.Call(LocStrings.stub("EightBallError")); + res.call(LocStrings.stub("EightBallError")); - res.Call(answers[(int) (Math.random()*answers.length)]); + res.call(answers[(int) (Math.random()*answers.length)]); } } diff --git a/src/commands/CommandFetch.java b/src/commands/CommandFetch.java index 33518b0..25fee6f 100644 --- a/src/commands/CommandFetch.java +++ b/src/commands/CommandFetch.java @@ -27,30 +27,30 @@ public class CommandFetch extends Command switch(num) { case 1: - res.Call(String.format(LocStrings.stub("FetchBringBack"), emote)); + res.call(String.format(LocStrings.stub("FetchBringBack"), emote)); break; case 2: - res.Call(String.format(LocStrings.stub("FetchRunAway"))); + res.call(String.format(LocStrings.stub("FetchRunAway"))); break; case 3: - res.Call(String.format(LocStrings.stub("FetchBringBackWrong"), guild.emoji.get((int)(Math.random() * guild.emoji.size()) + 1))); + res.call(String.format(LocStrings.stub("FetchBringBackWrong"), guild.emoji.get((int)(Math.random() * guild.emoji.size()) + 1))); break; case 4: - res.Call(String.format(LocStrings.stub("FetchEat"), emote)); + res.call(String.format(LocStrings.stub("FetchEat"), emote)); break; case 5: - res.Call(String.format(LocStrings.stub("FetchCatchRun"), emote)); + res.call(String.format(LocStrings.stub("FetchCatchRun"), emote)); break; case 6: - res.Call(String.format(LocStrings.stub("FetchStare"), user.name)); + res.call(String.format(LocStrings.stub("FetchStare"), user.name)); break; default: - res.Call("" + num); + res.call("" + num); } } else { - res.Call(String.format(LocStrings.stub("FetchError"))); + res.call(String.format(LocStrings.stub("FetchError"))); System.out.println(emote); } } diff --git a/src/commands/CommandGiveBeans.java b/src/commands/CommandGiveBeans.java index 03fb3ff..32dd44c 100644 --- a/src/commands/CommandGiveBeans.java +++ b/src/commands/CommandGiveBeans.java @@ -17,7 +17,7 @@ public class CommandGiveBeans extends Command // First, make sure someone is mentioned if(input.mentions == null) { - res.Call(LocStrings.stub("GiveBeansNoneMentioned")); + res.call(LocStrings.stub("GiveBeansNoneMentioned")); return; } @@ -42,7 +42,7 @@ public class CommandGiveBeans extends Command // If there wasn't a number we could find, well, nothing we can do. if(beans == null) { - res.Call(LocStrings.stub("GiveBeansInvalid")); + res.call(LocStrings.stub("GiveBeansInvalid")); return; } @@ -50,7 +50,7 @@ public class CommandGiveBeans extends Command for(int i = 0; i < input.mentions.length; i++) { input.mentions[i].ChangeBeans(beans); - res.Call(String.format(LocStrings.stub("GiveBeansSuccess"), input.mentions[i].name, "" + beans)); + res.call(String.format(LocStrings.stub("GiveBeansSuccess"), input.mentions[i].name, "" + beans)); } } } diff --git a/src/commands/CommandGuildRoleAdd.java b/src/commands/CommandGuildRoleAdd.java index 605ca45..0943511 100644 --- a/src/commands/CommandGuildRoleAdd.java +++ b/src/commands/CommandGuildRoleAdd.java @@ -25,16 +25,16 @@ public class CommandGuildRoleAdd extends Command { if(guild.control.addRole(user.discordID, role)) { - res.Call(String.format(LocStrings.stub("GuildRoleAddSuccess"), role, user.name)); + res.call(String.format(LocStrings.stub("GuildRoleAddSuccess"), role, user.name)); } else { - res.Call(String.format(LocStrings.stub("GuildRoleAddFailure"), role, user.name)); + res.call(String.format(LocStrings.stub("GuildRoleAddFailure"), role, user.name)); } } else { - res.Call(String.format(LocStrings.stub("GuildRoleAddNotAllowed"), role)); + res.call(String.format(LocStrings.stub("GuildRoleAddNotAllowed"), role)); } } } \ No newline at end of file diff --git a/src/commands/CommandGuildRoleAllowed.java b/src/commands/CommandGuildRoleAllowed.java index 556f447..f8e7b29 100644 --- a/src/commands/CommandGuildRoleAllowed.java +++ b/src/commands/CommandGuildRoleAllowed.java @@ -27,12 +27,12 @@ public class CommandGuildRoleAllowed extends Command role = roles[i].trim(); if(guild.roleList.contains(role)) { - res.Call(LocStrings.stub("GuildRoleAllowedDuplicate")); + res.call(LocStrings.stub("GuildRoleAllowedDuplicate")); } else { guild.roleList.add(role); - res.Call(String.format(LocStrings.stub("GuildRoleAllowedSuccess"), role)); + res.call(String.format(LocStrings.stub("GuildRoleAllowedSuccess"), role)); } } } diff --git a/src/commands/CommandGuildRoleList.java b/src/commands/CommandGuildRoleList.java index 61dda19..7ac0c47 100644 --- a/src/commands/CommandGuildRoleList.java +++ b/src/commands/CommandGuildRoleList.java @@ -17,7 +17,7 @@ public class CommandGuildRoleList extends Command String roles = ""; if(guild.roleList.isEmpty()) { - res.Call(String.format(LocStrings.stub("GuildRoleListEmpty"))); + res.call(String.format(LocStrings.stub("GuildRoleListEmpty"))); return; } for(int i = 0; i < guild.roleList.size(); i++) @@ -26,6 +26,6 @@ public class CommandGuildRoleList extends Command roles += " and "; roles += guild.roleList.get(i); } - res.Call(String.format(LocStrings.stub("GuildRoleListOutput"), roles)); + res.call(String.format(LocStrings.stub("GuildRoleListOutput"), roles)); } } \ No newline at end of file diff --git a/src/commands/CommandGuildRoleNotAllowed.java b/src/commands/CommandGuildRoleNotAllowed.java index f6c21da..6e4c844 100644 --- a/src/commands/CommandGuildRoleNotAllowed.java +++ b/src/commands/CommandGuildRoleNotAllowed.java @@ -28,11 +28,11 @@ public class CommandGuildRoleNotAllowed extends Command if(guild.roleList.contains(role)) { guild.roleList.remove(role); - res.Call(LocStrings.stub("GuildRoleNotAllowedSuccess")); + res.call(LocStrings.stub("GuildRoleNotAllowedSuccess")); } else { - res.Call(String.format(LocStrings.stub("GuildRoleNotAllowedFailure"), role)); + res.call(String.format(LocStrings.stub("GuildRoleNotAllowedFailure"), role)); } } } diff --git a/src/commands/CommandGuildRoleRemove.java b/src/commands/CommandGuildRoleRemove.java index a5a5ba7..275af3a 100644 --- a/src/commands/CommandGuildRoleRemove.java +++ b/src/commands/CommandGuildRoleRemove.java @@ -25,16 +25,16 @@ public class CommandGuildRoleRemove extends Command { if(guild.control.removeRole(user.discordID, role)) { - res.Call(String.format(LocStrings.stub("GuildRoleRemoveSuccess"), role, user.name)); + res.call(String.format(LocStrings.stub("GuildRoleRemoveSuccess"), role, user.name)); } else { - res.Call(String.format(LocStrings.stub("GuildRoleRemoveFailure"), role, user.name)); + res.call(String.format(LocStrings.stub("GuildRoleRemoveFailure"), role, user.name)); } } else { - res.Call(String.format(LocStrings.stub("GuildRoleRemoveNotAllowed"), role)); + res.call(String.format(LocStrings.stub("GuildRoleRemoveNotAllowed"), role)); } } } \ No newline at end of file diff --git a/src/commands/CommandHelp.java b/src/commands/CommandHelp.java index 1fb6574..8c0a5e9 100644 --- a/src/commands/CommandHelp.java +++ b/src/commands/CommandHelp.java @@ -27,7 +27,7 @@ public class CommandHelp extends Command help = LocStrings.stub("HelpDisplay"); } - res.Call(help); + res.call(help); } } \ No newline at end of file diff --git a/src/commands/CommandInfo.java b/src/commands/CommandInfo.java index 3a53874..80bafcf 100644 --- a/src/commands/CommandInfo.java +++ b/src/commands/CommandInfo.java @@ -20,6 +20,6 @@ public class CommandInfo extends Command @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - res.Call(LocStrings.stub("InfoResponse")); + res.call(LocStrings.stub("InfoResponse")); } } \ No newline at end of file diff --git a/src/commands/CommandInvite.java b/src/commands/CommandInvite.java index 809ba1c..b6b576d 100644 --- a/src/commands/CommandInvite.java +++ b/src/commands/CommandInvite.java @@ -15,7 +15,7 @@ public class CommandInvite extends Command @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - res.Call("https://discordapp.com/oauth2/authorize?&client_id="+ Ref.CliID + res.call("https://discordapp.com/oauth2/authorize?&client_id="+ Ref.CliID +"&scope=bot&permissions=8"); } } \ No newline at end of file diff --git a/src/commands/CommandJDoodle.java b/src/commands/CommandJDoodle.java index b9b5b7a..6ba5149 100644 --- a/src/commands/CommandJDoodle.java +++ b/src/commands/CommandJDoodle.java @@ -19,10 +19,10 @@ public class CommandJDoodle extends Command { if(input.args.trim().length() < 1) { - res.Call(LocStrings.stub("JDoodleError")); + res.call(LocStrings.stub("JDoodleError")); return; } - res.Call(compiler.compileJava(input.args)); + res.call(compiler.compileJava(input.args)); } } diff --git a/src/commands/CommandLeaderboard.java b/src/commands/CommandLeaderboard.java index f20c921..2ed622e 100644 --- a/src/commands/CommandLeaderboard.java +++ b/src/commands/CommandLeaderboard.java @@ -94,6 +94,6 @@ public class CommandLeaderboard extends Command } // Write out embed result - res.CallEmbed(embed); + res.callEmbed(embed); } } diff --git a/src/commands/CommandMap.java b/src/commands/CommandMap.java index a0b88c5..575f7e9 100644 --- a/src/commands/CommandMap.java +++ b/src/commands/CommandMap.java @@ -60,7 +60,7 @@ public class CommandMap extends Command } catch(NumberFormatException e) { - res.Call(LocStrings.stub("MapInvalid")); + res.call(LocStrings.stub("MapInvalid")); return; } @@ -87,7 +87,7 @@ public class CommandMap extends Command body += "\n```"; // Send back the map - res.Call(header + body); + res.call(header + body); } // Verifies and appropriately caps input as necessary diff --git a/src/commands/CommandPing.java b/src/commands/CommandPing.java index d732ccf..a75e3e8 100644 --- a/src/commands/CommandPing.java +++ b/src/commands/CommandPing.java @@ -21,6 +21,6 @@ public class CommandPing extends Command @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - res.Call(LocStrings.stub("PingResponse")); + res.call(LocStrings.stub("PingResponse")); } } diff --git a/src/commands/CommandPollManage.java b/src/commands/CommandPollManage.java index 62b24f9..5d1d738 100644 --- a/src/commands/CommandPollManage.java +++ b/src/commands/CommandPollManage.java @@ -22,15 +22,15 @@ public class CommandPollManage extends Command switch(input.args.split(" ")[0].toLowerCase()) { case "start": - res.Call(guild.startPoll(input.args.substring(input.args.indexOf(' ')).trim())); + res.call(guild.startPoll(input.args.substring(input.args.indexOf(' ')).trim())); break; case "choice": - res.Call(guild.addChoiceToPoll(input.args.substring(input.args.indexOf(' ')).trim())); + res.call(guild.addChoiceToPoll(input.args.substring(input.args.indexOf(' ')).trim())); break; case "stop": - res.Call(guild.endPoll()); + res.call(guild.endPoll()); break; default: diff --git a/src/commands/CommandPollResults.java b/src/commands/CommandPollResults.java index e42ff94..b066d0d 100644 --- a/src/commands/CommandPollResults.java +++ b/src/commands/CommandPollResults.java @@ -31,6 +31,6 @@ public class CommandPollResults extends Command results += String.format(LocStrings.stub("PollResultsResponse"), votes.get(i).votes, votes.get(i).choice, (int)(((double)votes.get(i).votes) / ((double)totalVotes) * 100)); } - res.Call(results); + res.call(results); } } diff --git a/src/commands/CommandPollShow.java b/src/commands/CommandPollShow.java index cd332a3..6006dc1 100644 --- a/src/commands/CommandPollShow.java +++ b/src/commands/CommandPollShow.java @@ -15,7 +15,7 @@ public class CommandPollShow extends Command { if(!guild.polling) { - res.Call(LocStrings.stub("PollShowNoPoll")); + res.call(LocStrings.stub("PollShowNoPoll")); return; } String poll = String.format(LocStrings.stub("PollShowPoll"), guild.poll); @@ -25,6 +25,6 @@ public class CommandPollShow extends Command poll += (i+1) + ": `" + guild.choices.get(i).choice + "`\n"; } - res.Call(poll); + res.call(poll); } } diff --git a/src/commands/CommandPollVote.java b/src/commands/CommandPollVote.java index 2a9de19..17cfbde 100644 --- a/src/commands/CommandPollVote.java +++ b/src/commands/CommandPollVote.java @@ -17,7 +17,7 @@ public class CommandPollVote extends Command { if(guild.hasVoted.contains(user.uniqueID)) { - res.Call(LocStrings.stub("PollVoteAlreadyVoted")); + res.call(LocStrings.stub("PollVoteAlreadyVoted")); return; } try @@ -25,23 +25,23 @@ public class CommandPollVote extends Command int voteNum = Integer.parseInt(input.args)-1; if(voteNum >= guild.choices.size() || voteNum < 0) { - res.Call(String.format(LocStrings.stub("PollVoteNotValidVote"), voteNum)); + res.call(String.format(LocStrings.stub("PollVoteNotValidVote"), voteNum)); return; } KittyPoll polled = guild.choices.get(voteNum); polled.votes++; guild.hasVoted.add(user.uniqueID); - res.Call(LocStrings.stub("PollVoteSuccess") + " `" + polled.choice + "`!"); + res.call(LocStrings.stub("PollVoteSuccess") + " `" + polled.choice + "`!"); return; } catch (NumberFormatException e) { - res.Call(LocStrings.stub("PollVoteNotValidNumber")); + res.call(LocStrings.stub("PollVoteNotValidNumber")); return; } } - res.Call(LocStrings.stub("PollVoteNoPoll")); + res.call(LocStrings.stub("PollVoteNoPoll")); } } diff --git a/src/commands/CommandRPEnd.java b/src/commands/CommandRPEnd.java index 55ac7ee..b4500f9 100644 --- a/src/commands/CommandRPEnd.java +++ b/src/commands/CommandRPEnd.java @@ -33,11 +33,11 @@ public class CommandRPEnd extends Command if(sending != null) { res.CallFile(sending, "txt"); - res.Call(LocStrings.stub("RPEndFileOut")); + res.call(LocStrings.stub("RPEndFileOut")); } else { - res.Call(LocStrings.stub("RPEndError")); + res.call(LocStrings.stub("RPEndError")); } } } diff --git a/src/commands/CommandRPG.java b/src/commands/CommandRPG.java index 02a7bdc..2f46a65 100644 --- a/src/commands/CommandRPG.java +++ b/src/commands/CommandRPG.java @@ -32,7 +32,7 @@ public class CommandRPG extends Command if(input.args == null || input.args.length() == 0) { String output = getHelpText(); - res.Call(output); + res.call(output); return; } @@ -44,10 +44,10 @@ public class CommandRPG extends Command if(result == null) { - res.Call(LocStrings.stub("RPGInvalid")); + res.call(LocStrings.stub("RPGInvalid")); return; } - res.Call(result); + res.call(result); } } diff --git a/src/commands/CommandRPStart.java b/src/commands/CommandRPStart.java index 3e530bd..8ce235c 100644 --- a/src/commands/CommandRPStart.java +++ b/src/commands/CommandRPStart.java @@ -27,6 +27,6 @@ public class CommandRPStart extends Command } } - res.Call(RPManager.instance.newRP(channel, users)); + res.call(RPManager.instance.newRP(channel, users)); } } diff --git a/src/commands/CommandRaffleEnd.java b/src/commands/CommandRaffleEnd.java index 9da8b0f..804e3cf 100644 --- a/src/commands/CommandRaffleEnd.java +++ b/src/commands/CommandRaffleEnd.java @@ -22,11 +22,11 @@ public class CommandRaffleEnd extends Command { if(guild.endRaffle()) { - res.Call(LocStrings.stub("RaffleEndSuccess")); + res.call(LocStrings.stub("RaffleEndSuccess")); } else { - res.Call(LocStrings.stub("RaffleEndFailure")); + res.call(LocStrings.stub("RaffleEndFailure")); } } } \ No newline at end of file diff --git a/src/commands/CommandRaffleJoin.java b/src/commands/CommandRaffleJoin.java index 8676693..c216650 100644 --- a/src/commands/CommandRaffleJoin.java +++ b/src/commands/CommandRaffleJoin.java @@ -22,11 +22,11 @@ public class CommandRaffleJoin extends Command { if(guild.joinRaffle(user)) { - res.Call(LocStrings.stub("RaffleJoinSuccess")); + res.call(LocStrings.stub("RaffleJoinSuccess")); } else { - res.Call(LocStrings.stub("RaffleJoinFailure")); + res.call(LocStrings.stub("RaffleJoinFailure")); } } } diff --git a/src/commands/CommandRaffleSpin.java b/src/commands/CommandRaffleSpin.java index 888f2a7..3eefeb7 100644 --- a/src/commands/CommandRaffleSpin.java +++ b/src/commands/CommandRaffleSpin.java @@ -22,11 +22,11 @@ public class CommandRaffleSpin extends Command { try { - res.Call(String.format(LocStrings.stub("RaffleSpinSuccess"), guild.chooseRaffleWinner().name)); + res.call(String.format(LocStrings.stub("RaffleSpinSuccess"), guild.chooseRaffleWinner().name)); } catch(Exception e) { - res.Call(LocStrings.stub("RaffleSpinFailure")); + res.call(LocStrings.stub("RaffleSpinFailure")); } } } \ No newline at end of file diff --git a/src/commands/CommandRaffleStart.java b/src/commands/CommandRaffleStart.java index f29fd34..429c0d4 100644 --- a/src/commands/CommandRaffleStart.java +++ b/src/commands/CommandRaffleStart.java @@ -33,11 +33,11 @@ public class CommandRaffleStart extends Command if(guild.startRaffle(beanCost)) { - res.Call(String.format(LocStrings.stub("RaffleStartSuccess"), beanCost)); + res.call(String.format(LocStrings.stub("RaffleStartSuccess"), beanCost)); } else { - res.Call(LocStrings.stub("RaffleStartFailure")); + res.call(LocStrings.stub("RaffleStartFailure")); } } } diff --git a/src/commands/CommandRating.java b/src/commands/CommandRating.java index 3ad142e..1ae6171 100644 --- a/src/commands/CommandRating.java +++ b/src/commands/CommandRating.java @@ -55,11 +55,11 @@ public class CommandRating extends Command } if(newRating != null) - res.Call(LocStrings.stub("RatingChanged") + " " + newRating); + res.call(LocStrings.stub("RatingChanged") + " " + newRating); else - res.Call(LocStrings.stub("RatingInvalid") + " `" + input.args + "`"); + res.call(LocStrings.stub("RatingInvalid") + " `" + input.args + "`"); if(newRating.equals("Filtered")) - res.Call(LocStrings.stub("RatingWarning")); + res.call(LocStrings.stub("RatingWarning")); } } \ No newline at end of file diff --git a/src/commands/CommandRole.java b/src/commands/CommandRole.java index b569247..c7c83d1 100644 --- a/src/commands/CommandRole.java +++ b/src/commands/CommandRole.java @@ -16,13 +16,13 @@ public class CommandRole extends Command { if(input.args.isEmpty()) { - res.Call(LocStrings.stub("RoleStandardResponse") + " " + user.GetRole().name() + "!"); + res.call(LocStrings.stub("RoleStandardResponse") + " " + user.GetRole().name() + "!"); return; } if(user.GetRole().getValue() < KittyRole.Admin.getValue()) { - res.Call(String.format(LocStrings.stub("RoleError"), KittyRole.Admin.toString())); + res.call(String.format(LocStrings.stub("RoleError"), KittyRole.Admin.toString())); return; } @@ -46,7 +46,7 @@ public class CommandRole extends Command break; default: - res.Call(LocStrings.stub("RoleNeededRole")); + res.call(LocStrings.stub("RoleNeededRole")); return; } String users = ""; @@ -56,6 +56,6 @@ public class CommandRole extends Command users += input.mentions[i].name + " "; } - res.Call(String.format(LocStrings.stub("RoleChanged"), users, newRole.name())); + res.call(String.format(LocStrings.stub("RoleChanged"), users, newRole.name())); } } diff --git a/src/commands/CommandRoll.java b/src/commands/CommandRoll.java index 3525157..c76c850 100644 --- a/src/commands/CommandRoll.java +++ b/src/commands/CommandRoll.java @@ -23,11 +23,11 @@ public class CommandRoll extends Command { try { - res.Call(rollDice(input.args)); + res.call(rollDice(input.args)); } catch(Exception e) { - res.Call(LocStrings.stub("RollError")); + res.call(LocStrings.stub("RollError")); } } diff --git a/src/commands/CommandStats.java b/src/commands/CommandStats.java index 75c7fe2..dc4ff72 100644 --- a/src/commands/CommandStats.java +++ b/src/commands/CommandStats.java @@ -66,6 +66,6 @@ public class CommandStats extends Command + " Cached Users: " + userCount; out += "\n```"; - res.Call(out); + res.call(out); } } diff --git a/src/commands/CommandTradeBeans.java b/src/commands/CommandTradeBeans.java index e713ba9..a26fb7a 100644 --- a/src/commands/CommandTradeBeans.java +++ b/src/commands/CommandTradeBeans.java @@ -22,7 +22,7 @@ public class CommandTradeBeans extends Command { if(input.mentions == null) { - res.Call(LocStrings.stub("TradeBeansNoTargetError")); + res.call(LocStrings.stub("TradeBeansNoTargetError")); return; } @@ -32,25 +32,25 @@ public class CommandTradeBeans extends Command } catch (NumberFormatException e) { - res.Call(LocStrings.stub("TradeBeansIntParseError")); + res.call(LocStrings.stub("TradeBeansIntParseError")); return; } if(user.GetBeans() < beans) { - res.Call(LocStrings.stub("TradeBeansNotEnoughError")); + res.call(LocStrings.stub("TradeBeansNotEnoughError")); return; } if(beans < 0) { - res.Call(String.format(LocStrings.stub("TradeBeansStealingBeans"), user.name)); + res.call(String.format(LocStrings.stub("TradeBeansStealingBeans"), user.name)); user.ChangeBeans(-10); return; } input.mentions[0].ChangeBeans(beans); user.ChangeBeans(-beans); - res.Call(String.format(LocStrings.stub("TradeBeansSuccess"), user.name, input.mentions[0].name, beans)); + res.call(String.format(LocStrings.stub("TradeBeansSuccess"), user.name, input.mentions[0].name, beans)); } } diff --git a/src/commands/CommandTweet.java b/src/commands/CommandTweet.java index fd1669e..403eb0e 100644 --- a/src/commands/CommandTweet.java +++ b/src/commands/CommandTweet.java @@ -18,9 +18,9 @@ public class CommandTweet extends Command { //TODO: Figure out how to pass pictures correctly try { - res.Call(tweet.tweet(input.args)); + res.call(tweet.tweet(input.args)); } catch (Exception e) { - res.Call(LocStrings.stub("TweetError")); + res.call(LocStrings.stub("TweetError")); } } } diff --git a/src/commands/CommandWolfram.java b/src/commands/CommandWolfram.java index 9483a23..15f706c 100644 --- a/src/commands/CommandWolfram.java +++ b/src/commands/CommandWolfram.java @@ -21,7 +21,7 @@ public class CommandWolfram extends Command public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args == null || input.args.trim().length() == 0) - res.Call(LocStrings.stub("WolframNoArgs")); + res.call(LocStrings.stub("WolframNoArgs")); try { @@ -31,7 +31,7 @@ public class CommandWolfram extends Command } catch (IOException e) { - res.Call(LocStrings.stub("WolframError")); + res.call(LocStrings.stub("WolframError")); } } } \ No newline at end of file diff --git a/src/commands/benchmark/BenchmarkCommandCompare.java b/src/commands/benchmark/BenchmarkCommandCompare.java index 182a335..1052091 100644 --- a/src/commands/benchmark/BenchmarkCommandCompare.java +++ b/src/commands/benchmark/BenchmarkCommandCompare.java @@ -10,7 +10,7 @@ import core.benchmark.BenchmarkManager; public class BenchmarkCommandCompare extends BenchmarkCommand { - public BenchmarkFormattable OnRun(BenchmarkManager manager, BenchmarkInput input) + public BenchmarkFormattable onRun(BenchmarkManager manager, BenchmarkInput input) { final String lineDelimiter = "\n"; String output = ""; @@ -24,7 +24,7 @@ public class BenchmarkCommandCompare extends BenchmarkCommand if(i != 0) output += lineDelimiter; - List entries = manager.FindModel(inputSplit[i]); + List entries = manager.findModel(inputSplit[i]); if(entries.size() < 1) output += "Couldn't find any models containing `" + inputSplit[i] + "`!"; diff --git a/src/commands/benchmark/BenchmarkCommandFind.java b/src/commands/benchmark/BenchmarkCommandFind.java index f0ac9e8..ab01624 100644 --- a/src/commands/benchmark/BenchmarkCommandFind.java +++ b/src/commands/benchmark/BenchmarkCommandFind.java @@ -9,12 +9,12 @@ public class BenchmarkCommandFind extends BenchmarkCommand private final String lineDelimiter = "\n"; private final int listMax = 30; - public BenchmarkFormattable OnRun(BenchmarkManager manager, BenchmarkInput input) + public BenchmarkFormattable onRun(BenchmarkManager manager, BenchmarkInput input) { String output = ""; String searchString = input.value.trim(); - List entries = manager.FindModel(searchString); + List entries = manager.findModel(searchString); if(entries.size() > 0) { diff --git a/src/commands/benchmark/BenchmarkCommandInfo.java b/src/commands/benchmark/BenchmarkCommandInfo.java index 2fb7dae..08f2af2 100644 --- a/src/commands/benchmark/BenchmarkCommandInfo.java +++ b/src/commands/benchmark/BenchmarkCommandInfo.java @@ -74,16 +74,16 @@ public class BenchmarkCommandInfo extends BenchmarkCommand } @Override - public BenchmarkFormattable OnRun(BenchmarkManager manager, BenchmarkInput input) + public BenchmarkFormattable onRun(BenchmarkManager manager, BenchmarkInput input) { String searchString = input.value.trim(); long start = System.currentTimeMillis(); - List entries = manager.FindModel(searchString); + List entries = manager.findModel(searchString); if(entries.size() < 1) return new BenchmarkFormattable("Couldn't find any models containing `" + searchString + "`!"); - List sortedEntries = manager.EvaluateLevenshteinDistance(entries, searchString); + List sortedEntries = manager.evaluateLevenshteinDistance(entries, searchString); BenchmarkEntry entry = sortedEntries.get(0); KittyEmbed embed = FormatInfoEmbed(entry); diff --git a/src/core/benchmark/BenchmarkCommand.java b/src/core/benchmark/BenchmarkCommand.java index 96a808e..3b04e59 100644 --- a/src/core/benchmark/BenchmarkCommand.java +++ b/src/core/benchmark/BenchmarkCommand.java @@ -6,5 +6,5 @@ public abstract class BenchmarkCommand { } // OVERRIDE ME - public abstract BenchmarkFormattable OnRun(BenchmarkManager manager, BenchmarkInput input); + public abstract BenchmarkFormattable onRun(BenchmarkManager manager, BenchmarkInput input); } diff --git a/src/core/benchmark/BenchmarkFormattable.java b/src/core/benchmark/BenchmarkFormattable.java index 7c75bfa..f2462b8 100644 --- a/src/core/benchmark/BenchmarkFormattable.java +++ b/src/core/benchmark/BenchmarkFormattable.java @@ -30,11 +30,11 @@ public class BenchmarkFormattable this.resString = null; } - public void Call(Response res) + public void call(Response res) { if(resEmbed == null) - res.Call(resString); + res.call(resString); else - res.CallEmbed(resEmbed); + res.callEmbed(resEmbed); } } diff --git a/src/core/benchmark/BenchmarkFramework.java b/src/core/benchmark/BenchmarkFramework.java index 4c12c6e..948f7f1 100644 --- a/src/core/benchmark/BenchmarkFramework.java +++ b/src/core/benchmark/BenchmarkFramework.java @@ -16,43 +16,43 @@ public class BenchmarkFramework this.benchmarkManager = new BenchmarkManager(); this.benchmarkCommand = new HashMap(); - RegisterCommand("find", new BenchmarkCommandFind()); - RegisterCommand("compare", new BenchmarkCommandCompare()); - RegisterCommand("info", new BenchmarkCommandInfo()); + registerCommand("find", new BenchmarkCommandFind()); + registerCommand("compare", new BenchmarkCommandCompare()); + registerCommand("info", new BenchmarkCommandInfo()); } // Runs a command if possible. - public BenchmarkFormattable Run(String args) + public BenchmarkFormattable run(String args) { BenchmarkInput input = new BenchmarkInput(args); - return ExecuteCommand(input.key, input); + return executeCommand(input.key, input); } - public void Update() + public void update() { synchronized(benchmarkManager) { - benchmarkManager.Update(); + benchmarkManager.update(); } } // Registers a command - private void RegisterCommand(String commandName, BenchmarkCommand command) + private void registerCommand(String commandName, BenchmarkCommand command) { commandName = commandName.toLowerCase(); if(benchmarkCommand.put(commandName, command) != null) - BenchmarkLog.Log("Multiple registration of a command with name '" + commandName + "'!"); + BenchmarkLog.log("Multiple registration of a command with name '" + commandName + "'!"); - BenchmarkLog.Log("Registered " + commandName); + BenchmarkLog.log("Registered " + commandName); } // Executes a command with the specified name, and provides it with some extra input data. - private BenchmarkFormattable ExecuteCommand(String name, BenchmarkInput input) + private BenchmarkFormattable executeCommand(String name, BenchmarkInput input) { BenchmarkCommand command = benchmarkCommand.get(name.toLowerCase()); if(command != null && benchmarkManager != null) - return command.OnRun(benchmarkManager, input); + return command.onRun(benchmarkManager, input); return null; } diff --git a/src/core/benchmark/BenchmarkLog.java b/src/core/benchmark/BenchmarkLog.java index e9c1f98..999b5a0 100644 --- a/src/core/benchmark/BenchmarkLog.java +++ b/src/core/benchmark/BenchmarkLog.java @@ -5,7 +5,7 @@ import utils.GlobalLog; //Logging shim public class BenchmarkLog { - public static void Log(String str) { GlobalLog.Log("[Benchmark] " + str); } - public static void Warn(String str) { GlobalLog.Warn("[Benchmark] " + str); } - public static void Error(String str) { GlobalLog.Error(" [Benchmark] " + str); } + public static void log(String str) { GlobalLog.Log("[Benchmark] " + str); } + public static void warn(String str) { GlobalLog.Warn("[Benchmark] " + str); } + public static void error(String str) { GlobalLog.Error(" [Benchmark] " + str); } } diff --git a/src/core/benchmark/BenchmarkManager.java b/src/core/benchmark/BenchmarkManager.java index dcf5612..466454f 100644 --- a/src/core/benchmark/BenchmarkManager.java +++ b/src/core/benchmark/BenchmarkManager.java @@ -33,13 +33,13 @@ public class BenchmarkManager directoryMonitor = new DirectoryMonitor(directory); needsUpdate = false; - RebuildLookup(); + rebuildLookup(); - BenchmarkLog.Log("Took " + (Instant.now().toEpochMilli() - start) + " ms to load " + raw.size() + " entries from " + directoryMonitor.GetCurrentFiles().size() + " file" + (raw.size() > 1 ? "s" : "")); + BenchmarkLog.log("Took " + (Instant.now().toEpochMilli() - start) + " ms to load " + raw.size() + " entries from " + directoryMonitor.GetCurrentFiles().size() + " file" + (raw.size() > 1 ? "s" : "")); } // Rebuilds the files being monitored - public void RebuildLookup() + public void rebuildLookup() { long start = Instant.now().toEpochMilli(); @@ -66,17 +66,17 @@ public class BenchmarkManager } else { - BenchmarkLog.Warn("No " + extension + " files where found in " + directory); + BenchmarkLog.warn("No " + extension + " files where found in " + directory); } } long end = Instant.now().toEpochMilli(); - BenchmarkLog.Log("Rebuilt data in " + (end - start) + "ms"); + BenchmarkLog.log("Rebuilt data in " + (end - start) + "ms"); } // Re-evaluates and re-orders the input list based on the Levenshtein distance of the // original search and the contents of the provided list of benchmark entries. - public List EvaluateLevenshteinDistance(List entries, String search) + public List evaluateLevenshteinDistance(List entries, String search) { // Populate cost list with heuristic results List> cost = new ArrayList>(); @@ -86,7 +86,7 @@ public class BenchmarkManager BenchmarkEntry entry = entries.get(i); String entryString = entry.brand + " " + entry.model; - int heuristic = LevenshteinHeuristic(entryString, search, bestSoFar); + int heuristic = levenshteinHeuristic(entryString, search, bestSoFar); if(heuristic < bestSoFar) bestSoFar = heuristic; @@ -120,7 +120,7 @@ public class BenchmarkManager // Returns cost based on distance of characters from string. This is a kinda sloppy way // to do it, but because I keep tabs on the best result so far, it could be much worse. // Still chucks a lot - a non-recursive result w/ memoization would be best but this will do. - private int LevenshteinHeuristic(String str1, String str2, int bestSoFar) + private int levenshteinHeuristic(String str1, String str2, int bestSoFar) { int cost; @@ -139,15 +139,15 @@ public class BenchmarkManager if(distance > bestSoFar) return distance; - int s1 = LevenshteinHeuristic(str1.substring(1), str2, bestSoFar) + 1; - int s2 = LevenshteinHeuristic(str1, str2.substring(1), bestSoFar) + 1; - int s3 = LevenshteinHeuristic(str1.substring(1), str2.substring(1), bestSoFar) + cost; + int s1 = levenshteinHeuristic(str1.substring(1), str2, bestSoFar) + 1; + int s2 = levenshteinHeuristic(str1, str2.substring(1), bestSoFar) + 1; + int s3 = levenshteinHeuristic(str1.substring(1), str2.substring(1), bestSoFar) + cost; return min(new int[] {s1, s2, s3 }); } // Search for a substring in the model name - public List FindModel(String modelSubstr) + public List findModel(String modelSubstr) { long start = Instant.now().toEpochMilli(); List matching = new ArrayList(); @@ -161,27 +161,27 @@ public class BenchmarkManager matching.add(e); } - BenchmarkLog.Log("Searched for '" + searchSubstr + "' for "+ (Instant.now().toEpochMilli() - start) + "ms and found " + matching.size() + " entries."); + BenchmarkLog.log("Searched for '" + searchSubstr + "' for "+ (Instant.now().toEpochMilli() - start) + "ms and found " + matching.size() + " entries."); return matching; } // Keeps tabs on any changes of the files. - public void Update() + public void update() { needsUpdate = false; - directoryMonitor.Update(this::OnRescan, this::OnRescan, this::OnRescan); + directoryMonitor.Update(this::onRescan, this::onRescan, this::onRescan); if(needsUpdate) - RebuildLookup(); + rebuildLookup(); } // When a file is changed, handle it. - private void OnRescan(MonitoredFile file) + private void onRescan(MonitoredFile file) { // For now, all we need is to note that something was adjusted. if(file.path.toString().contains(extension)) { - BenchmarkLog.Log("File status changed: " + file.path); + BenchmarkLog.log("File status changed: " + file.path); needsUpdate = true; } } diff --git a/src/dataStructures/Response.java b/src/dataStructures/Response.java index ab0fc03..c46a6db 100644 --- a/src/dataStructures/Response.java +++ b/src/dataStructures/Response.java @@ -30,7 +30,7 @@ public class Response } // Builds a nicely formatted embedded message based on information provided - public void CallEmbed(KittyEmbed embedInfo) + public void callEmbed(KittyEmbed embedInfo) { EmbedBuilder embed = new EmbedBuilder(); @@ -89,7 +89,7 @@ public class Response } // Queues a standard text-based message response to the channel that issued the command. - public void Call(String toRespondWith) + public void call(String toRespondWith) { GlobalLog.Log(LogFilter.Response, "Sending response: " + toRespondWith); if(toRespondWith.length() > discordMessageMax) diff --git a/src/main/Main.java b/src/main/Main.java index 3573590..2e9dfbc 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -106,7 +106,7 @@ public class Main extends ListenerAdapter } else { - response.Call(pluginOutput.get(i)); + response.call(pluginOutput.get(i)); } } } From c7ad59b755c5ed3c9f2a5dd9d8980dd5fa28386b Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Wed, 19 Jun 2019 20:05:23 -0700 Subject: [PATCH 16/24] = Updated plugin subsystem formatting --- src/core/lua/Plugin.java | 8 ++++---- src/core/lua/PluginLog.java | 6 +++--- src/core/lua/PluginManager.java | 27 +++++++++++++++------------ src/core/lua/PluginStructure.java | 2 +- src/main/Main.java | 2 +- 5 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/core/lua/Plugin.java b/src/core/lua/Plugin.java index 86a959a..640d2eb 100644 --- a/src/core/lua/Plugin.java +++ b/src/core/lua/Plugin.java @@ -44,17 +44,17 @@ public class Plugin } catch (IOException e) { - PluginLog.Error(e.getMessage()); + PluginLog.error(e.getMessage()); } } - public List Run(String args, PluginUser user) + public List run(String args, PluginUser user) { try { List outputs = new Vector(); - LuaValue res = func_plugin.call(LuaValue.valueOf(args), user.AsLua()); + LuaValue res = func_plugin.call(LuaValue.valueOf(args), user.asLua()); if(!res.isnil()) { @@ -87,7 +87,7 @@ public class Plugin } catch(Exception e) { - PluginLog.Error("Failed to run plugin from file " + filepath); + PluginLog.error("Failed to run plugin from file " + filepath); } return null; diff --git a/src/core/lua/PluginLog.java b/src/core/lua/PluginLog.java index 8b084c7..b5e16fb 100644 --- a/src/core/lua/PluginLog.java +++ b/src/core/lua/PluginLog.java @@ -5,7 +5,7 @@ import utils.LogFilter; public class PluginLog { - public static void Log(String s) { GlobalLog.Log(LogFilter.Plugin, s); } - public static void Warn(String s) { GlobalLog.Warn(LogFilter.Plugin, s); } - public static void Error(String s) { GlobalLog.Error(LogFilter.Plugin, s); } + public static void log(String s) { GlobalLog.Log(LogFilter.Plugin, s); } + public static void warn(String s) { GlobalLog.Warn(LogFilter.Plugin, s); } + public static void error(String s) { GlobalLog.Error(LogFilter.Plugin, s); } } diff --git a/src/core/lua/PluginManager.java b/src/core/lua/PluginManager.java index 984728e..f77203c 100644 --- a/src/core/lua/PluginManager.java +++ b/src/core/lua/PluginManager.java @@ -12,14 +12,11 @@ import dataStructures.KittyUser; // Reads in, handles, and manipulates plugins. Plugins are loaded in the order they appear in the folder. public class PluginManager { + // Variables public final String pluginFolder; public ArrayList plugins; - - public void AddPlugin(Path path) - { - plugins.add(new Plugin(path)); - } + // Constructor public PluginManager(String folder) { this.pluginFolder = folder; @@ -29,30 +26,35 @@ public class PluginManager { try (Stream paths = Files.walk(Paths.get(this.pluginFolder))) { - paths.filter(Files::isRegularFile).forEach((path)->{ AddPlugin(path); }); + paths.filter(Files::isRegularFile).forEach((path)->{ addPlugin(path); }); } } catch(Exception e) { - PluginLog.Error(e.getMessage()); + PluginLog.error(e.getMessage()); } } + public void addPlugin(Path path) + { + plugins.add(new Plugin(path)); + } + // Runs all plugins, returning when it gets a non-nill result. If there // are mutliple strings returned in the list, it is because the plugin // that was run returned multiple strings. Since plugins don't stack, it // will never indicate that multiple // Otherwise, returns null. - public List RunAll(String input, KittyUser user) + public List runAll(String input, KittyUser user) { for(int i = 0; i < plugins.size(); ++i) { Plugin plugin = plugins.get(i); - List out = plugin.Run(input, new PluginUser(user)); + List out = plugin.run(input, new PluginUser(user)); if(out != null) { - PluginLog.Log("Executed plugin at " + plugin.filepath); + PluginLog.log("Executed plugin at " + plugin.filepath); return out; } } @@ -60,9 +62,10 @@ public class PluginManager return null; } - public void PrintAll() + // Dumps the contents of all plugins for debug + public void printAll() { for(int i = 0; i < plugins.size(); ++i) - PluginLog.Log(plugins.get(i).contents.toString()); + PluginLog.log(plugins.get(i).contents.toString()); } } diff --git a/src/core/lua/PluginStructure.java b/src/core/lua/PluginStructure.java index 989d46d..ca70848 100644 --- a/src/core/lua/PluginStructure.java +++ b/src/core/lua/PluginStructure.java @@ -5,7 +5,7 @@ import org.luaj.vm2.lib.jse.CoerceJavaToLua; public class PluginStructure { - public LuaValue AsLua() + public LuaValue asLua() { return CoerceJavaToLua.coerce(this); } diff --git a/src/main/Main.java b/src/main/Main.java index 2e9dfbc..3701297 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -94,7 +94,7 @@ public class Main extends ListenerAdapter // Run plugins right before invoking the commands but after all other setup. if(commandManager.InvokeOnNewThread(guild, channel, user, input, response) == false) { - List pluginOutput = pluginManager.RunAll(input.message, user); + List pluginOutput = pluginManager.runAll(input.message, user); if(pluginOutput != null && pluginOutput.size() > 0) { From b0292666c0bb3645e260b743f1fe9ae0cb0177f7 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Wed, 19 Jun 2019 21:16:51 -0700 Subject: [PATCH 17/24] = Updated response method naming and formatting --- src/commands/CommandBeansShow.java | 4 ++-- src/commands/CommandBenchmark.java | 4 ++-- src/commands/CommandBetBeans.java | 12 ++++++------ src/commands/CommandBetHistory.java | 2 +- src/commands/CommandBlurry.java | 2 +- src/commands/CommandBoop.java | 6 +++--- src/commands/CommandCatch.java | 2 +- src/commands/CommandChangeIndicator.java | 6 +++--- src/commands/CommandCharacterCreate.java | 6 +++--- src/commands/CommandCharacterEditBio.java | 6 +++--- src/commands/CommandCharacterEditName.java | 6 +++--- src/commands/CommandCharacterEditURL.java | 6 +++--- src/commands/CommandCharacterSearch.java | 8 ++++---- src/commands/CommandChoose.java | 6 +++--- src/commands/CommandColiru.java | 4 ++-- src/commands/CommandColor.java | 4 ++-- src/commands/CommandCrouton.java | 2 +- src/commands/CommandDBFlush.java | 2 +- src/commands/CommandDBStats.java | 2 +- src/commands/CommandDoWork.java | 2 +- src/commands/CommandEightBall.java | 4 ++-- src/commands/CommandFetch.java | 16 ++++++++-------- src/commands/CommandGiveBeans.java | 6 +++--- src/commands/CommandGuildRoleAdd.java | 6 +++--- src/commands/CommandGuildRoleAllowed.java | 4 ++-- src/commands/CommandGuildRoleList.java | 4 ++-- src/commands/CommandGuildRoleNotAllowed.java | 4 ++-- src/commands/CommandGuildRoleRemove.java | 6 +++--- src/commands/CommandHelp.java | 2 +- src/commands/CommandHelpBuilder.java | 2 +- src/commands/CommandInfo.java | 2 +- src/commands/CommandInvite.java | 2 +- src/commands/CommandJDoodle.java | 4 ++-- src/commands/CommandLeaderboard.java | 2 +- src/commands/CommandMap.java | 4 ++-- src/commands/CommandPerish.java | 2 +- src/commands/CommandPing.java | 2 +- src/commands/CommandPollManage.java | 6 +++--- src/commands/CommandPollResults.java | 2 +- src/commands/CommandPollShow.java | 4 ++-- src/commands/CommandPollVote.java | 10 +++++----- src/commands/CommandRPEnd.java | 6 +++--- src/commands/CommandRPG.java | 6 +++--- src/commands/CommandRPStart.java | 2 +- src/commands/CommandRaffleEnd.java | 4 ++-- src/commands/CommandRaffleJoin.java | 4 ++-- src/commands/CommandRaffleSpin.java | 4 ++-- src/commands/CommandRaffleStart.java | 4 ++-- src/commands/CommandRating.java | 6 +++--- src/commands/CommandRole.java | 8 ++++---- src/commands/CommandRoll.java | 4 ++-- src/commands/CommandShutdown.java | 4 ++-- src/commands/CommandStark.java | 2 +- src/commands/CommandStats.java | 7 ++++++- src/commands/CommandTeey.java | 2 +- src/commands/CommandTradeBeans.java | 10 +++++----- src/commands/CommandTweet.java | 4 ++-- src/commands/CommandWolfram.java | 6 +++--- src/commands/CommandYeet.java | 2 +- src/core/RPManager.java | 2 +- src/core/benchmark/BenchmarkFormattable.java | 4 ++-- src/dataStructures/Response.java | 15 +++++++-------- src/main/Main.java | 2 +- 63 files changed, 149 insertions(+), 145 deletions(-) diff --git a/src/commands/CommandBeansShow.java b/src/commands/CommandBeansShow.java index 08db78f..29145b2 100644 --- a/src/commands/CommandBeansShow.java +++ b/src/commands/CommandBeansShow.java @@ -15,7 +15,7 @@ public class CommandBeansShow extends Command public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.mentions == null) - res.call(String.format(LocStrings.stub("BeansShowDisplay"), user.GetBeans())); + res.send(String.format(LocStrings.stub("BeansShowDisplay"), user.GetBeans())); else { String mentionedBeans = ""; @@ -23,7 +23,7 @@ public class CommandBeansShow extends Command { mentionedBeans += mentioned.name + " has " + mentioned.GetBeans() + " "; } - res.call(String.format(LocStrings.stub("BeansShowMentioned"), mentionedBeans)); + res.send(String.format(LocStrings.stub("BeansShowMentioned"), mentionedBeans)); } } } diff --git a/src/commands/CommandBenchmark.java b/src/commands/CommandBenchmark.java index bdfaa03..bd66977 100644 --- a/src/commands/CommandBenchmark.java +++ b/src/commands/CommandBenchmark.java @@ -35,7 +35,7 @@ public class CommandBenchmark extends Command if(input.args == null || input.args.length() == 0) { String output = getHelpText(); - res.call(output); + res.send(output); return; } @@ -47,7 +47,7 @@ public class CommandBenchmark extends Command if(commandOutput == null) { - res.call(LocStrings.stub("BenchmarkInvalid")); + res.send(LocStrings.stub("BenchmarkInvalid")); return; } diff --git a/src/commands/CommandBetBeans.java b/src/commands/CommandBetBeans.java index e8440af..c826c78 100644 --- a/src/commands/CommandBetBeans.java +++ b/src/commands/CommandBetBeans.java @@ -24,19 +24,19 @@ public class CommandBetBeans extends Command bet = Integer.parseInt(input.args); if(bet < 50) { - res.call(LocStrings.stub("BetBeansLowBet")); + res.send(LocStrings.stub("BetBeansLowBet")); return; } } catch (NumberFormatException e) { - res.call(LocStrings.stub("BetBeansNotValid")); + res.send(LocStrings.stub("BetBeansNotValid")); return; } if(user.GetBeans() < bet) { - res.call(LocStrings.stub("BetBeansNotEnough")); + res.send(LocStrings.stub("BetBeansNotEnough")); return; } @@ -47,18 +47,18 @@ public class CommandBetBeans extends Command win = getWinning(slots); - res.call(call); + res.send(call); if(win == 0) { - res.call(LocStrings.stub("BetBeansLose")); + res.send(LocStrings.stub("BetBeansLose")); guild.beans.Add(bet); return; } user.ChangeBeans(bet*win); guild.beans.Subtract(bet*win); - res.call(String.format(LocStrings.stub("BetBeansWin"), "" + (bet*win))); + res.send(String.format(LocStrings.stub("BetBeansWin"), "" + (bet*win))); } private int getWinning(int [] slots) diff --git a/src/commands/CommandBetHistory.java b/src/commands/CommandBetHistory.java index 700e26e..3d351f9 100644 --- a/src/commands/CommandBetHistory.java +++ b/src/commands/CommandBetHistory.java @@ -20,6 +20,6 @@ public class CommandBetHistory extends Command @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - res.call(String.format(LocStrings.stub("BetHistoryOutput"), guild.beans.Get())); + res.send(String.format(LocStrings.stub("BetHistoryOutput"), guild.beans.Get())); } } \ No newline at end of file diff --git a/src/commands/CommandBlurry.java b/src/commands/CommandBlurry.java index 1e5e983..ff56a5b 100644 --- a/src/commands/CommandBlurry.java +++ b/src/commands/CommandBlurry.java @@ -61,7 +61,7 @@ public class CommandBlurry extends Command } postProcessed = new File(name); - res.CallFile(postProcessed, "png"); + res.sendFile(postProcessed, "png"); ImageUtils.BlockingFileDelete(preProcessed); ImageUtils.BlockingFileDelete(postProcessed); diff --git a/src/commands/CommandBoop.java b/src/commands/CommandBoop.java index 7abc488..5ab3ef2 100644 --- a/src/commands/CommandBoop.java +++ b/src/commands/CommandBoop.java @@ -69,14 +69,14 @@ public class CommandBoop extends Command if(input.mentions == null) { boopTracker.ApplyBoop(); - res.call(String.format(LocStrings.stub("BoopStandard"), user.name, boopTracker.HowMany())); + res.send(String.format(LocStrings.stub("BoopStandard"), user.name, boopTracker.HowMany())); } else { if(input.mentions.length == 1) { boopTracker.ApplyBoop(); - res.call(String.format(LocStrings.stub("BoopPerson"), user.name, input.mentions[0].name)); + res.send(String.format(LocStrings.stub("BoopPerson"), user.name, input.mentions[0].name)); return; } @@ -90,7 +90,7 @@ public class CommandBoop extends Command booped += "and " + input.mentions[i].name; } - res.call(String.format(LocStrings.stub("BoopMultiple"), user.name, booped)); + res.send(String.format(LocStrings.stub("BoopMultiple"), user.name, booped)); } } } \ No newline at end of file diff --git a/src/commands/CommandCatch.java b/src/commands/CommandCatch.java index 31f4b57..dd24612 100644 --- a/src/commands/CommandCatch.java +++ b/src/commands/CommandCatch.java @@ -62,7 +62,7 @@ public class CommandCatch extends Command } catchFile = new File (name); - res.CallFile(catchFile, "gif"); + res.sendFile(catchFile, "gif"); // Thread cleanup... ImageUtils.BlockingFileDelete(catchFile); diff --git a/src/commands/CommandChangeIndicator.java b/src/commands/CommandChangeIndicator.java index c8786d6..415f5df 100644 --- a/src/commands/CommandChangeIndicator.java +++ b/src/commands/CommandChangeIndicator.java @@ -17,18 +17,18 @@ public class CommandChangeIndicator extends Command String arg = input.args.trim(); if(arg.length() == 0) { - res.call(LocStrings.stub("ChangeIndicatorError")); + res.send(LocStrings.stub("ChangeIndicatorError")); return; } String indicator = arg.substring(0, 1); if(indicator.charAt(0) == '\n' || indicator.charAt(0) == '\t' || indicator.charAt(0) == '\r') { - res.call(LocStrings.Lookup("ChangeIndicatorError")); + res.send(LocStrings.Lookup("ChangeIndicatorError")); return; } guild.SetCommandIndicator(indicator); - res.call(String.format(LocStrings.stub("ChangeIndicatorChanged"), guild.GetCommandIndicator())); + res.send(String.format(LocStrings.stub("ChangeIndicatorChanged"), guild.GetCommandIndicator())); } } diff --git a/src/commands/CommandCharacterCreate.java b/src/commands/CommandCharacterCreate.java index 53b0165..0933ed8 100644 --- a/src/commands/CommandCharacterCreate.java +++ b/src/commands/CommandCharacterCreate.java @@ -24,14 +24,14 @@ public class CommandCharacterCreate extends Command String [] info = input.args.split(","); if(info.length < 3) { - res.call(LocStrings.stub("CharacterCreateNullInfo")); + res.send(LocStrings.stub("CharacterCreateNullInfo")); return; } if(CharacterManager.instance.addCharacter(user, info[0], info[1], info[2])) { - res.call(LocStrings.stub("CharacterCreateSuccess")); + res.send(LocStrings.stub("CharacterCreateSuccess")); return; } - res.call(LocStrings.stub("CharacterCreateDuplicate")); + res.send(LocStrings.stub("CharacterCreateDuplicate")); } } \ No newline at end of file diff --git a/src/commands/CommandCharacterEditBio.java b/src/commands/CommandCharacterEditBio.java index f22c420..4d42579 100644 --- a/src/commands/CommandCharacterEditBio.java +++ b/src/commands/CommandCharacterEditBio.java @@ -21,18 +21,18 @@ public class CommandCharacterEditBio extends Command } catch(Exception e) { - res.call(LocStrings.stub("CharacterEditBioNotValid")); + res.send(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")); + res.send(LocStrings.stub("CharacterEditBioSuccess")); } else { - res.call(LocStrings.stub("CharacterEditBioNotAuth")); + res.send(LocStrings.stub("CharacterEditBioNotAuth")); } } } \ No newline at end of file diff --git a/src/commands/CommandCharacterEditName.java b/src/commands/CommandCharacterEditName.java index fcddca6..7382331 100644 --- a/src/commands/CommandCharacterEditName.java +++ b/src/commands/CommandCharacterEditName.java @@ -21,18 +21,18 @@ public class CommandCharacterEditName extends Command } catch(Exception e) { - res.call(LocStrings.stub("CharacterEditNameNotValid")); + res.send(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")); + res.send(LocStrings.stub("CharacterEditNameSuccess")); } else { - res.call(LocStrings.stub("CharacterEditNameNotAuth")); + res.send(LocStrings.stub("CharacterEditNameNotAuth")); } } } \ No newline at end of file diff --git a/src/commands/CommandCharacterEditURL.java b/src/commands/CommandCharacterEditURL.java index cabfcbc..39a8c5c 100644 --- a/src/commands/CommandCharacterEditURL.java +++ b/src/commands/CommandCharacterEditURL.java @@ -21,18 +21,18 @@ public class CommandCharacterEditURL extends Command } catch(Exception e) { - res.call(LocStrings.stub("CharacterEditURLNotValid")); + res.send(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")); + res.send(LocStrings.stub("CharacterEditURLSuccess")); } else { - res.call(LocStrings.stub("CharacterEditURLNotAuth")); + res.send(LocStrings.stub("CharacterEditURLNotAuth")); } } } \ No newline at end of file diff --git a/src/commands/CommandCharacterSearch.java b/src/commands/CommandCharacterSearch.java index aaf3698..5cabef0 100644 --- a/src/commands/CommandCharacterSearch.java +++ b/src/commands/CommandCharacterSearch.java @@ -20,21 +20,21 @@ public class CommandCharacterSearch extends Command ArrayList characters = CharacterManager.instance.searchCharacter(input.args); if(characters.size() < 1) { - res.call(LocStrings.stub("CharacterSearchNoCharacterFound")); + res.send(LocStrings.stub("CharacterSearchNoCharacterFound")); return; } if(characters.size() > 1) { - res.call(LocStrings.stub("CharacterSearchMultipleCharacterHeader")); + res.send(LocStrings.stub("CharacterSearchMultipleCharacterHeader")); for(KittyCharacter character:characters) { - res.call(String.format(LocStrings.stub("CharacterSearchMultipleCharacter"), character.getName(), character.getOwner().name, character.getUID())); + res.send(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())); + res.send(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/commands/CommandChoose.java b/src/commands/CommandChoose.java index fbcecb7..30893a7 100644 --- a/src/commands/CommandChoose.java +++ b/src/commands/CommandChoose.java @@ -21,7 +21,7 @@ public class CommandChoose extends Command { if(input.args.trim().length() == 0) { - res.call(Stats.instance.GetHelpText(input.key)); + res.send(Stats.instance.GetHelpText(input.key)); return; } @@ -29,10 +29,10 @@ public class CommandChoose extends Command if(choices.length == 1) { - res.call(LocStrings.stub("ChooseOne")); + res.send(LocStrings.stub("ChooseOne")); return; } - res.call(String.format(LocStrings.stub("ChooseChoice"), (choices[(int) (Math.random()*choices.length)]).toString())); + res.send(String.format(LocStrings.stub("ChooseChoice"), (choices[(int) (Math.random()*choices.length)]).toString())); } } diff --git a/src/commands/CommandColiru.java b/src/commands/CommandColiru.java index 3091670..3973801 100644 --- a/src/commands/CommandColiru.java +++ b/src/commands/CommandColiru.java @@ -19,11 +19,11 @@ public class CommandColiru extends Command { if(input.args.trim().length() < 1) { - res.call(LocStrings.stub("ColiruError")); + res.send(LocStrings.stub("ColiruError")); return; } - res.call(compiler.compileCPlus(input.args)); + res.send(compiler.compileCPlus(input.args)); } } diff --git a/src/commands/CommandColor.java b/src/commands/CommandColor.java index fd19c89..a130c86 100644 --- a/src/commands/CommandColor.java +++ b/src/commands/CommandColor.java @@ -37,7 +37,7 @@ public class CommandColor extends Command // Verify the color was even found if(colorData == null) { - res.call(LocStrings.stub("ColorNotSearchable")); + res.send(LocStrings.stub("ColorNotSearchable")); return; } @@ -76,7 +76,7 @@ public class CommandColor extends Command response.footerText = "All percentages and values are rounded to the nearest whole number!" + (colorData.name.exact_match_name ? "" : " '" + colorData.name.value + "' is actually " + colorData.name.closest_named_hex + "."); // Send then delete the temp local files - res.callEmbed(response); + res.send(response); ImageUtils.BlockingFileDelete(file); }; diff --git a/src/commands/CommandCrouton.java b/src/commands/CommandCrouton.java index 2ea8800..7552b87 100644 --- a/src/commands/CommandCrouton.java +++ b/src/commands/CommandCrouton.java @@ -34,7 +34,7 @@ public class CommandCrouton extends Command embed.imageURL = "https://crouton.net/crouton.png"; - res.callEmbed(embed); + res.send(embed); } } diff --git a/src/commands/CommandDBFlush.java b/src/commands/CommandDBFlush.java index 5c11278..982c0fa 100644 --- a/src/commands/CommandDBFlush.java +++ b/src/commands/CommandDBFlush.java @@ -30,6 +30,6 @@ public class CommandDBFlush extends Command embed.descriptionText = "**Dirty:** " + numUpdated; embed.color = Config.ColorDefault; - res.callEmbed(embed); + res.send(embed); } } diff --git a/src/commands/CommandDBStats.java b/src/commands/CommandDBStats.java index 448f923..de1fcd5 100644 --- a/src/commands/CommandDBStats.java +++ b/src/commands/CommandDBStats.java @@ -38,6 +38,6 @@ public class CommandDBStats extends Command embed.descriptionText += "**Last Upkeep:** " + dateFormat.format(DatabaseManager.instance.getLastUpkeep()) + " UTC-7"; embed.color = Config.ColorDefault; - res.callEmbed(embed); + res.send(embed); } } diff --git a/src/commands/CommandDoWork.java b/src/commands/CommandDoWork.java index 840a2d1..1cbc063 100644 --- a/src/commands/CommandDoWork.java +++ b/src/commands/CommandDoWork.java @@ -28,6 +28,6 @@ public class CommandDoWork extends Command thispieceofshit += Math.log((double)i); } - res.call(LocStrings.stub("DoWorkFinished")); + res.send(LocStrings.stub("DoWorkFinished")); } } \ No newline at end of file diff --git a/src/commands/CommandEightBall.java b/src/commands/CommandEightBall.java index 531e49c..2b97f79 100644 --- a/src/commands/CommandEightBall.java +++ b/src/commands/CommandEightBall.java @@ -41,8 +41,8 @@ public class CommandEightBall extends Command public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args.trim().length() < 1) - res.call(LocStrings.stub("EightBallError")); + res.send(LocStrings.stub("EightBallError")); - res.call(answers[(int) (Math.random()*answers.length)]); + res.send(answers[(int) (Math.random()*answers.length)]); } } diff --git a/src/commands/CommandFetch.java b/src/commands/CommandFetch.java index 25fee6f..29c578a 100644 --- a/src/commands/CommandFetch.java +++ b/src/commands/CommandFetch.java @@ -27,30 +27,30 @@ public class CommandFetch extends Command switch(num) { case 1: - res.call(String.format(LocStrings.stub("FetchBringBack"), emote)); + res.send(String.format(LocStrings.stub("FetchBringBack"), emote)); break; case 2: - res.call(String.format(LocStrings.stub("FetchRunAway"))); + res.send(String.format(LocStrings.stub("FetchRunAway"))); break; case 3: - res.call(String.format(LocStrings.stub("FetchBringBackWrong"), guild.emoji.get((int)(Math.random() * guild.emoji.size()) + 1))); + res.send(String.format(LocStrings.stub("FetchBringBackWrong"), guild.emoji.get((int)(Math.random() * guild.emoji.size()) + 1))); break; case 4: - res.call(String.format(LocStrings.stub("FetchEat"), emote)); + res.send(String.format(LocStrings.stub("FetchEat"), emote)); break; case 5: - res.call(String.format(LocStrings.stub("FetchCatchRun"), emote)); + res.send(String.format(LocStrings.stub("FetchCatchRun"), emote)); break; case 6: - res.call(String.format(LocStrings.stub("FetchStare"), user.name)); + res.send(String.format(LocStrings.stub("FetchStare"), user.name)); break; default: - res.call("" + num); + res.send("" + num); } } else { - res.call(String.format(LocStrings.stub("FetchError"))); + res.send(String.format(LocStrings.stub("FetchError"))); System.out.println(emote); } } diff --git a/src/commands/CommandGiveBeans.java b/src/commands/CommandGiveBeans.java index 32dd44c..bc50af4 100644 --- a/src/commands/CommandGiveBeans.java +++ b/src/commands/CommandGiveBeans.java @@ -17,7 +17,7 @@ public class CommandGiveBeans extends Command // First, make sure someone is mentioned if(input.mentions == null) { - res.call(LocStrings.stub("GiveBeansNoneMentioned")); + res.send(LocStrings.stub("GiveBeansNoneMentioned")); return; } @@ -42,7 +42,7 @@ public class CommandGiveBeans extends Command // If there wasn't a number we could find, well, nothing we can do. if(beans == null) { - res.call(LocStrings.stub("GiveBeansInvalid")); + res.send(LocStrings.stub("GiveBeansInvalid")); return; } @@ -50,7 +50,7 @@ public class CommandGiveBeans extends Command for(int i = 0; i < input.mentions.length; i++) { input.mentions[i].ChangeBeans(beans); - res.call(String.format(LocStrings.stub("GiveBeansSuccess"), input.mentions[i].name, "" + beans)); + res.send(String.format(LocStrings.stub("GiveBeansSuccess"), input.mentions[i].name, "" + beans)); } } } diff --git a/src/commands/CommandGuildRoleAdd.java b/src/commands/CommandGuildRoleAdd.java index 0943511..b4d212e 100644 --- a/src/commands/CommandGuildRoleAdd.java +++ b/src/commands/CommandGuildRoleAdd.java @@ -25,16 +25,16 @@ public class CommandGuildRoleAdd extends Command { if(guild.control.addRole(user.discordID, role)) { - res.call(String.format(LocStrings.stub("GuildRoleAddSuccess"), role, user.name)); + res.send(String.format(LocStrings.stub("GuildRoleAddSuccess"), role, user.name)); } else { - res.call(String.format(LocStrings.stub("GuildRoleAddFailure"), role, user.name)); + res.send(String.format(LocStrings.stub("GuildRoleAddFailure"), role, user.name)); } } else { - res.call(String.format(LocStrings.stub("GuildRoleAddNotAllowed"), role)); + res.send(String.format(LocStrings.stub("GuildRoleAddNotAllowed"), role)); } } } \ No newline at end of file diff --git a/src/commands/CommandGuildRoleAllowed.java b/src/commands/CommandGuildRoleAllowed.java index f8e7b29..cc40bb2 100644 --- a/src/commands/CommandGuildRoleAllowed.java +++ b/src/commands/CommandGuildRoleAllowed.java @@ -27,12 +27,12 @@ public class CommandGuildRoleAllowed extends Command role = roles[i].trim(); if(guild.roleList.contains(role)) { - res.call(LocStrings.stub("GuildRoleAllowedDuplicate")); + res.send(LocStrings.stub("GuildRoleAllowedDuplicate")); } else { guild.roleList.add(role); - res.call(String.format(LocStrings.stub("GuildRoleAllowedSuccess"), role)); + res.send(String.format(LocStrings.stub("GuildRoleAllowedSuccess"), role)); } } } diff --git a/src/commands/CommandGuildRoleList.java b/src/commands/CommandGuildRoleList.java index 7ac0c47..f23a30e 100644 --- a/src/commands/CommandGuildRoleList.java +++ b/src/commands/CommandGuildRoleList.java @@ -17,7 +17,7 @@ public class CommandGuildRoleList extends Command String roles = ""; if(guild.roleList.isEmpty()) { - res.call(String.format(LocStrings.stub("GuildRoleListEmpty"))); + res.send(String.format(LocStrings.stub("GuildRoleListEmpty"))); return; } for(int i = 0; i < guild.roleList.size(); i++) @@ -26,6 +26,6 @@ public class CommandGuildRoleList extends Command roles += " and "; roles += guild.roleList.get(i); } - res.call(String.format(LocStrings.stub("GuildRoleListOutput"), roles)); + res.send(String.format(LocStrings.stub("GuildRoleListOutput"), roles)); } } \ No newline at end of file diff --git a/src/commands/CommandGuildRoleNotAllowed.java b/src/commands/CommandGuildRoleNotAllowed.java index 6e4c844..d95c440 100644 --- a/src/commands/CommandGuildRoleNotAllowed.java +++ b/src/commands/CommandGuildRoleNotAllowed.java @@ -28,11 +28,11 @@ public class CommandGuildRoleNotAllowed extends Command if(guild.roleList.contains(role)) { guild.roleList.remove(role); - res.call(LocStrings.stub("GuildRoleNotAllowedSuccess")); + res.send(LocStrings.stub("GuildRoleNotAllowedSuccess")); } else { - res.call(String.format(LocStrings.stub("GuildRoleNotAllowedFailure"), role)); + res.send(String.format(LocStrings.stub("GuildRoleNotAllowedFailure"), role)); } } } diff --git a/src/commands/CommandGuildRoleRemove.java b/src/commands/CommandGuildRoleRemove.java index 275af3a..32ab8e6 100644 --- a/src/commands/CommandGuildRoleRemove.java +++ b/src/commands/CommandGuildRoleRemove.java @@ -25,16 +25,16 @@ public class CommandGuildRoleRemove extends Command { if(guild.control.removeRole(user.discordID, role)) { - res.call(String.format(LocStrings.stub("GuildRoleRemoveSuccess"), role, user.name)); + res.send(String.format(LocStrings.stub("GuildRoleRemoveSuccess"), role, user.name)); } else { - res.call(String.format(LocStrings.stub("GuildRoleRemoveFailure"), role, user.name)); + res.send(String.format(LocStrings.stub("GuildRoleRemoveFailure"), role, user.name)); } } else { - res.call(String.format(LocStrings.stub("GuildRoleRemoveNotAllowed"), role)); + res.send(String.format(LocStrings.stub("GuildRoleRemoveNotAllowed"), role)); } } } \ No newline at end of file diff --git a/src/commands/CommandHelp.java b/src/commands/CommandHelp.java index 8c0a5e9..0340e2e 100644 --- a/src/commands/CommandHelp.java +++ b/src/commands/CommandHelp.java @@ -27,7 +27,7 @@ public class CommandHelp extends Command help = LocStrings.stub("HelpDisplay"); } - res.call(help); + res.send(help); } } \ No newline at end of file diff --git a/src/commands/CommandHelpBuilder.java b/src/commands/CommandHelpBuilder.java index d2f6242..3898c12 100644 --- a/src/commands/CommandHelpBuilder.java +++ b/src/commands/CommandHelpBuilder.java @@ -68,7 +68,7 @@ public class CommandHelpBuilder extends Command { } File file = new File(filename); - res.CallFile(file, "txt"); + res.sendFile(file, "txt"); ImageUtils.BlockingFileDelete(file); } diff --git a/src/commands/CommandInfo.java b/src/commands/CommandInfo.java index 80bafcf..8869203 100644 --- a/src/commands/CommandInfo.java +++ b/src/commands/CommandInfo.java @@ -20,6 +20,6 @@ public class CommandInfo extends Command @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - res.call(LocStrings.stub("InfoResponse")); + res.send(LocStrings.stub("InfoResponse")); } } \ No newline at end of file diff --git a/src/commands/CommandInvite.java b/src/commands/CommandInvite.java index b6b576d..efb2f71 100644 --- a/src/commands/CommandInvite.java +++ b/src/commands/CommandInvite.java @@ -15,7 +15,7 @@ public class CommandInvite extends Command @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - res.call("https://discordapp.com/oauth2/authorize?&client_id="+ Ref.CliID + res.send("https://discordapp.com/oauth2/authorize?&client_id="+ Ref.CliID +"&scope=bot&permissions=8"); } } \ No newline at end of file diff --git a/src/commands/CommandJDoodle.java b/src/commands/CommandJDoodle.java index 6ba5149..67165f0 100644 --- a/src/commands/CommandJDoodle.java +++ b/src/commands/CommandJDoodle.java @@ -19,10 +19,10 @@ public class CommandJDoodle extends Command { if(input.args.trim().length() < 1) { - res.call(LocStrings.stub("JDoodleError")); + res.send(LocStrings.stub("JDoodleError")); return; } - res.call(compiler.compileJava(input.args)); + res.send(compiler.compileJava(input.args)); } } diff --git a/src/commands/CommandLeaderboard.java b/src/commands/CommandLeaderboard.java index 2ed622e..29914c5 100644 --- a/src/commands/CommandLeaderboard.java +++ b/src/commands/CommandLeaderboard.java @@ -94,6 +94,6 @@ public class CommandLeaderboard extends Command } // Write out embed result - res.callEmbed(embed); + res.send(embed); } } diff --git a/src/commands/CommandMap.java b/src/commands/CommandMap.java index 575f7e9..e337f3f 100644 --- a/src/commands/CommandMap.java +++ b/src/commands/CommandMap.java @@ -60,7 +60,7 @@ public class CommandMap extends Command } catch(NumberFormatException e) { - res.call(LocStrings.stub("MapInvalid")); + res.send(LocStrings.stub("MapInvalid")); return; } @@ -87,7 +87,7 @@ public class CommandMap extends Command body += "\n```"; // Send back the map - res.call(header + body); + res.send(header + body); } // Verifies and appropriately caps input as necessary diff --git a/src/commands/CommandPerish.java b/src/commands/CommandPerish.java index b743cdf..9089a72 100644 --- a/src/commands/CommandPerish.java +++ b/src/commands/CommandPerish.java @@ -67,7 +67,7 @@ public class CommandPerish extends Command } postProcessed = new File(name); - res.CallFile(postProcessed, "png"); + res.sendFile(postProcessed, "png"); ImageUtils.BlockingFileDelete(preProcessed); ImageUtils.BlockingFileDelete(postProcessed); diff --git a/src/commands/CommandPing.java b/src/commands/CommandPing.java index a75e3e8..e5f8d62 100644 --- a/src/commands/CommandPing.java +++ b/src/commands/CommandPing.java @@ -21,6 +21,6 @@ public class CommandPing extends Command @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - res.call(LocStrings.stub("PingResponse")); + res.send(LocStrings.stub("PingResponse")); } } diff --git a/src/commands/CommandPollManage.java b/src/commands/CommandPollManage.java index 5d1d738..5457a1b 100644 --- a/src/commands/CommandPollManage.java +++ b/src/commands/CommandPollManage.java @@ -22,15 +22,15 @@ public class CommandPollManage extends Command switch(input.args.split(" ")[0].toLowerCase()) { case "start": - res.call(guild.startPoll(input.args.substring(input.args.indexOf(' ')).trim())); + res.send(guild.startPoll(input.args.substring(input.args.indexOf(' ')).trim())); break; case "choice": - res.call(guild.addChoiceToPoll(input.args.substring(input.args.indexOf(' ')).trim())); + res.send(guild.addChoiceToPoll(input.args.substring(input.args.indexOf(' ')).trim())); break; case "stop": - res.call(guild.endPoll()); + res.send(guild.endPoll()); break; default: diff --git a/src/commands/CommandPollResults.java b/src/commands/CommandPollResults.java index b066d0d..638bb81 100644 --- a/src/commands/CommandPollResults.java +++ b/src/commands/CommandPollResults.java @@ -31,6 +31,6 @@ public class CommandPollResults extends Command results += String.format(LocStrings.stub("PollResultsResponse"), votes.get(i).votes, votes.get(i).choice, (int)(((double)votes.get(i).votes) / ((double)totalVotes) * 100)); } - res.call(results); + res.send(results); } } diff --git a/src/commands/CommandPollShow.java b/src/commands/CommandPollShow.java index 6006dc1..c92ab2d 100644 --- a/src/commands/CommandPollShow.java +++ b/src/commands/CommandPollShow.java @@ -15,7 +15,7 @@ public class CommandPollShow extends Command { if(!guild.polling) { - res.call(LocStrings.stub("PollShowNoPoll")); + res.send(LocStrings.stub("PollShowNoPoll")); return; } String poll = String.format(LocStrings.stub("PollShowPoll"), guild.poll); @@ -25,6 +25,6 @@ public class CommandPollShow extends Command poll += (i+1) + ": `" + guild.choices.get(i).choice + "`\n"; } - res.call(poll); + res.send(poll); } } diff --git a/src/commands/CommandPollVote.java b/src/commands/CommandPollVote.java index 17cfbde..b3012f1 100644 --- a/src/commands/CommandPollVote.java +++ b/src/commands/CommandPollVote.java @@ -17,7 +17,7 @@ public class CommandPollVote extends Command { if(guild.hasVoted.contains(user.uniqueID)) { - res.call(LocStrings.stub("PollVoteAlreadyVoted")); + res.send(LocStrings.stub("PollVoteAlreadyVoted")); return; } try @@ -25,23 +25,23 @@ public class CommandPollVote extends Command int voteNum = Integer.parseInt(input.args)-1; if(voteNum >= guild.choices.size() || voteNum < 0) { - res.call(String.format(LocStrings.stub("PollVoteNotValidVote"), voteNum)); + res.send(String.format(LocStrings.stub("PollVoteNotValidVote"), voteNum)); return; } KittyPoll polled = guild.choices.get(voteNum); polled.votes++; guild.hasVoted.add(user.uniqueID); - res.call(LocStrings.stub("PollVoteSuccess") + " `" + polled.choice + "`!"); + res.send(LocStrings.stub("PollVoteSuccess") + " `" + polled.choice + "`!"); return; } catch (NumberFormatException e) { - res.call(LocStrings.stub("PollVoteNotValidNumber")); + res.send(LocStrings.stub("PollVoteNotValidNumber")); return; } } - res.call(LocStrings.stub("PollVoteNoPoll")); + res.send(LocStrings.stub("PollVoteNoPoll")); } } diff --git a/src/commands/CommandRPEnd.java b/src/commands/CommandRPEnd.java index b4500f9..355b691 100644 --- a/src/commands/CommandRPEnd.java +++ b/src/commands/CommandRPEnd.java @@ -32,12 +32,12 @@ public class CommandRPEnd extends Command if(sending != null) { - res.CallFile(sending, "txt"); - res.call(LocStrings.stub("RPEndFileOut")); + res.sendFile(sending, "txt"); + res.send(LocStrings.stub("RPEndFileOut")); } else { - res.call(LocStrings.stub("RPEndError")); + res.send(LocStrings.stub("RPEndError")); } } } diff --git a/src/commands/CommandRPG.java b/src/commands/CommandRPG.java index 2f46a65..bb7ca35 100644 --- a/src/commands/CommandRPG.java +++ b/src/commands/CommandRPG.java @@ -32,7 +32,7 @@ public class CommandRPG extends Command if(input.args == null || input.args.length() == 0) { String output = getHelpText(); - res.call(output); + res.send(output); return; } @@ -44,10 +44,10 @@ public class CommandRPG extends Command if(result == null) { - res.call(LocStrings.stub("RPGInvalid")); + res.send(LocStrings.stub("RPGInvalid")); return; } - res.call(result); + res.send(result); } } diff --git a/src/commands/CommandRPStart.java b/src/commands/CommandRPStart.java index 8ce235c..866b6f8 100644 --- a/src/commands/CommandRPStart.java +++ b/src/commands/CommandRPStart.java @@ -27,6 +27,6 @@ public class CommandRPStart extends Command } } - res.call(RPManager.instance.newRP(channel, users)); + res.send(RPManager.instance.newRP(channel, users)); } } diff --git a/src/commands/CommandRaffleEnd.java b/src/commands/CommandRaffleEnd.java index 804e3cf..735c604 100644 --- a/src/commands/CommandRaffleEnd.java +++ b/src/commands/CommandRaffleEnd.java @@ -22,11 +22,11 @@ public class CommandRaffleEnd extends Command { if(guild.endRaffle()) { - res.call(LocStrings.stub("RaffleEndSuccess")); + res.send(LocStrings.stub("RaffleEndSuccess")); } else { - res.call(LocStrings.stub("RaffleEndFailure")); + res.send(LocStrings.stub("RaffleEndFailure")); } } } \ No newline at end of file diff --git a/src/commands/CommandRaffleJoin.java b/src/commands/CommandRaffleJoin.java index c216650..0b6a78f 100644 --- a/src/commands/CommandRaffleJoin.java +++ b/src/commands/CommandRaffleJoin.java @@ -22,11 +22,11 @@ public class CommandRaffleJoin extends Command { if(guild.joinRaffle(user)) { - res.call(LocStrings.stub("RaffleJoinSuccess")); + res.send(LocStrings.stub("RaffleJoinSuccess")); } else { - res.call(LocStrings.stub("RaffleJoinFailure")); + res.send(LocStrings.stub("RaffleJoinFailure")); } } } diff --git a/src/commands/CommandRaffleSpin.java b/src/commands/CommandRaffleSpin.java index 3eefeb7..3889252 100644 --- a/src/commands/CommandRaffleSpin.java +++ b/src/commands/CommandRaffleSpin.java @@ -22,11 +22,11 @@ public class CommandRaffleSpin extends Command { try { - res.call(String.format(LocStrings.stub("RaffleSpinSuccess"), guild.chooseRaffleWinner().name)); + res.send(String.format(LocStrings.stub("RaffleSpinSuccess"), guild.chooseRaffleWinner().name)); } catch(Exception e) { - res.call(LocStrings.stub("RaffleSpinFailure")); + res.send(LocStrings.stub("RaffleSpinFailure")); } } } \ No newline at end of file diff --git a/src/commands/CommandRaffleStart.java b/src/commands/CommandRaffleStart.java index 429c0d4..57468a3 100644 --- a/src/commands/CommandRaffleStart.java +++ b/src/commands/CommandRaffleStart.java @@ -33,11 +33,11 @@ public class CommandRaffleStart extends Command if(guild.startRaffle(beanCost)) { - res.call(String.format(LocStrings.stub("RaffleStartSuccess"), beanCost)); + res.send(String.format(LocStrings.stub("RaffleStartSuccess"), beanCost)); } else { - res.call(LocStrings.stub("RaffleStartFailure")); + res.send(LocStrings.stub("RaffleStartFailure")); } } } diff --git a/src/commands/CommandRating.java b/src/commands/CommandRating.java index 1ae6171..6947e77 100644 --- a/src/commands/CommandRating.java +++ b/src/commands/CommandRating.java @@ -55,11 +55,11 @@ public class CommandRating extends Command } if(newRating != null) - res.call(LocStrings.stub("RatingChanged") + " " + newRating); + res.send(LocStrings.stub("RatingChanged") + " " + newRating); else - res.call(LocStrings.stub("RatingInvalid") + " `" + input.args + "`"); + res.send(LocStrings.stub("RatingInvalid") + " `" + input.args + "`"); if(newRating.equals("Filtered")) - res.call(LocStrings.stub("RatingWarning")); + res.send(LocStrings.stub("RatingWarning")); } } \ No newline at end of file diff --git a/src/commands/CommandRole.java b/src/commands/CommandRole.java index c7c83d1..2261620 100644 --- a/src/commands/CommandRole.java +++ b/src/commands/CommandRole.java @@ -16,13 +16,13 @@ public class CommandRole extends Command { if(input.args.isEmpty()) { - res.call(LocStrings.stub("RoleStandardResponse") + " " + user.GetRole().name() + "!"); + res.send(LocStrings.stub("RoleStandardResponse") + " " + user.GetRole().name() + "!"); return; } if(user.GetRole().getValue() < KittyRole.Admin.getValue()) { - res.call(String.format(LocStrings.stub("RoleError"), KittyRole.Admin.toString())); + res.send(String.format(LocStrings.stub("RoleError"), KittyRole.Admin.toString())); return; } @@ -46,7 +46,7 @@ public class CommandRole extends Command break; default: - res.call(LocStrings.stub("RoleNeededRole")); + res.send(LocStrings.stub("RoleNeededRole")); return; } String users = ""; @@ -56,6 +56,6 @@ public class CommandRole extends Command users += input.mentions[i].name + " "; } - res.call(String.format(LocStrings.stub("RoleChanged"), users, newRole.name())); + res.send(String.format(LocStrings.stub("RoleChanged"), users, newRole.name())); } } diff --git a/src/commands/CommandRoll.java b/src/commands/CommandRoll.java index c76c850..046c2c0 100644 --- a/src/commands/CommandRoll.java +++ b/src/commands/CommandRoll.java @@ -23,11 +23,11 @@ public class CommandRoll extends Command { try { - res.call(rollDice(input.args)); + res.send(rollDice(input.args)); } catch(Exception e) { - res.call(LocStrings.stub("RollError")); + res.send(LocStrings.stub("RollError")); } } diff --git a/src/commands/CommandShutdown.java b/src/commands/CommandShutdown.java index 45fe80e..ddb8e41 100644 --- a/src/commands/CommandShutdown.java +++ b/src/commands/CommandShutdown.java @@ -46,7 +46,7 @@ public class CommandShutdown extends Command if(isSafe) { // Force upkeep, this works so long as upkeep is on the main thread. - res.CallImmediate(LocStrings.stub("ShutdownSafe")); + res.sendImmediate(LocStrings.stub("ShutdownSafe")); DatabaseManager.instance.upkeep(); GlobalLog.Warn(LogFilter.Command, LocStrings.Lookup("ShutdownSafe")); @@ -54,7 +54,7 @@ public class CommandShutdown extends Command } else { - res.CallImmediate(LocStrings.stub("ShutdownUnsafe"));// "``"); + res.sendImmediate(LocStrings.stub("ShutdownUnsafe"));// "``"); GlobalLog.Warn(LogFilter.Command, LocStrings.Lookup("ShutdownSafe")); System.exit(0); } diff --git a/src/commands/CommandStark.java b/src/commands/CommandStark.java index e1e4d18..24865e0 100644 --- a/src/commands/CommandStark.java +++ b/src/commands/CommandStark.java @@ -61,7 +61,7 @@ public class CommandStark extends Command } postProcessed = new File(name); - res.CallFile(postProcessed, "png"); + res.sendFile(postProcessed, "png"); ImageUtils.BlockingFileDelete(preProcessed); ImageUtils.BlockingFileDelete(postProcessed); diff --git a/src/commands/CommandStats.java b/src/commands/CommandStats.java index dc4ff72..b7211be 100644 --- a/src/commands/CommandStats.java +++ b/src/commands/CommandStats.java @@ -66,6 +66,11 @@ public class CommandStats extends Command + " Cached Users: " + userCount; out += "\n```"; - res.call(out); + KittyEmbed embed = new KittyEmbed(); + embed.title = "Bot Stats"; + embed.descriptionText = out; + embed.color = Config.ColorDefault; + + res.send(embed); } } diff --git a/src/commands/CommandTeey.java b/src/commands/CommandTeey.java index 5ece546..8ba9f4d 100644 --- a/src/commands/CommandTeey.java +++ b/src/commands/CommandTeey.java @@ -62,7 +62,7 @@ public class CommandTeey extends Command } teeyFile = new File (name); - res.CallFile(teeyFile, "gif"); + res.sendFile(teeyFile, "gif"); // Thread cleanup... ImageUtils.BlockingFileDelete(teeyFile); diff --git a/src/commands/CommandTradeBeans.java b/src/commands/CommandTradeBeans.java index a26fb7a..b166787 100644 --- a/src/commands/CommandTradeBeans.java +++ b/src/commands/CommandTradeBeans.java @@ -22,7 +22,7 @@ public class CommandTradeBeans extends Command { if(input.mentions == null) { - res.call(LocStrings.stub("TradeBeansNoTargetError")); + res.send(LocStrings.stub("TradeBeansNoTargetError")); return; } @@ -32,25 +32,25 @@ public class CommandTradeBeans extends Command } catch (NumberFormatException e) { - res.call(LocStrings.stub("TradeBeansIntParseError")); + res.send(LocStrings.stub("TradeBeansIntParseError")); return; } if(user.GetBeans() < beans) { - res.call(LocStrings.stub("TradeBeansNotEnoughError")); + res.send(LocStrings.stub("TradeBeansNotEnoughError")); return; } if(beans < 0) { - res.call(String.format(LocStrings.stub("TradeBeansStealingBeans"), user.name)); + res.send(String.format(LocStrings.stub("TradeBeansStealingBeans"), user.name)); user.ChangeBeans(-10); return; } input.mentions[0].ChangeBeans(beans); user.ChangeBeans(-beans); - res.call(String.format(LocStrings.stub("TradeBeansSuccess"), user.name, input.mentions[0].name, beans)); + res.send(String.format(LocStrings.stub("TradeBeansSuccess"), user.name, input.mentions[0].name, beans)); } } diff --git a/src/commands/CommandTweet.java b/src/commands/CommandTweet.java index 403eb0e..5334900 100644 --- a/src/commands/CommandTweet.java +++ b/src/commands/CommandTweet.java @@ -18,9 +18,9 @@ public class CommandTweet extends Command { //TODO: Figure out how to pass pictures correctly try { - res.call(tweet.tweet(input.args)); + res.send(tweet.tweet(input.args)); } catch (Exception e) { - res.call(LocStrings.stub("TweetError")); + res.send(LocStrings.stub("TweetError")); } } } diff --git a/src/commands/CommandWolfram.java b/src/commands/CommandWolfram.java index 15f706c..54b26b4 100644 --- a/src/commands/CommandWolfram.java +++ b/src/commands/CommandWolfram.java @@ -21,17 +21,17 @@ public class CommandWolfram extends Command public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.args == null || input.args.trim().length() == 0) - res.call(LocStrings.stub("WolframNoArgs")); + res.send(LocStrings.stub("WolframNoArgs")); try { File pic = new File(searcher.getWolfram(input.args)); - res.CallFile(pic, "png"); + res.sendFile(pic, "png"); ImageUtils.BlockingFileDelete(pic); } catch (IOException e) { - res.call(LocStrings.stub("WolframError")); + res.send(LocStrings.stub("WolframError")); } } } \ No newline at end of file diff --git a/src/commands/CommandYeet.java b/src/commands/CommandYeet.java index 3e71bde..6fd467b 100644 --- a/src/commands/CommandYeet.java +++ b/src/commands/CommandYeet.java @@ -62,7 +62,7 @@ public class CommandYeet extends Command } yeetFile = new File (name); - res.CallFile(yeetFile, "gif"); + res.sendFile(yeetFile, "gif"); // Thread cleanup... ImageUtils.BlockingFileDelete(yeetFile); diff --git a/src/core/RPManager.java b/src/core/RPManager.java index f56be78..126d90e 100644 --- a/src/core/RPManager.java +++ b/src/core/RPManager.java @@ -71,7 +71,7 @@ public class RPManager { reminder += " <@" + users.get(i) + ">"; } - res.CallToChannel(reminder, entry.getValue().getChannel().uniqueID); + res.sendToChannel(reminder, entry.getValue().getChannel().uniqueID); reminder = ""; entry.getValue().resetTimer(); diff --git a/src/core/benchmark/BenchmarkFormattable.java b/src/core/benchmark/BenchmarkFormattable.java index f2462b8..7261ea6 100644 --- a/src/core/benchmark/BenchmarkFormattable.java +++ b/src/core/benchmark/BenchmarkFormattable.java @@ -33,8 +33,8 @@ public class BenchmarkFormattable public void call(Response res) { if(resEmbed == null) - res.call(resString); + res.send(resString); else - res.callEmbed(resEmbed); + res.send(resEmbed); } } diff --git a/src/dataStructures/Response.java b/src/dataStructures/Response.java index c46a6db..18549e0 100644 --- a/src/dataStructures/Response.java +++ b/src/dataStructures/Response.java @@ -30,7 +30,7 @@ public class Response } // Builds a nicely formatted embedded message based on information provided - public void callEmbed(KittyEmbed embedInfo) + public void send(KittyEmbed embedInfo) { EmbedBuilder embed = new EmbedBuilder(); @@ -83,13 +83,12 @@ public class Response if(embedInfo.thumbnailURL != null) embed.setThumbnail(embedInfo.thumbnailURL); - event.getChannel().sendMessage(embed.build()); + event.getChannel().sendMessage(embed.build()).queue(); } - } // Queues a standard text-based message response to the channel that issued the command. - public void call(String toRespondWith) + public void send(String toRespondWith) { GlobalLog.Log(LogFilter.Response, "Sending response: " + toRespondWith); if(toRespondWith.length() > discordMessageMax) @@ -103,7 +102,7 @@ public class Response } // Queues a standard text-based message response to the specified channel. - public void CallToChannel(String toRespondWith, String channelID) + public void sendToChannel(String toRespondWith, String channelID) { TextChannel channel; channel = kitty.getTextChannelById(Long.parseLong(channelID)); @@ -118,7 +117,7 @@ public class Response } // Immediately dispatches the message to the channel that issued the command. - public void CallImmediate(String toRespondWith) + public void sendImmediate(String toRespondWith) { GlobalLog.Log(LogFilter.Response, "Sending immediate response: " + toRespondWith); if(toRespondWith.length() > discordMessageMax) @@ -132,14 +131,14 @@ public class Response } // Queues a file response to the channel that issued the command. - public void CallFile(File toRespondWith, String extension) + public void sendFile(File toRespondWith, String extension) { GlobalLog.Log(LogFilter.Response, "Sending file response"); event.getChannel().sendFile(toRespondWith, "return." + extension).queue(); } // Queues an input stream response to the channel that issued the command. - public void CallInput(InputStream in, String extension) + public void sendFile(InputStream in, String extension) { GlobalLog.Log(LogFilter.Response, "Sending input stream response"); event.getChannel().sendFile(in, "return." + extension).queue(); diff --git a/src/main/Main.java b/src/main/Main.java index 3701297..fb78efd 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -106,7 +106,7 @@ public class Main extends ListenerAdapter } else { - response.call(pluginOutput.get(i)); + response.send(pluginOutput.get(i)); } } } From 5db2d80971cfddb544399cb3570b9556c32138fb Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Wed, 19 Jun 2019 21:17:30 -0700 Subject: [PATCH 18/24] = Updated stats formatting --- src/commands/CommandStats.java | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/commands/CommandStats.java b/src/commands/CommandStats.java index b7211be..1eea9e7 100644 --- a/src/commands/CommandStats.java +++ b/src/commands/CommandStats.java @@ -3,7 +3,9 @@ package commands; import core.Command; import core.LocStrings; import core.CommandManager.ThreadData; +import core.Config; import dataStructures.KittyChannel; +import dataStructures.KittyEmbed; import dataStructures.KittyGuild; import dataStructures.KittyRating; import dataStructures.KittyRole; @@ -23,25 +25,30 @@ public class CommandStats extends Command @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - String out = "```\n"; + // Variables Stats stats = Stats.instance; - + String out = ""; long seen = stats.GetMessagesSeen(); long processed = stats.GetCommandsProcessed(); - out += "----- [General] -----\n"; + // General + out += "General"; + out += "```\n"; out += " Messages observed: " + seen + "\n"; out += "Commands processed: " + processed + "\n"; out += " Command invoke %: " + ((int)((processed / (float)seen) * 1000)) / 10.0f + "%\n"; - out += " KittyBot uptime: " + stats.GetFormattedUptime() + "\n"; - out += "\n"; - out += "----- [Health] -----\n"; + out += " Bot uptime: " + stats.GetFormattedUptime() + "\n"; + out += "```\n"; + + // Health + out += "Health"; + out += "```\n"; out += " SMT cores: " + stats.GetCPUAvailable() + "\n"; - // If CPU load works on this OS, list it. + // If CPU load works on this OS, list it. -1.0 is the error state double CPULoad = stats.GetSystemCPULoad(); - if(CPULoad > -0.9) // -1.0 is the error state - out += "System CPU Load: " + (CPULoad * 100) + "%\n"; + out += CPULoad > -0.9 + ? " CPU Load: " + (CPULoad * 100) + "%\n" : ""; ThreadData data = stats.GetThreadData(); Integer terminated = data.states.get(Thread.State.TERMINATED); @@ -58,12 +65,18 @@ public class CommandStats extends Command + " term-" + (terminated == null ? 0 : terminated) + "\n"; + out += "```\n"; + + + // Cache Integer guildCount = stats.GetGuildCount(); Integer userCount = stats.GetUserCount(); - out += "\n----- [Cache] -----\n" + out += "Cache"; + out += "```\n" + "Cached Guilds: " + guildCount + "\n" + " Cached Users: " + userCount; + out += "\n```"; KittyEmbed embed = new KittyEmbed(); From 78efa4ad8f27993c167185b01ea9ba2484d3fa99 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Wed, 19 Jun 2019 21:26:56 -0700 Subject: [PATCH 19/24] = Database tracked object formatting change --- src/commands/CommandBoop.java | 8 ++++---- src/commands/CommandChangeIndicator.java | 4 ++-- src/core/DatabaseManager.java | 16 +++++++-------- src/core/DatabaseTrackedObject.java | 10 ++++----- src/dataStructures/KittyGuild.java | 24 +++++++++++----------- src/dataStructures/KittyTrackedLong.java | 10 ++++----- src/dataStructures/KittyTrackedString.java | 8 ++++---- src/dataStructures/KittyTrackedVector.java | 8 ++++---- src/dataStructures/KittyUser.java | 12 +++++------ src/dataStructures/UserInput.java | 2 +- 10 files changed, 51 insertions(+), 51 deletions(-) diff --git a/src/commands/CommandBoop.java b/src/commands/CommandBoop.java index 5ab3ef2..fc0da25 100644 --- a/src/commands/CommandBoop.java +++ b/src/commands/CommandBoop.java @@ -22,7 +22,7 @@ public class CommandBoop extends Command public void ApplyBoop() { ++boops; - MarkDirty(); + markDirty(); } public int HowMany() @@ -31,10 +31,10 @@ public class CommandBoop extends Command } @Override - public String Serialize() { return "" + boops; } + public String serialize() { return "" + boops; } @Override - public void DeSerialzie(String string) + public void deSerialzie(String string) { try { @@ -44,7 +44,7 @@ public class CommandBoop extends Command { GlobalLog.Warn(LogFilter.Command, "No valid value was found for boops! Starting over at 0!"); boops = 0; - MarkDirty(); + markDirty(); } } } diff --git a/src/commands/CommandChangeIndicator.java b/src/commands/CommandChangeIndicator.java index 415f5df..f4133bf 100644 --- a/src/commands/CommandChangeIndicator.java +++ b/src/commands/CommandChangeIndicator.java @@ -28,7 +28,7 @@ public class CommandChangeIndicator extends Command return; } - guild.SetCommandIndicator(indicator); - res.send(String.format(LocStrings.stub("ChangeIndicatorChanged"), guild.GetCommandIndicator())); + guild.setCommandIndicator(indicator); + res.send(String.format(LocStrings.stub("ChangeIndicatorChanged"), guild.getCommandIndicator())); } } diff --git a/src/core/DatabaseManager.java b/src/core/DatabaseManager.java index 4649e7f..e647cbb 100644 --- a/src/core/DatabaseManager.java +++ b/src/core/DatabaseManager.java @@ -94,10 +94,10 @@ public class DatabaseManager { DatabaseTrackedObject dto = globalDataTrackedObjects.get(i); - if(dto.IsDirty()) + if(dto.isDirty()) { - globalSetRemoteValue(dto.identifier, dto.Serialize()); - dto.Resolve(); + globalSetRemoteValue(dto.identifier, dto.serialize()); + dto.resolve(); ++numUpdated; } } @@ -117,10 +117,10 @@ public class DatabaseManager { DatabaseTrackedObject dto = characterDataTrackedObjects.get(i); - if(dto.IsDirty()) + if(dto.isDirty()) { - characterSetRemoteValue(dto.identifier, dto.Serialize()); - dto.Resolve(); + characterSetRemoteValue(dto.identifier, dto.serialize()); + dto.resolve(); ++numUpdated; } } @@ -142,7 +142,7 @@ public class DatabaseManager synchronized(globalDataTrackedObjects) { globalDataTrackedObjects.add(tracked); - tracked.DeSerialzie(globalGetRemoteValue(tracked.identifier)); + tracked.deSerialzie(globalGetRemoteValue(tracked.identifier)); } } @@ -172,7 +172,7 @@ public class DatabaseManager synchronized(characterDataTrackedObjects) { characterDataTrackedObjects.add(tracked); - tracked.DeSerialzie(characterGetRemoteValue(tracked.identifier)); + tracked.deSerialzie(characterGetRemoteValue(tracked.identifier)); } } diff --git a/src/core/DatabaseTrackedObject.java b/src/core/DatabaseTrackedObject.java index 2edfc91..f254e1d 100644 --- a/src/core/DatabaseTrackedObject.java +++ b/src/core/DatabaseTrackedObject.java @@ -13,7 +13,7 @@ public abstract class DatabaseTrackedObject this.identifier = identifier; } - public final boolean IsDirty() + public final boolean isDirty() { synchronized(isDirty) { @@ -21,7 +21,7 @@ public abstract class DatabaseTrackedObject } } - public final void MarkDirty() + public final void markDirty() { synchronized(isDirty) { @@ -29,7 +29,7 @@ public abstract class DatabaseTrackedObject } } - public final void Resolve() + public final void resolve() { synchronized(isDirty) { @@ -39,6 +39,6 @@ public abstract class DatabaseTrackedObject // Consider an object factory instead of dedicated serialization methods // if this starts to become impractical. For now, it works. - public abstract String Serialize(); - public abstract void DeSerialzie(String string); + public abstract String serialize(); + public abstract void deSerialzie(String string); } diff --git a/src/dataStructures/KittyGuild.java b/src/dataStructures/KittyGuild.java index b2d6868..cdbb78e 100644 --- a/src/dataStructures/KittyGuild.java +++ b/src/dataStructures/KittyGuild.java @@ -33,7 +33,7 @@ public class KittyGuild extends DatabaseTrackedObject private String commandIndicator; - private void RegisterTrackedObjects() + private void registerTrackedObjects() { DatabaseManager.instance.globalRegister(roleList); DatabaseManager.instance.globalRegister(beans); @@ -46,13 +46,13 @@ public class KittyGuild extends DatabaseTrackedObject this.uniqueID = uniqueID; roleList = new KittyTrackedVector(roleListName, uniqueID); beans = new KittyTrackedLong(beansName, uniqueID); - RegisterTrackedObjects(); + registerTrackedObjects(); control = adminControl; this.contentRating = KittyRating.Safe; this.polling = false; this.emoji = emoji; - SetCommandIndicator("!"); + setCommandIndicator("!"); } // Explicit constructor @@ -62,9 +62,9 @@ public class KittyGuild extends DatabaseTrackedObject this.uniqueID = uniqueID; roleList = new KittyTrackedVector(roleListName, uniqueID); beans = new KittyTrackedLong(beansName, uniqueID); - RegisterTrackedObjects(); + registerTrackedObjects(); - SetCommandIndicator(commandIndicator); + setCommandIndicator(commandIndicator); this.contentRating = contentRating; this.polling = false; this.guildOwner = guildOwner; @@ -141,31 +141,31 @@ public class KittyGuild extends DatabaseTrackedObject } @Override - public String Serialize() + public String serialize() { return commandIndicator; } @Override - public void DeSerialzie(String string) + public void deSerialzie(String string) { if(string == null || string.length() == 0) - SetCommandIndicator("!"); + setCommandIndicator("!"); else - SetCommandIndicator(string); + setCommandIndicator(string); } - public String GetCommandIndicator() + public String getCommandIndicator() { return commandIndicator; } - public void SetCommandIndicator(String newIndicator) + public void setCommandIndicator(String newIndicator) { if(newIndicator != commandIndicator) { commandIndicator = newIndicator; - MarkDirty(); + markDirty(); } } } diff --git a/src/dataStructures/KittyTrackedLong.java b/src/dataStructures/KittyTrackedLong.java index b584e4b..b61b771 100644 --- a/src/dataStructures/KittyTrackedLong.java +++ b/src/dataStructures/KittyTrackedLong.java @@ -30,14 +30,14 @@ public class KittyTrackedLong extends DatabaseTrackedObject public long Add(long toAdd) { tracked += toAdd; - MarkDirty(); + markDirty(); return tracked; } public long Subtract(long toSubtract) { tracked -= toSubtract; - MarkDirty(); + markDirty(); return tracked; } @@ -49,18 +49,18 @@ public class KittyTrackedLong extends DatabaseTrackedObject public long Set(long newValue) { tracked = newValue; - MarkDirty(); + markDirty(); return tracked; } @Override - public String Serialize() + public String serialize() { return "" + tracked; } @Override - public void DeSerialzie(String string) + public void deSerialzie(String string) { if(string != null) { diff --git a/src/dataStructures/KittyTrackedString.java b/src/dataStructures/KittyTrackedString.java index f7c94bd..5bb959c 100644 --- a/src/dataStructures/KittyTrackedString.java +++ b/src/dataStructures/KittyTrackedString.java @@ -21,7 +21,7 @@ public class KittyTrackedString extends DatabaseTrackedObject synchronized(trackedString) { trackedString = newValue; - MarkDirty(); + markDirty(); } } @@ -35,13 +35,13 @@ public class KittyTrackedString extends DatabaseTrackedObject } @Override - public String Serialize() + public String serialize() { return trackedString; } @Override - public void DeSerialzie(String string) + public void deSerialzie(String string) { if(string != null && !string.isEmpty()) { @@ -51,7 +51,7 @@ public class KittyTrackedString extends DatabaseTrackedObject { GlobalLog.Log(LogFilter.Database, "String had null or empty value with identifier: " + identifier); string = ""; - MarkDirty(); + markDirty(); } } diff --git a/src/dataStructures/KittyTrackedVector.java b/src/dataStructures/KittyTrackedVector.java index 5bff03f..7484f64 100644 --- a/src/dataStructures/KittyTrackedVector.java +++ b/src/dataStructures/KittyTrackedVector.java @@ -44,7 +44,7 @@ public class KittyTrackedVector extends DatabaseTrackedObject public void add(String str) { trackedVector.add(str); - this.MarkDirty(); + this.markDirty(); } public boolean isEmpty() @@ -65,12 +65,12 @@ public class KittyTrackedVector extends DatabaseTrackedObject public void remove(String str) { trackedVector.remove(str); - this.MarkDirty(); + this.markDirty(); } // Writes out the roles as a single string that can be parsed back in later @Override - public String Serialize() + public String serialize() { String toSerialize = ""; @@ -87,7 +87,7 @@ public class KittyTrackedVector extends DatabaseTrackedObject // Reads in the roles as a delimited single string that needs parsing @Override - public void DeSerialzie(String string) + public void deSerialzie(String string) { if(string != null) { diff --git a/src/dataStructures/KittyUser.java b/src/dataStructures/KittyUser.java index 538c818..e8ba0fb 100644 --- a/src/dataStructures/KittyUser.java +++ b/src/dataStructures/KittyUser.java @@ -36,7 +36,7 @@ public class KittyUser extends DatabaseTrackedObject beans += amount; if(amount != 0) - MarkDirty(); + markDirty(); } public void ChangeRole(KittyRole newRole) @@ -44,7 +44,7 @@ public class KittyUser extends DatabaseTrackedObject if(newRole != role) { role = newRole; - MarkDirty(); + markDirty(); } } @@ -59,7 +59,7 @@ public class KittyUser extends DatabaseTrackedObject } @Override - public String Serialize() + public String serialize() { return beans + "," + role.getValue(); } @@ -80,7 +80,7 @@ public class KittyUser extends DatabaseTrackedObject } @Override - public void DeSerialzie(String string) + public void deSerialzie(String string) { try { @@ -91,7 +91,7 @@ public class KittyUser extends DatabaseTrackedObject // Mark ourselves dirty to re-write the role information stored in the user. // Just uses defaults from earlier again. - MarkDirty(); + markDirty(); } else { @@ -107,7 +107,7 @@ public class KittyUser extends DatabaseTrackedObject // We don't need to specify the role at this point because it is set at this point. // We use what the user was created with whatever defaults were in the factory. // Beans are maintained too, just in case there's some in cache. - MarkDirty(); + markDirty(); } } } diff --git a/src/dataStructures/UserInput.java b/src/dataStructures/UserInput.java index 063c6a6..d820006 100644 --- a/src/dataStructures/UserInput.java +++ b/src/dataStructures/UserInput.java @@ -38,7 +38,7 @@ public class UserInput mentions = FindMentionedUsers(event); toParse = toParse.trim(); - String commandIndicator = guildContext.GetCommandIndicator(); + String commandIndicator = guildContext.getCommandIndicator(); if(toParse.startsWith(commandIndicator)) { int loc = FindFirstWhitespace(toParse); From ba843ca645f0a776e7c7a0edb09630bb73ba49e4 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Wed, 19 Jun 2019 21:32:42 -0700 Subject: [PATCH 20/24] = Data Structures formatting update --- src/commands/CommandBeansShow.java | 4 ++-- src/commands/CommandBetBeans.java | 10 +++++----- src/commands/CommandBetHistory.java | 2 +- src/commands/CommandGiveBeans.java | 2 +- src/commands/CommandRole.java | 6 +++--- src/commands/CommandTradeBeans.java | 8 ++++---- src/core/BaseLocFile.java | 4 ++-- src/core/CharacterManager.java | 4 ++-- src/core/Command.java | 2 +- src/core/CommandManager.java | 4 ++-- src/core/LocCommands.java | 2 +- src/core/ObjectBuilderFactory.java | 2 +- src/core/RPManager.java | 2 +- src/dataStructures/KittyChannel.java | 4 ++-- src/dataStructures/KittyGuild.java | 4 ++-- src/dataStructures/KittyRP.java | 2 +- src/dataStructures/KittyTrackedLong.java | 8 ++++---- src/dataStructures/KittyUser.java | 8 ++++---- src/dataStructures/TaggedPairStore.java | 22 +++++++++++----------- src/dataStructures/UserInput.java | 14 +++++++------- src/main/Main.java | 2 +- src/main/Superintendent.java | 4 ++-- 22 files changed, 60 insertions(+), 60 deletions(-) diff --git a/src/commands/CommandBeansShow.java b/src/commands/CommandBeansShow.java index 29145b2..8f25af7 100644 --- a/src/commands/CommandBeansShow.java +++ b/src/commands/CommandBeansShow.java @@ -15,13 +15,13 @@ public class CommandBeansShow extends Command public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { if(input.mentions == null) - res.send(String.format(LocStrings.stub("BeansShowDisplay"), user.GetBeans())); + res.send(String.format(LocStrings.stub("BeansShowDisplay"), user.getBeans())); else { String mentionedBeans = ""; for(KittyUser mentioned:input.mentions) { - mentionedBeans += mentioned.name + " has " + mentioned.GetBeans() + " "; + mentionedBeans += mentioned.name + " has " + mentioned.getBeans() + " "; } res.send(String.format(LocStrings.stub("BeansShowMentioned"), mentionedBeans)); } diff --git a/src/commands/CommandBetBeans.java b/src/commands/CommandBetBeans.java index c826c78..19618a6 100644 --- a/src/commands/CommandBetBeans.java +++ b/src/commands/CommandBetBeans.java @@ -34,13 +34,13 @@ public class CommandBetBeans extends Command return; } - if(user.GetBeans() < bet) + if(user.getBeans() < bet) { res.send(LocStrings.stub("BetBeansNotEnough")); return; } - user.ChangeBeans(-bet); + user.changeBeans(-bet); int [] slots = getSlots(); call += slotString(slots); slots = sort(slots); @@ -52,12 +52,12 @@ public class CommandBetBeans extends Command if(win == 0) { res.send(LocStrings.stub("BetBeansLose")); - guild.beans.Add(bet); + guild.beans.add(bet); return; } - user.ChangeBeans(bet*win); - guild.beans.Subtract(bet*win); + user.changeBeans(bet*win); + guild.beans.subtract(bet*win); res.send(String.format(LocStrings.stub("BetBeansWin"), "" + (bet*win))); } diff --git a/src/commands/CommandBetHistory.java b/src/commands/CommandBetHistory.java index 3d351f9..0f7b541 100644 --- a/src/commands/CommandBetHistory.java +++ b/src/commands/CommandBetHistory.java @@ -20,6 +20,6 @@ public class CommandBetHistory extends Command @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - res.send(String.format(LocStrings.stub("BetHistoryOutput"), guild.beans.Get())); + res.send(String.format(LocStrings.stub("BetHistoryOutput"), guild.beans.get())); } } \ No newline at end of file diff --git a/src/commands/CommandGiveBeans.java b/src/commands/CommandGiveBeans.java index bc50af4..51f55bb 100644 --- a/src/commands/CommandGiveBeans.java +++ b/src/commands/CommandGiveBeans.java @@ -49,7 +49,7 @@ public class CommandGiveBeans extends Command // Go through all the mentions and make sure every user is given beans! for(int i = 0; i < input.mentions.length; i++) { - input.mentions[i].ChangeBeans(beans); + input.mentions[i].changeBeans(beans); res.send(String.format(LocStrings.stub("GiveBeansSuccess"), input.mentions[i].name, "" + beans)); } } diff --git a/src/commands/CommandRole.java b/src/commands/CommandRole.java index 2261620..1abee3a 100644 --- a/src/commands/CommandRole.java +++ b/src/commands/CommandRole.java @@ -16,11 +16,11 @@ public class CommandRole extends Command { if(input.args.isEmpty()) { - res.send(LocStrings.stub("RoleStandardResponse") + " " + user.GetRole().name() + "!"); + res.send(LocStrings.stub("RoleStandardResponse") + " " + user.getRole().name() + "!"); return; } - if(user.GetRole().getValue() < KittyRole.Admin.getValue()) + if(user.getRole().getValue() < KittyRole.Admin.getValue()) { res.send(String.format(LocStrings.stub("RoleError"), KittyRole.Admin.toString())); return; @@ -52,7 +52,7 @@ public class CommandRole extends Command String users = ""; for(int i = 0; i < input.mentions.length; i++) { - input.mentions[i].ChangeRole(newRole); + input.mentions[i].changeRole(newRole); users += input.mentions[i].name + " "; } diff --git a/src/commands/CommandTradeBeans.java b/src/commands/CommandTradeBeans.java index b166787..efb7627 100644 --- a/src/commands/CommandTradeBeans.java +++ b/src/commands/CommandTradeBeans.java @@ -36,7 +36,7 @@ public class CommandTradeBeans extends Command return; } - if(user.GetBeans() < beans) + if(user.getBeans() < beans) { res.send(LocStrings.stub("TradeBeansNotEnoughError")); return; @@ -45,12 +45,12 @@ public class CommandTradeBeans extends Command if(beans < 0) { res.send(String.format(LocStrings.stub("TradeBeansStealingBeans"), user.name)); - user.ChangeBeans(-10); + user.changeBeans(-10); return; } - input.mentions[0].ChangeBeans(beans); - user.ChangeBeans(-beans); + input.mentions[0].changeBeans(beans); + user.changeBeans(-beans); res.send(String.format(LocStrings.stub("TradeBeansSuccess"), user.name, input.mentions[0].name, beans)); } } diff --git a/src/core/BaseLocFile.java b/src/core/BaseLocFile.java index 7525e27..f05eafc 100644 --- a/src/core/BaseLocFile.java +++ b/src/core/BaseLocFile.java @@ -121,7 +121,7 @@ public abstract class BaseLocFile if(stringStore == null) return input; - String value = stringStore.GetKey(input); + String value = stringStore.getKey(input); if(value == null || value.trim().length() < 1) return input; @@ -206,6 +206,6 @@ public abstract class BaseLocFile FileUtils.AcquireAllFiles(KittySourceDirectory).forEach((path) -> TryStripSpecified(path, localizeList)); for(LocInfo toStub : localizeList) - stringStore.AddKeyValue(toStub.file, toStub.phrase, toStub.phrase); + stringStore.addKeyValue(toStub.file, toStub.phrase, toStub.phrase); } } diff --git a/src/core/CharacterManager.java b/src/core/CharacterManager.java index cdfb770..81aa10d 100644 --- a/src/core/CharacterManager.java +++ b/src/core/CharacterManager.java @@ -66,8 +66,8 @@ public class CharacterManager } } - characters.add(new KittyCharacter(user, name, bio, refImage, uniqueID.Get())); - uniqueID.Add(1); + characters.add(new KittyCharacter(user, name, bio, refImage, uniqueID.get())); + uniqueID.add(1); return true; } diff --git a/src/core/Command.java b/src/core/Command.java index e23e026..829c65f 100644 --- a/src/core/Command.java +++ b/src/core/Command.java @@ -43,7 +43,7 @@ public abstract class Command //TODO: ADD CHANNEL CHECK HERE - if(user.GetRole().getValue() >= roleLevel.getValue()) + if(user.getRole().getValue() >= roleLevel.getValue()) { return true; } diff --git a/src/core/CommandManager.java b/src/core/CommandManager.java index 854059d..5314457 100644 --- a/src/core/CommandManager.java +++ b/src/core/CommandManager.java @@ -77,7 +77,7 @@ public class CommandManager public boolean InvokeOnNewThread(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response responseContext) { // This is here to prevent spinning up a thread if this wasn't even a command. - if(input == null || !input.IsValid()) + if(input == null || !input.isValid()) return false; Command command = commands.get(input.key); @@ -99,7 +99,7 @@ public class CommandManager // Calls the command specified with the key, providing user information arguments, etc. void Invoke(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response responseContext) { - if(input == null || !input.IsValid()) + if(input == null || !input.isValid()) return; Command command = commands.get(input.key); diff --git a/src/core/LocCommands.java b/src/core/LocCommands.java index 59f30a8..831eadb 100644 --- a/src/core/LocCommands.java +++ b/src/core/LocCommands.java @@ -47,7 +47,7 @@ public class LocCommands extends BaseLocFile public static ArrayList GetUnlocalizedCommands() { ArrayList raw = new ArrayList<>(); - instance.stringStore.ForEach((pair) -> raw.add((String)((Pair)pair).First )); + instance.stringStore.forEach((pair) -> raw.add((String)((Pair)pair).First )); return raw; } diff --git a/src/core/ObjectBuilderFactory.java b/src/core/ObjectBuilderFactory.java index ad93b09..140204e 100644 --- a/src/core/ObjectBuilderFactory.java +++ b/src/core/ObjectBuilderFactory.java @@ -172,7 +172,7 @@ public class ObjectBuilderFactory { KittyUser cachedUser = userCache.get(uid); if(cachedUser != null) - role = cachedUser.GetRole(); + role = cachedUser.getRole(); } return role; diff --git a/src/core/RPManager.java b/src/core/RPManager.java index 126d90e..1fe718d 100644 --- a/src/core/RPManager.java +++ b/src/core/RPManager.java @@ -39,7 +39,7 @@ public class RPManager public void addLine(KittyChannel channel, KittyUser user, UserInput input) { - if(logs.containsKey(Long.parseLong(channel.uniqueID)) && !input.IsValid()) + if(logs.containsKey(Long.parseLong(channel.uniqueID)) && !input.isValid()) logs.get(Long.parseLong(channel.uniqueID)).addLine(user, input.message); } diff --git a/src/dataStructures/KittyChannel.java b/src/dataStructures/KittyChannel.java index fb1a225..92c93de 100644 --- a/src/dataStructures/KittyChannel.java +++ b/src/dataStructures/KittyChannel.java @@ -18,13 +18,13 @@ public class KittyChannel //extends DatabaseTrackedObject } // @Override -// public String Serialize() +// public String serialize() // { // return ""; // } // // @Override -// public void DeSerialzie(String string) +// public void deSerialzie(String string) // { // // } diff --git a/src/dataStructures/KittyGuild.java b/src/dataStructures/KittyGuild.java index cdbb78e..155679e 100644 --- a/src/dataStructures/KittyGuild.java +++ b/src/dataStructures/KittyGuild.java @@ -119,9 +119,9 @@ public class KittyGuild extends DatabaseTrackedObject public boolean joinRaffle(KittyUser user) { - if(!raffleUsersChosen.contains(user) && !raffleUsersUnchosen.contains(user) && user.GetBeans() > raffleCost && raffling) + if(!raffleUsersChosen.contains(user) && !raffleUsersUnchosen.contains(user) && user.getBeans() > raffleCost && raffling) { - user.ChangeBeans(raffleCost); + user.changeBeans(raffleCost); raffleUsersUnchosen.add(user); return true; } diff --git a/src/dataStructures/KittyRP.java b/src/dataStructures/KittyRP.java index 9eb0be8..0958281 100644 --- a/src/dataStructures/KittyRP.java +++ b/src/dataStructures/KittyRP.java @@ -45,7 +45,7 @@ public class KittyRP public File endRP(KittyUser user) throws FileNotFoundException, UnsupportedEncodingException { - if(!users.contains(Long.parseLong(user.discordID)) && user.GetRole().getValue() < 2) + if(!users.contains(Long.parseLong(user.discordID)) && user.getRole().getValue() < 2) { return null; } diff --git a/src/dataStructures/KittyTrackedLong.java b/src/dataStructures/KittyTrackedLong.java index b61b771..c7f60bb 100644 --- a/src/dataStructures/KittyTrackedLong.java +++ b/src/dataStructures/KittyTrackedLong.java @@ -27,26 +27,26 @@ public class KittyTrackedLong extends DatabaseTrackedObject super(differentiator + readableName + UniqueID); } - public long Add(long toAdd) + public long add(long toAdd) { tracked += toAdd; markDirty(); return tracked; } - public long Subtract(long toSubtract) + public long subtract(long toSubtract) { tracked -= toSubtract; markDirty(); return tracked; } - public long Get() + public long get() { return tracked; } - public long Set(long newValue) + public long set(long newValue) { tracked = newValue; markDirty(); diff --git a/src/dataStructures/KittyUser.java b/src/dataStructures/KittyUser.java index e8ba0fb..db91d4a 100644 --- a/src/dataStructures/KittyUser.java +++ b/src/dataStructures/KittyUser.java @@ -31,7 +31,7 @@ public class KittyUser extends DatabaseTrackedObject } // Can be positive or negative - public void ChangeBeans(int amount) + public void changeBeans(int amount) { beans += amount; @@ -39,7 +39,7 @@ public class KittyUser extends DatabaseTrackedObject markDirty(); } - public void ChangeRole(KittyRole newRole) + public void changeRole(KittyRole newRole) { if(newRole != role) { @@ -48,12 +48,12 @@ public class KittyUser extends DatabaseTrackedObject } } - public long GetBeans() + public long getBeans() { return beans; } - public KittyRole GetRole() + public KittyRole getRole() { return role; } diff --git a/src/dataStructures/TaggedPairStore.java b/src/dataStructures/TaggedPairStore.java index 8c92aa7..9318553 100644 --- a/src/dataStructures/TaggedPairStore.java +++ b/src/dataStructures/TaggedPairStore.java @@ -39,12 +39,12 @@ public class TaggedPairStore { taggedPairs = new HashMap>(); allPairs = new HashMap(); - Parse(input); + parse(input); } // Calls back on each item in the entire structure. Provides section, then a pair of the keyString and valueString. @SuppressWarnings({"rawtypes", "unchecked"}) - public void ForEach(BiConsumer> action) + public void forEach(BiConsumer> action) { Iterator it = taggedPairs.entrySet().iterator(); while (it.hasNext()) @@ -62,7 +62,7 @@ public class TaggedPairStore // Calls back each item in the structure but does not priv @SuppressWarnings({"rawtypes"}) - public void ForEach(Consumer> action) + public void forEach(Consumer> action) { Iterator it = allPairs.entrySet().iterator(); while (it.hasNext()) @@ -123,7 +123,7 @@ public class TaggedPairStore // Parses out the string passed in into the sectionkeyValue HashMap. // Any character used in a split call is escaped just in case on // account of some characters having specific regex meanings. - private void Parse(String input) + private void parse(String input) { if(input == null) return; @@ -143,7 +143,7 @@ public class TaggedPairStore // Parse section name. If it already exists, don't bother making it. String sectionName = section.substring(0, pos); - AddSection(sectionName); + addSection(sectionName); // Parse out the pairs within the section, split them all out. String unparsedPairs = section.substring(pos + 1); @@ -171,7 +171,7 @@ public class TaggedPairStore // Dumps out a string array @SuppressWarnings("unused") - private void Dump(String[] toPrint) + private void dump(String[] toPrint) { System.out.println("Length: " + toPrint.length); @@ -181,28 +181,28 @@ public class TaggedPairStore // Adds a KeyValue pair to the specified section if it's not already there. // Also creates the section if it's not already present. - public void AddKeyValue(String sectionName, String key, String value) + public void addKeyValue(String sectionName, String key, String value) { - AddSection(sectionName); + addSection(sectionName); taggedPairs.get(sectionName).putIfAbsent(key, value); allPairs.putIfAbsent(key, value); } // Adds a given section to the hashmap if it's not already present - public void AddSection(String sectionName) + public void addSection(String sectionName) { taggedPairs.putIfAbsent(sectionName, new HashMap()); } // Returns a HashMap of Keys to Values for a given section @SuppressWarnings("unchecked") - public HashMap GetSection(String sectionName) + public HashMap getSection(String sectionName) { return (HashMap) taggedPairs.get(sectionName).clone(); } // Look up a global key - public String GetKey(String key) + public String getKey(String key) { if(allPairs.containsKey(key)) return allPairs.get(key); diff --git a/src/dataStructures/UserInput.java b/src/dataStructures/UserInput.java index d820006..328d27a 100644 --- a/src/dataStructures/UserInput.java +++ b/src/dataStructures/UserInput.java @@ -35,13 +35,13 @@ public class UserInput return; if(!event.getMessage().getMentionedMembers().isEmpty()) - mentions = FindMentionedUsers(event); + mentions = findMentionedUsers(event); toParse = toParse.trim(); String commandIndicator = guildContext.getCommandIndicator(); if(toParse.startsWith(commandIndicator)) { - int loc = FindFirstWhitespace(toParse); + int loc = findFirstWhitespace(toParse); if(loc <= 0) { @@ -61,22 +61,22 @@ public class UserInput } } - //Used for injecting direct commands from plugins + // Used for injecting direct commands from plugins public UserInput(String input, KittyGuild contextGuild) { - int loc = FindFirstWhitespace(input); + int loc = findFirstWhitespace(input); key = input.substring(0, loc); args = input.substring(loc); isValid = true; } - public boolean IsValid() + public boolean isValid() { return isValid; } // Finds first whitespace in the string - private int FindFirstWhitespace(String str) + private int findFirstWhitespace(String str) { for (int i = 0; i < str.length(); ++i) { @@ -87,7 +87,7 @@ public class UserInput return -1; } - private KittyUser[] FindMentionedUsers(GuildMessageReceivedEvent event) + private KittyUser[] findMentionedUsers(GuildMessageReceivedEvent event) { List JDAMentions = event.getMessage().getMentionedMembers(); KittyUser [] KittyMentions = new KittyUser[JDAMentions.size()]; diff --git a/src/main/Main.java b/src/main/Main.java index fb78efd..8c1310c 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -82,7 +82,7 @@ public class Main extends ListenerAdapter return; // Track beans! - user.ChangeBeans(1); + user.changeBeans(1); // RP logging system RPManager.instance.addLine(channel, user, input); diff --git a/src/main/Superintendent.java b/src/main/Superintendent.java index f678058..c3c4797 100644 --- a/src/main/Superintendent.java +++ b/src/main/Superintendent.java @@ -55,14 +55,14 @@ public class Superintendent // If the guild member is the owner, give them admin role by default. if(event.getMember().isOwner()) - user.ChangeRole(KittyRole.Admin); + user.changeRole(KittyRole.Admin); // Give devs the dev role for(int i = 0; i < Ref.devIDs.length; ++i) { if(event.getAuthor().getId().equals(Ref.devIDs[i])) { - user.ChangeRole(KittyRole.Dev); + user.changeRole(KittyRole.Dev); break; } } From feca9e542a8aa6a2daec789b9b419564addec848 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Wed, 19 Jun 2019 21:48:37 -0700 Subject: [PATCH 21/24] = Core subsystem formatting update --- src/commands/CommandChangeIndicator.java | 2 +- src/commands/CommandChoose.java | 2 +- src/commands/CommandHelp.java | 2 +- src/commands/CommandHelpBuilder.java | 6 +- src/commands/CommandShutdown.java | 6 +- src/commands/CommandStats.java | 16 +-- src/core/BaseKeyValueFile.java | 4 +- src/core/BaseLocFile.java | 52 ++++---- src/core/Command.java | 18 +-- src/core/CommandEnabler.java | 20 +-- src/core/CommandManager.java | 24 ++-- src/core/CommandThread.java | 8 +- src/core/DatabaseDriverKeyValue.java | 38 +++--- src/core/DatabaseManager.java | 14 +-- src/core/LocCommands.java | 14 +-- src/core/LocStrings.java | 16 +-- src/core/ObjectBuilderFactory.java | 149 ++++++++++++----------- src/core/RPManager.java | 2 +- src/core/Stats.java | 34 +++--- src/main/Main.java | 14 +-- src/main/Superintendent.java | 18 +-- 21 files changed, 230 insertions(+), 229 deletions(-) diff --git a/src/commands/CommandChangeIndicator.java b/src/commands/CommandChangeIndicator.java index f4133bf..e3d73e8 100644 --- a/src/commands/CommandChangeIndicator.java +++ b/src/commands/CommandChangeIndicator.java @@ -24,7 +24,7 @@ public class CommandChangeIndicator extends Command String indicator = arg.substring(0, 1); if(indicator.charAt(0) == '\n' || indicator.charAt(0) == '\t' || indicator.charAt(0) == '\r') { - res.send(LocStrings.Lookup("ChangeIndicatorError")); + res.send(LocStrings.lookup("ChangeIndicatorError")); return; } diff --git a/src/commands/CommandChoose.java b/src/commands/CommandChoose.java index 30893a7..bb71dd4 100644 --- a/src/commands/CommandChoose.java +++ b/src/commands/CommandChoose.java @@ -21,7 +21,7 @@ public class CommandChoose extends Command { if(input.args.trim().length() == 0) { - res.send(Stats.instance.GetHelpText(input.key)); + res.send(Stats.instance.getHelpText(input.key)); return; } diff --git a/src/commands/CommandHelp.java b/src/commands/CommandHelp.java index 0340e2e..41d33ec 100644 --- a/src/commands/CommandHelp.java +++ b/src/commands/CommandHelp.java @@ -20,7 +20,7 @@ public class CommandHelp extends Command @Override public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - String help = Stats.instance.GetHelpText(input.args); + String help = Stats.instance.getHelpText(input.args); if(help == null) { diff --git a/src/commands/CommandHelpBuilder.java b/src/commands/CommandHelpBuilder.java index 3898c12..e736c5e 100644 --- a/src/commands/CommandHelpBuilder.java +++ b/src/commands/CommandHelpBuilder.java @@ -39,11 +39,11 @@ public class CommandHelpBuilder extends Command { commandsByRole.put(KittyRole.values()[i], new ArrayList()); // Sort commands out - ArrayList commands = Stats.instance.GetAllCommands(); + ArrayList commands = Stats.instance.getAllCommands(); for(int i = 0; i < commands.size(); ++i) { Command current = commands.get(i); - commandsByRole.get(current.RequiredRole()).add(current); + commandsByRole.get(current.requiredRole()).add(current); } // Format outstring and send it back for now @@ -112,7 +112,7 @@ public class CommandHelpBuilder extends Command { commandsSoFar.add(command); // Write out all the keys and the help text - ArrayList keys = command.RegisteredNames(); + ArrayList keys = command.registeredNames(); for(int j = 0; j < keys.size(); ++j) { if(j != 0) diff --git a/src/commands/CommandShutdown.java b/src/commands/CommandShutdown.java index ddb8e41..afcb43f 100644 --- a/src/commands/CommandShutdown.java +++ b/src/commands/CommandShutdown.java @@ -27,7 +27,7 @@ public class CommandShutdown extends Command public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { // Flag the shutdown immediately. - Stats.instance.IndicateShutdown(); + Stats.instance.indicateShutdown(); boolean isSafe = false; switch(input.args.toLowerCase().trim()) @@ -48,14 +48,14 @@ public class CommandShutdown extends Command // Force upkeep, this works so long as upkeep is on the main thread. res.sendImmediate(LocStrings.stub("ShutdownSafe")); DatabaseManager.instance.upkeep(); - GlobalLog.Warn(LogFilter.Command, LocStrings.Lookup("ShutdownSafe")); + GlobalLog.Warn(LogFilter.Command, LocStrings.lookup("ShutdownSafe")); System.exit(0); } else { res.sendImmediate(LocStrings.stub("ShutdownUnsafe"));// "``"); - GlobalLog.Warn(LogFilter.Command, LocStrings.Lookup("ShutdownSafe")); + GlobalLog.Warn(LogFilter.Command, LocStrings.lookup("ShutdownSafe")); System.exit(0); } } diff --git a/src/commands/CommandStats.java b/src/commands/CommandStats.java index 1eea9e7..3e6217a 100644 --- a/src/commands/CommandStats.java +++ b/src/commands/CommandStats.java @@ -28,8 +28,8 @@ public class CommandStats extends Command // Variables Stats stats = Stats.instance; String out = ""; - long seen = stats.GetMessagesSeen(); - long processed = stats.GetCommandsProcessed(); + long seen = stats.getMessagesSeen(); + long processed = stats.getCommandsProcessed(); // General out += "General"; @@ -37,20 +37,20 @@ public class CommandStats extends Command out += " Messages observed: " + seen + "\n"; out += "Commands processed: " + processed + "\n"; out += " Command invoke %: " + ((int)((processed / (float)seen) * 1000)) / 10.0f + "%\n"; - out += " Bot uptime: " + stats.GetFormattedUptime() + "\n"; + out += " Bot uptime: " + stats.getFormattedUptime() + "\n"; out += "```\n"; // Health out += "Health"; out += "```\n"; - out += " SMT cores: " + stats.GetCPUAvailable() + "\n"; + out += " SMT cores: " + stats.getCPUAvailable() + "\n"; // If CPU load works on this OS, list it. -1.0 is the error state - double CPULoad = stats.GetSystemCPULoad(); + double CPULoad = stats.getSystemCPULoad(); out += CPULoad > -0.9 ? " CPU Load: " + (CPULoad * 100) + "%\n" : ""; - ThreadData data = stats.GetThreadData(); + ThreadData data = stats.getThreadData(); Integer terminated = data.states.get(Thread.State.TERMINATED); Integer runnable = data.states.get(Thread.State.RUNNABLE); Integer blocked = data.states.get(Thread.State.BLOCKED); @@ -69,8 +69,8 @@ public class CommandStats extends Command // Cache - Integer guildCount = stats.GetGuildCount(); - Integer userCount = stats.GetUserCount(); + Integer guildCount = stats.getGuildCount(); + Integer userCount = stats.getUserCount(); out += "Cache"; out += "```\n" diff --git a/src/core/BaseKeyValueFile.java b/src/core/BaseKeyValueFile.java index cb27fc5..9519fb6 100644 --- a/src/core/BaseKeyValueFile.java +++ b/src/core/BaseKeyValueFile.java @@ -33,7 +33,7 @@ public class BaseKeyValueFile } // Reads in and calls the specifid function for each keyvalue pair we find - protected void Parse(Consumer> keyValueCallback) + protected void parse(Consumer> keyValueCallback) { File f = new File(filename); if(f.isFile() && f.canRead()) @@ -60,7 +60,7 @@ public class BaseKeyValueFile } // Writes out a set of keyvalue pairs - protected void Write(List> toWrite) + protected void write(List> toWrite) { try { diff --git a/src/core/BaseLocFile.java b/src/core/BaseLocFile.java index f05eafc..672fd30 100644 --- a/src/core/BaseLocFile.java +++ b/src/core/BaseLocFile.java @@ -30,9 +30,9 @@ public abstract class BaseLocFile protected TaggedPairStore stringStore; // Logging - private void Log(String str) { GlobalLog.Log(LogFilter.Strings, str); } - private void Warn(String str) { GlobalLog.Warn(LogFilter.Strings, str); } - private void Error(String str) { GlobalLog.Error(LogFilter.Strings, str); } + private void log(String str) { GlobalLog.Log(LogFilter.Strings, str); } + private void warn(String str) { GlobalLog.Warn(LogFilter.Strings, str); } + private void error(String str) { GlobalLog.Error(LogFilter.Strings, str); } // File monitoring protected FileMonitor fileMonitor; @@ -45,19 +45,19 @@ public abstract class BaseLocFile } // Checks the file specified for updates - public void Update() + public void update() { synchronized(stringStore) { - fileMonitor.Update(this::OnFileChange); + fileMonitor.Update(this::onFileChange); } } // When the file is changed - protected void OnFileChange(MonitoredFile file) + protected void onFileChange(MonitoredFile file) { - Log("Loc file was modified at path " + file.path); - UpdateLocFromDisk(); + log("Loc file was modified at path " + file.path); + updateLocFromDisk(); } // Structure used for holding a pair of strings and any other info we need @@ -75,7 +75,7 @@ public abstract class BaseLocFile } // Do processing on each path in the scraped directory here, assuming it's .java - public void StripForContents(Path path, ArrayList strings) + public void stripForContents(Path path, ArrayList strings) { String filename = path.getFileName().toString(); if(filename.contains(".java")) @@ -101,11 +101,11 @@ public abstract class BaseLocFile strings.add(new LocInfo(filename.substring(0, filename.lastIndexOf('.')), toLocalize)); - Log("Found lookup call in " + path + ": " + toLocalize); + log("Found lookup call in " + path + ": " + toLocalize); } catch(IndexOutOfBoundsException e) { - Warn("Found phrase but couldn't parse in file " + path); + warn("Found phrase but couldn't parse in file " + path); } } } @@ -116,7 +116,7 @@ public abstract class BaseLocFile // Nothing for now, but in the future will return a parsed and localized version of // the string in question if one can be found. If the localized string is empty, // returns a the key instead which is the default phrase. - public String GetKey(String input) + public String getKey(String input) { if(stringStore == null) return input; @@ -129,7 +129,7 @@ public abstract class BaseLocFile } // Reads a file to string, adapted from https://stackoverflow.com/a/326440/5383198 - private String ReadFileAsString(String path, Charset encoding) + private String readFileAsString(String path, Charset encoding) { try { @@ -138,7 +138,7 @@ public abstract class BaseLocFile } catch (IOException e) { - Warn("No file found to read from!"); + warn("No file found to read from!"); } return null; @@ -146,13 +146,13 @@ public abstract class BaseLocFile // Update localization from the disk on file. Creates the file if it doesn't exist. // This file is internally formatted as an ini file. - public void UpdateLocFromDisk() + public void updateLocFromDisk() { - Log("Attempting to read localization file: " + filename); + log("Attempting to read localization file: " + filename); try { - String fileContents = ReadFileAsString(filename, Charset.defaultCharset()); + String fileContents = readFileAsString(filename, Charset.defaultCharset()); if(fileContents == null) { @@ -164,15 +164,15 @@ public abstract class BaseLocFile } catch(IOException e) { - Error("IO exception during localization file read"); + error("IO exception during localization file read"); } } // Rewrites out at the specified filename with existing stubs. // This preserves existing localized phrases. - public void SaveLocToDisk() + public void saveLocToDisk() { - Log("Attempting to write updated localization file"); + log("Attempting to write updated localization file"); try { @@ -182,28 +182,28 @@ public abstract class BaseLocFile } catch(IOException e) { - Error("IO exception during localization file write"); + error("IO exception during localization file write"); } } - private void TryStripSpecified(Path path, ArrayList toFill) + private void tryStripSpecified(Path path, ArrayList toFill) { try { - StripForContents(path, toFill); + stripForContents(path, toFill); } catch(Exception e) { - Error("issue with file: " + path.toString()); + error("issue with file: " + path.toString()); } } // Scrape the project and generate all the possible localizeable phrases. // This stubs out phrases to be localized. - public void ScrapeAll() + public void scrapeAll() { ArrayList localizeList = new ArrayList(); - FileUtils.AcquireAllFiles(KittySourceDirectory).forEach((path) -> TryStripSpecified(path, localizeList)); + FileUtils.AcquireAllFiles(KittySourceDirectory).forEach((path) -> tryStripSpecified(path, localizeList)); for(LocInfo toStub : localizeList) stringStore.addKeyValue(toStub.file, toStub.phrase, toStub.phrase); diff --git a/src/core/Command.java b/src/core/Command.java index 829c65f..954edb5 100644 --- a/src/core/Command.java +++ b/src/core/Command.java @@ -26,18 +26,18 @@ public abstract class Command this.contentRating = contentRating; } - private void Reject(KittyUser user, String reason) + private void reject(KittyUser user, String reason) { GlobalLog.Warn(LogFilter.Command, this.getClass().getSimpleName() + " from " + user.name + " rejected due to command's " + reason); } // Determine if we're exclusive enough for this command and // if the command is permitted by the guild we're in - private boolean CanCall(KittyGuild guild, KittyChannel channel, KittyUser user) + private boolean canCall(KittyGuild guild, KittyChannel channel, KittyUser user) { if(guild.contentRating.getValue() < contentRating.getValue()) { - Reject(user, "content rating"); + reject(user, "content rating"); return false; } @@ -48,31 +48,31 @@ public abstract class Command return true; } - Reject(user, "permissions"); + reject(user, "permissions"); return false; } // Called by the Command manager - this will run the command // if the issuing user has the permission to do so! - protected final void Invoke(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + protected final void invoke(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { - if(!CanCall(guild, channel, user)) + if(!canCall(guild, channel, user)) return; onRun(guild, channel, user, input, res); } - public ArrayList RegisteredNames() + public ArrayList registeredNames() { return registeredNames; } - public KittyRating Rating() + public KittyRating rating() { return contentRating; } - public KittyRole RequiredRole() + public KittyRole requiredRole() { return roleLevel; } diff --git a/src/core/CommandEnabler.java b/src/core/CommandEnabler.java index 25a83cc..160c921 100644 --- a/src/core/CommandEnabler.java +++ b/src/core/CommandEnabler.java @@ -35,15 +35,15 @@ public class CommandEnabler extends BaseKeyValueFile keyList = new ArrayList<>(); // Startup - ReadIn(); - GetTrackedCommands(); - WriteOut(); + readIn(); + getTrackedCommands(); + writeOut(); } // Reads in the config file and parses it, keeping tabs on the order it read things - private void ReadIn() + private void readIn() { - Parse((pair) ->{ + parse((pair) ->{ String key = pair.First; String value = pair.Second; @@ -58,9 +58,9 @@ public class CommandEnabler extends BaseKeyValueFile // Look up the already scraped values from the localizer and store them if they // don't already exist in the lookup. Defaults to defaultEnabledState. - private void GetTrackedCommands() + private void getTrackedCommands() { - ArrayList unloc = LocCommands.GetUnlocalizedCommands(); + ArrayList unloc = LocCommands.getUnlocalizedCommands(); for(int i = 0; i < unloc.size(); ++i) { @@ -75,7 +75,7 @@ public class CommandEnabler extends BaseKeyValueFile } // Write out enabled/disabled file info. - private void WriteOut() + private void writeOut() { List> list = new Vector>(); @@ -92,11 +92,11 @@ public class CommandEnabler extends BaseKeyValueFile Collections.sort(list, (c1, c2) -> { return c1.First.compareTo(c2.First); }); - Write(list); + write(list); } // Looks up a key to see if it's enabled or not - public boolean IsEnabled(String key) + public boolean isEnabled(String key) { String toCheck = key.toLowerCase(); diff --git a/src/core/CommandManager.java b/src/core/CommandManager.java index 5314457..e4ada68 100644 --- a/src/core/CommandManager.java +++ b/src/core/CommandManager.java @@ -31,7 +31,7 @@ public class CommandManager // Allows the command manager to keep track of a command. Takes a pair (the un-localized and localzied commands) // and the command associated with the localized commands. - public void Register(Pair pair, Command command) + public void register(Pair pair, Command command) { if(pair == null || pair.Second == null) return; @@ -39,7 +39,7 @@ public class CommandManager // If we haven't already split a multisplit command (or even assessed that), // then verify if we even need to register the commands at all. If it's // not enabled, don't register it. - if(pair.First != null && !commandEnabler.IsEnabled(pair.First)) + if(pair.First != null && !commandEnabler.isEnabled(pair.First)) return; String key = pair.Second; @@ -48,7 +48,7 @@ public class CommandManager { String[] keys = key.split(","); - Register(keys, command); + register(keys, command); return; } @@ -67,14 +67,14 @@ public class CommandManager } // Registers a command under multiple names! - public void Register(String[] keys, Command command) + public void register(String[] keys, Command command) { for(int i = 0; i < keys.length; ++i) - Register(new Pair(null, keys[i].trim()), command); + register(new Pair(null, keys[i].trim()), command); } // Calls the command but on a whole new thread! - public boolean InvokeOnNewThread(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response responseContext) + public boolean invokeOnNewThread(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response responseContext) { // This is here to prevent spinning up a thread if this wasn't even a command. if(input == null || !input.isValid()) @@ -97,7 +97,7 @@ public class CommandManager } // Calls the command specified with the key, providing user information arguments, etc. - void Invoke(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response responseContext) + void invoke(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response responseContext) { if(input == null || !input.isValid()) return; @@ -106,12 +106,12 @@ public class CommandManager if(command != null) { ++invokeCount; - command.Invoke(guild, channel, user, input, responseContext); + command.invoke(guild, channel, user, input, responseContext); } } // Looks up command by name. If it exists, dumps help text, otherwise returns null. - public String GetCommandHelpText(String key) + public String getCommandHelpText(String key) { Command command = commands.get(key); @@ -122,13 +122,13 @@ public class CommandManager } // Returns the number of commands sent so far during this program run - public long GetInvokeCount() + public long getInvokeCount() { return invokeCount; } // Returns all commands by name - public ArrayList GetAllRegisteredCommands() + public ArrayList getAllRegisteredCommands() { ArrayList cmds = new ArrayList(); for(Entry entry : commands.entrySet()) @@ -142,7 +142,7 @@ public class CommandManager { public HashMap states = new HashMap(); } - public ThreadData DumpThreadData() + public ThreadData dumpThreadData() { ThreadData data = new ThreadData(); diff --git a/src/core/CommandThread.java b/src/core/CommandThread.java index 2fc5707..2d044e5 100644 --- a/src/core/CommandThread.java +++ b/src/core/CommandThread.java @@ -31,17 +31,17 @@ public class CommandThread extends Thread @Override public void run() { - InvokeCommand(); + invokeCommand(); } - private void InvokeCommand() + private void invokeCommand() { - manager.Invoke(guild, channel, user, input, response); + manager.invoke(guild, channel, user, input, response); } // Handles the try catch requirement java has for sleeping @SuppressWarnings("unused") - private void ThreadSleep(int ms) + private void threadSleep(int ms) { try { diff --git a/src/core/DatabaseDriverKeyValue.java b/src/core/DatabaseDriverKeyValue.java index 01e63c1..c7f7469 100644 --- a/src/core/DatabaseDriverKeyValue.java +++ b/src/core/DatabaseDriverKeyValue.java @@ -35,14 +35,14 @@ public class DatabaseDriverKeyValue // Makes sure a table exists with the specified name. // The keyName specifies the key column label, and the valueName specifies the value column label. - public void EnsureTableExists(String tableName, String keyName, String valueName) + public void ensureTableExists(String tableName, String keyName, String valueName) { // Require a global table if it doesn't exist already driver.ExecuteStatement(JDBCStatementType.Create, "CREATE TABLE IF NOT EXISTS " + tableName + " (" + keyName + " text PRIMARY KEY, " + valueName + " text)", null); } // Set up and create a table in the database - public boolean Connect() + public boolean connect() { driver = new JDBCDriverSQLite(); if(driver.Connect() == false) @@ -51,45 +51,45 @@ public class DatabaseDriverKeyValue } // Verify tables we want to use exist - EnsureTableExists(tableName, keyColumnName, valueColumnName); // General table. Do not remove. + ensureTableExists(tableName, keyColumnName, valueColumnName); // General table. Do not remove. return true; } // The key will be created if it doesn't exist and the value specified will be stored. - public void CreateSetKey(String key, String value) + public void createSetKey(String key, String value) { GlobalLog.Log(LogFilter.Database, "CreateSetKey: Key-" + key + " value-" + value); - if(HasKey(key)) + if(hasKey(key)) { - UpdateKey(key, value); + updateKey(key, value); } else { - CreateKey(key, value); + createKey(key, value); } } // Creates a key. The key will be created if it doesn't exist, and the default value returned. - public String CreateGetKey(String key) + public String createGetKey(String key) { GlobalLog.Log(LogFilter.Database, "CreateGetKey: " + key); - if(HasKey(key)) + if(hasKey(key)) { - return GetKey(key); + return getKey(key); } else { String newValue = ""; - CreateKey(key, newValue); + createKey(key, newValue); return newValue; } } // Prototype formatting for key updating - private void UpdateKey(String key, String value) + private void updateKey(String key, String value) { String command = "UPDATE " + tableName + " SET " + valueColumnName + " = ? WHERE " + keyColumnName + " = ?"; boolean status = driver.ExecuteStatement(JDBCStatementType.Update, command, new String[] { value, key }); @@ -97,24 +97,24 @@ public class DatabaseDriverKeyValue } // Protoype updating for seeing if a key exists - private boolean HasKey(String key) + private boolean hasKey(String key) { String command = "SELECT COUNT(1) as count FROM " + tableName + " WHERE " + keyColumnName + " = ?"; ResultSet set = driver.ExecuteReturningStatement(JDBCStatementType.Select, command, new String[] { key }); - String out = ResultAsString(set, "count"); + String out = resultAsString(set, "count"); return out.charAt(0) == '1'; } // Prototype for getting a key - private String GetKey(String key) + private String getKey(String key) { String command = "SELECT " + valueColumnName + " as searchedKey FROM " + tableName +" WHERE " + keyColumnName + " = ?"; ResultSet set = driver.ExecuteReturningStatement(JDBCStatementType.Select, command, new String[] { key }); - return ResultAsString(set, "searchedKey"); + return resultAsString(set, "searchedKey"); } // Prototype for creating a key - private void CreateKey(String key, String value) + private void createKey(String key, String value) { String command = "INSERT INTO " + tableName + " (GlobalKey, GlobalValue) VALUES (?, ?)"; boolean status = driver.ExecuteStatement(JDBCStatementType.Insert, command, new String[] { key, value }); @@ -122,7 +122,7 @@ public class DatabaseDriverKeyValue } // Get all keys containing a substring - public List GetKeysWith(String keySubstring) + public List getKeysWith(String keySubstring) { String command = "SELECT * FROM " + tableName + " WHERE " + keyColumnName + " like ?"; ResultSet result = driver.ExecuteReturningStatement(JDBCStatementType.Select, command, new String[] { "%" + keySubstring + "%" }); @@ -146,7 +146,7 @@ public class DatabaseDriverKeyValue } // Transforms a result into a string if possible. - private String ResultAsString(ResultSet rs, String key) + private String resultAsString(ResultSet rs, String key) { if(rs == null) return ""; diff --git a/src/core/DatabaseManager.java b/src/core/DatabaseManager.java index e647cbb..f5a3a11 100644 --- a/src/core/DatabaseManager.java +++ b/src/core/DatabaseManager.java @@ -57,13 +57,13 @@ public class DatabaseManager characterDataDriver = new DatabaseDriverKeyValue(characterTableName, characterKeyColumnName, characterValueColumnName); // Connect data sets - if(globalDataDriver.Connect() == false) + if(globalDataDriver.connect() == false) { GlobalLog.Error("Global database failed to connect. Without this DB, this bot can not run."); System.exit(1); } - if(characterDataDriver.Connect() == false) + if(characterDataDriver.connect() == false) { GlobalLog.Error("Character database failed to connect. Without this DB, this bot can not run."); System.exit(1); @@ -131,7 +131,7 @@ public class DatabaseManager public List scrapeGlobalForString(String substring) { - return globalDataDriver.GetKeysWith(substring); + return globalDataDriver.getKeysWith(substring); } ///////////////// @@ -151,7 +151,7 @@ public class DatabaseManager { synchronized(globalDataDriver) { - return globalDataDriver.CreateGetKey(key); + return globalDataDriver.createGetKey(key); } } @@ -159,7 +159,7 @@ public class DatabaseManager { synchronized(globalDataDriver) { - globalDataDriver.CreateSetKey(key, value); + globalDataDriver.createSetKey(key, value); } } @@ -181,7 +181,7 @@ public class DatabaseManager { synchronized(characterDataDriver) { - return characterDataDriver.CreateGetKey(key); + return characterDataDriver.createGetKey(key); } } @@ -189,7 +189,7 @@ public class DatabaseManager { synchronized(characterDataDriver) { - characterDataDriver.CreateSetKey(key, value); + characterDataDriver.createSetKey(key, value); } } diff --git a/src/core/LocCommands.java b/src/core/LocCommands.java index 831eadb..6c2b40e 100644 --- a/src/core/LocCommands.java +++ b/src/core/LocCommands.java @@ -25,9 +25,9 @@ public class LocCommands extends BaseLocFile { instance = this; - UpdateLocFromDisk(); - ScrapeAll(); - SaveLocToDisk(); + updateLocFromDisk(); + scrapeAll(); + saveLocToDisk(); fileMonitor = new FileMonitor(filename); } @@ -40,19 +40,19 @@ public class LocCommands extends BaseLocFile // Returns a pair, the raw key and the stub key public static Pair stub(String toStub) { - return new Pair(toStub, instance.GetKey(toStub)); + return new Pair(toStub, instance.getKey(toStub)); } // Gets all of the un-translated defaults in the commands list. - public static ArrayList GetUnlocalizedCommands() + public static ArrayList getUnlocalizedCommands() { ArrayList raw = new ArrayList<>(); instance.stringStore.forEach((pair) -> raw.add((String)((Pair)pair).First )); return raw; } - public static void Upkeep() + public static void upkeep() { - instance.Update(); + instance.update(); } } diff --git a/src/core/LocStrings.java b/src/core/LocStrings.java index 642a75a..95f1594 100644 --- a/src/core/LocStrings.java +++ b/src/core/LocStrings.java @@ -24,9 +24,9 @@ public class LocStrings extends BaseLocFile { instance = this; - UpdateLocFromDisk(); - ScrapeAll(); - SaveLocToDisk(); + updateLocFromDisk(); + scrapeAll(); + saveLocToDisk(); fileMonitor = new FileMonitor(filename); } @@ -38,17 +38,17 @@ public class LocStrings extends BaseLocFile public static String stub(String toStub) { - return Lookup(toStub); + return lookup(toStub); } // Won't be picked up when scraping - public static String Lookup(String stubbedPreviously) + public static String lookup(String stubbedPreviously) { - return instance.GetKey(stubbedPreviously); + return instance.getKey(stubbedPreviously); } - public static void Upkeep() + public static void upkeep() { - instance.Update(); + instance.update(); } } \ No newline at end of file diff --git a/src/core/ObjectBuilderFactory.java b/src/core/ObjectBuilderFactory.java index 140204e..87cc63a 100644 --- a/src/core/ObjectBuilderFactory.java +++ b/src/core/ObjectBuilderFactory.java @@ -67,7 +67,7 @@ public class ObjectBuilderFactory private static JDA kitty; // This is it, this is how the lazy init starts! - private static void LazyInit() + private static void lazyInit() { if(hasInitialized) return; @@ -111,7 +111,7 @@ public class ObjectBuilderFactory // Explicitly locks: guildCache public static KittyGuild extractGuild(GuildMessageReceivedEvent event) { - LazyInit(); + lazyInit(); // Look up the guild. This process can only happen in a single-threaded way // because of the nature of the cache. We wait until the last second to @@ -155,7 +155,7 @@ public class ObjectBuilderFactory // Explicitly locks: guildCache public static KittyRole extractRole(GuildMessageReceivedEvent event) { - LazyInit(); + lazyInit(); // Looks up the user role. If none is found we check to see if they own // the guild if not, they're assumed to be @@ -182,7 +182,7 @@ public class ObjectBuilderFactory // Extracts the content rating information it can from the provided event. public static KittyRating extractContentRating(GuildMessageReceivedEvent event) { - LazyInit(); + lazyInit(); // Look up content rating of the guild, returns a safe content rating. KittyRating contentRating = KittyRating.Safe; @@ -200,7 +200,7 @@ public class ObjectBuilderFactory // Implicitly locks guild cache by calling ExtractGuild public static KittyChannel extractChannel(GuildMessageReceivedEvent event) { - LazyInit(); + lazyInit(); String channelID = event.getChannel().getId(); String guildID = event.getGuild().getId(); @@ -228,7 +228,7 @@ public class ObjectBuilderFactory // Implicitly locks guild cache by calling ExtractRole and ExtractGuild public static KittyUser extractUser(GuildMessageReceivedEvent event) { - LazyInit(); + lazyInit(); String uid = event.getGuild().getId() + event.getAuthor().getId(); KittyUser user = null; @@ -280,7 +280,7 @@ public class ObjectBuilderFactory // TODO: Clean up public static KittyUser extractUserByJDAUser(String guildID, String name, String userID, String avatarID, String discordID) { - LazyInit(); + lazyInit(); String uid = guildID + userID; KittyUser user = null; @@ -332,6 +332,7 @@ public class ObjectBuilderFactory return user; } + // Updates a user's name appropriately based on nickname if available public static void updateUser(KittyUser user, Member member) { if(member.getNickname() == null) @@ -350,10 +351,10 @@ public class ObjectBuilderFactory ////////////////////////// // Construction Methods // ////////////////////////// - - public static KittyCore ConstructKittyCore() throws LoginException, InterruptedException + // Builds the core of the bot + public static KittyCore constructKittyCore() throws LoginException, InterruptedException { - LazyInit(); + lazyInit(); kitty = new JDABuilder(AccountType.BOT).setToken(Ref.TestToken).buildBlocking(); kitty.getPresence().setGame(Game.playing("with digital yarn")); @@ -368,75 +369,75 @@ public class ObjectBuilderFactory // only have one CommandEnabler. public static CommandManager constructCommandManager(CommandEnabler commandEnabler) { - LazyInit(); + lazyInit(); CommandManager manager = new CommandManager(commandEnabler); // Dev - manager.Register(LocCommands.stub("work"), new CommandDoWork(KittyRole.Dev, KittyRating.Safe)); - manager.Register(LocCommands.stub("shutdown"), new CommandShutdown(KittyRole.Dev, KittyRating.Safe)); - manager.Register(LocCommands.stub("stats"), new CommandStats(KittyRole.Dev, KittyRating.Safe)); - manager.Register(LocCommands.stub("invite"), new CommandInvite(KittyRole.Dev, KittyRating.Safe)); - manager.Register(LocCommands.stub("buildHelp"), new CommandHelpBuilder(KittyRole.Dev, KittyRating.Safe)); - manager.Register(LocCommands.stub("tweet"), new CommandTweet(KittyRole.Dev, KittyRating.Safe)); - manager.Register(LocCommands.stub("dbflush"), new CommandDBFlush(KittyRole.Dev, KittyRating.Safe)); - manager.Register(LocCommands.stub("dbstats"), new CommandDBStats(KittyRole.Dev, KittyRating.Safe)); + manager.register(LocCommands.stub("work"), new CommandDoWork(KittyRole.Dev, KittyRating.Safe)); + manager.register(LocCommands.stub("shutdown"), new CommandShutdown(KittyRole.Dev, KittyRating.Safe)); + manager.register(LocCommands.stub("stats"), new CommandStats(KittyRole.Dev, KittyRating.Safe)); + manager.register(LocCommands.stub("invite"), new CommandInvite(KittyRole.Dev, KittyRating.Safe)); + manager.register(LocCommands.stub("buildHelp"), new CommandHelpBuilder(KittyRole.Dev, KittyRating.Safe)); + manager.register(LocCommands.stub("tweet"), new CommandTweet(KittyRole.Dev, KittyRating.Safe)); + manager.register(LocCommands.stub("dbflush"), new CommandDBFlush(KittyRole.Dev, KittyRating.Safe)); + manager.register(LocCommands.stub("dbstats"), new CommandDBStats(KittyRole.Dev, KittyRating.Safe)); // Admin - manager.Register(LocCommands.stub("rating"), new CommandRating(KittyRole.Admin, KittyRating.Safe)); - manager.Register(LocCommands.stub("indicator"), new CommandChangeIndicator(KittyRole.Admin, KittyRating.Safe)); - manager.Register(LocCommands.stub("guildroleallowed"), new CommandGuildRoleAllowed(KittyRole.Admin, KittyRating.Safe)); - manager.Register(LocCommands.stub("guildrolenotallowed"), new CommandGuildRoleNotAllowed(KittyRole.Admin, KittyRating.Safe)); + manager.register(LocCommands.stub("rating"), new CommandRating(KittyRole.Admin, KittyRating.Safe)); + manager.register(LocCommands.stub("indicator"), new CommandChangeIndicator(KittyRole.Admin, KittyRating.Safe)); + manager.register(LocCommands.stub("guildroleallowed"), new CommandGuildRoleAllowed(KittyRole.Admin, KittyRating.Safe)); + manager.register(LocCommands.stub("guildrolenotallowed"), new CommandGuildRoleNotAllowed(KittyRole.Admin, KittyRating.Safe)); // Mod - manager.Register(LocCommands.stub("poll"), new CommandPollManage(KittyRole.Mod, KittyRating.Safe)); - manager.Register(LocCommands.stub("givebeans"), new CommandGiveBeans(KittyRole.Mod, KittyRating.Safe)); - manager.Register(LocCommands.stub("rpg"), new CommandRPG(KittyRole.Mod, KittyRating.Safe)); - manager.Register(LocCommands.stub("rafflestart"), new CommandRaffleStart(KittyRole.Mod, KittyRating.Safe)); - manager.Register(LocCommands.stub("rafflespin"), new CommandRaffleSpin(KittyRole.Mod, KittyRating.Safe)); - manager.Register(LocCommands.stub("raffleend"), new CommandRaffleEnd(KittyRole.Mod, KittyRating.Safe)); + manager.register(LocCommands.stub("poll"), new CommandPollManage(KittyRole.Mod, KittyRating.Safe)); + manager.register(LocCommands.stub("givebeans"), new CommandGiveBeans(KittyRole.Mod, KittyRating.Safe)); + manager.register(LocCommands.stub("rpg"), new CommandRPG(KittyRole.Mod, KittyRating.Safe)); + manager.register(LocCommands.stub("rafflestart"), new CommandRaffleStart(KittyRole.Mod, KittyRating.Safe)); + manager.register(LocCommands.stub("rafflespin"), new CommandRaffleSpin(KittyRole.Mod, KittyRating.Safe)); + manager.register(LocCommands.stub("raffleend"), new CommandRaffleEnd(KittyRole.Mod, KittyRating.Safe)); // General - manager.Register(LocCommands.stub("fetch"), new CommandFetch(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("guildroleadd"), new CommandGuildRoleAdd(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("guildroleremove"), new CommandGuildRoleRemove(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("teey"), new CommandTeey(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("perish, thenperish"), new CommandPerish(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("yeet"), new CommandYeet(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("ping"), new CommandPing(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("boop"), new CommandBoop(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("roll"), new CommandRoll(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("choose"), new CommandChoose(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("help"), new CommandHelp(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("info, about"), new CommandInfo(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("vote"), new CommandPollVote(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("results"), new CommandPollResults(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("showpoll"), new CommandPollShow(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("wolfram"), new CommandWolfram(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("c++, g++, cplus, cpp"), new CommandColiru(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("java, jdoodle"), new CommandJDoodle(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("beans"), new CommandBeansShow(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("role"), new CommandRole(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("bet"), new CommandBetBeans(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("map"), new CommandMap(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("rpstart"), new CommandRPStart(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("rpend"), new CommandRPEnd(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("tony, stark, dontfeelgood, dontfeelsogood"), new CommandStark(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("blur"), new CommandBlurry(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("eightball, 8ball"), new CommandEightBall(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("catch"), new CommandCatch(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("guildrolelist"), new CommandGuildRoleList(KittyRole.General, KittyRating.Safe)); - manager.Register(LocCommands.stub("bethistory"), new CommandBetHistory(KittyRole.General, KittyRating.Safe)); - 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("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)); + manager.register(LocCommands.stub("fetch"), new CommandFetch(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("guildroleadd"), new CommandGuildRoleAdd(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("guildroleremove"), new CommandGuildRoleRemove(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("teey"), new CommandTeey(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("perish, thenperish"), new CommandPerish(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("yeet"), new CommandYeet(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("ping"), new CommandPing(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("boop"), new CommandBoop(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("roll"), new CommandRoll(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("choose"), new CommandChoose(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("help"), new CommandHelp(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("info, about"), new CommandInfo(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("vote"), new CommandPollVote(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("results"), new CommandPollResults(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("showpoll"), new CommandPollShow(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("wolfram"), new CommandWolfram(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("c++, g++, cplus, cpp"), new CommandColiru(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("java, jdoodle"), new CommandJDoodle(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("beans"), new CommandBeansShow(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("role"), new CommandRole(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("bet"), new CommandBetBeans(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("map"), new CommandMap(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("rpstart"), new CommandRPStart(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("rpend"), new CommandRPEnd(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("tony, stark, dontfeelgood, dontfeelsogood"), new CommandStark(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("blur"), new CommandBlurry(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("eightball, 8ball"), new CommandEightBall(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("catch"), new CommandCatch(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("guildrolelist"), new CommandGuildRoleList(KittyRole.General, KittyRating.Safe)); + manager.register(LocCommands.stub("bethistory"), new CommandBetHistory(KittyRole.General, KittyRating.Safe)); + 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("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)); return manager; } @@ -444,7 +445,7 @@ public class ObjectBuilderFactory // Constructs a CommandEnabler if it doesn't exist, and gets the existing one if it does. public static CommandEnabler constructCommandEnabler() { - LazyInit(); + lazyInit(); if(commandEnabler == null) commandEnabler = new CommandEnabler(); @@ -458,7 +459,7 @@ public class ObjectBuilderFactory // Effectively we cache the database here. public static DatabaseManager constructDatabaseManager() { - LazyInit(); + lazyInit(); if(database == null) database = new DatabaseManager(); @@ -468,7 +469,7 @@ public class ObjectBuilderFactory public static Stats constructStats(CommandManager manager) { - LazyInit(); + lazyInit(); if(stats == null) stats = new Stats(manager); @@ -478,7 +479,7 @@ public class ObjectBuilderFactory public static RPManager constructRPManager() { - LazyInit(); + lazyInit(); if(rpManager == null) rpManager = new RPManager(); @@ -488,7 +489,7 @@ public class ObjectBuilderFactory public static PluginManager constructPluginManager() { - LazyInit(); + lazyInit(); if(pluginManager == null) pluginManager = new PluginManager("./plugins/"); diff --git a/src/core/RPManager.java b/src/core/RPManager.java index 1fe718d..91c7a05 100644 --- a/src/core/RPManager.java +++ b/src/core/RPManager.java @@ -55,7 +55,7 @@ public class RPManager return log; } - public static void Upkeep(KittyCore kitty) + public static void upkeep(KittyCore kitty) { Response res = new Response(null, kitty); String reminder = ""; diff --git a/src/core/Stats.java b/src/core/Stats.java index 25aa46e..4c7353c 100644 --- a/src/core/Stats.java +++ b/src/core/Stats.java @@ -43,12 +43,12 @@ public class Stats osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class); } - public void NoteMessageEvent() + public void noteMessageEvent() { ++messagesSeen; } - public void IndicateShutdown() + public void indicateShutdown() { synchronized(instance) { @@ -56,7 +56,7 @@ public class Stats } } - public boolean GetIsShuttingDown() + public boolean getIsShuttingDown() { synchronized(instance) { @@ -69,7 +69,7 @@ public class Stats ///////////////////////////////////////// // Formatted as HH:MM:SS - public String GetFormattedUptime() + public String getFormattedUptime() { long dif = System.currentTimeMillis() - initTimeMS; @@ -80,48 +80,48 @@ public class Stats } // Get number of commands that kitty has run! - public long GetCommandsProcessed() + public long getCommandsProcessed() { - return commandManager.GetInvokeCount(); + return commandManager.getInvokeCount(); } - public long GetMessagesSeen() + public long getMessagesSeen() { return messagesSeen; } - public double GetSystemCPULoad() + public double getSystemCPULoad() { return osBean.getSystemLoadAverage(); } - public long GetCPUAvailable() + public long getCPUAvailable() { return osBean.getAvailableProcessors(); } - public ThreadData GetThreadData() + public ThreadData getThreadData() { - return commandManager.DumpThreadData(); + return commandManager.dumpThreadData(); } - public int GetGuildCount() + public int getGuildCount() { return ObjectBuilderFactory.getGuildCount(); } - public int GetUserCount() + public int getUserCount() { return ObjectBuilderFactory.getUserCount(); } - public ArrayList GetAllCommands() + public ArrayList getAllCommands() { - return commandManager.GetAllRegisteredCommands(); + return commandManager.getAllRegisteredCommands(); } - public String GetHelpText(String commandName) + public String getHelpText(String commandName) { - return commandManager.GetCommandHelpText(commandName); + return commandManager.getCommandHelpText(commandName); } } diff --git a/src/main/Main.java b/src/main/Main.java index 8c1310c..c0387a8 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -57,7 +57,7 @@ public class Main extends ListenerAdapter pluginManager = ObjectBuilderFactory.constructPluginManager(); // Bot startup - kittyCore = ObjectBuilderFactory.ConstructKittyCore(); + kittyCore = ObjectBuilderFactory.constructKittyCore(); } // When a message is sent in a server that kitty is in, this is what's called. @@ -65,7 +65,7 @@ public class Main extends ListenerAdapter public void onGuildMessageReceived(GuildMessageReceivedEvent event) { // Tweak the event as necessary - if(!Superintendent.PreProcessSetup(event, stats)) + if(!Superintendent.preProcessSetup(event, stats)) return; // Factory objects @@ -78,7 +78,7 @@ public class Main extends ListenerAdapter UserInput input = new UserInput(event, guild); // Tweak object construction as necessary - if(!Superintendent.PostProcessSetup(event, user, guild, channel, response, input)) + if(!Superintendent.postProcessSetup(event, user, guild, channel, response, input)) return; // Track beans! @@ -88,11 +88,11 @@ public class Main extends ListenerAdapter RPManager.instance.addLine(channel, user, input); // Run any pre-emptive upkeep we need to - Superintendent.PerCommandUpkeepPre(); + Superintendent.perCommandUpkeepPre(); // Attempt to spin up a command. If the command doesn't exist. // Run plugins right before invoking the commands but after all other setup. - if(commandManager.InvokeOnNewThread(guild, channel, user, input, response) == false) + if(commandManager.invokeOnNewThread(guild, channel, user, input, response) == false) { List pluginOutput = pluginManager.runAll(input.message, user); @@ -102,7 +102,7 @@ public class Main extends ListenerAdapter { if(pluginOutput.get(i).startsWith("!")) { - commandManager.InvokeOnNewThread(guild, channel, user, new UserInput(pluginOutput.get(i).substring(1), guild), response); + commandManager.invokeOnNewThread(guild, channel, user, new UserInput(pluginOutput.get(i).substring(1), guild), response); } else { @@ -113,6 +113,6 @@ public class Main extends ListenerAdapter } // Run any upkeep in post we need to - Superintendent.PerCommandUpkeepPost(kittyCore, databaseManager); + Superintendent.perCommandUpkeepPost(kittyCore, databaseManager); } } \ No newline at end of file diff --git a/src/main/Superintendent.java b/src/main/Superintendent.java index c3c4797..aae634c 100644 --- a/src/main/Superintendent.java +++ b/src/main/Superintendent.java @@ -21,17 +21,17 @@ import offline.Ref; public class Superintendent { // This is run on the JDA GuildMessageReceivedEvent before anything else happens. - public static boolean PreProcessSetup(GuildMessageReceivedEvent event, Stats stats) + public static boolean preProcessSetup(GuildMessageReceivedEvent event, Stats stats) { // Verify we have an event if(event == null) return false; // Track number of messages seen - stats.NoteMessageEvent(); + stats.noteMessageEvent(); // If we're mid-shutdown, no more commands. - if(stats.GetIsShuttingDown()) + if(stats.getIsShuttingDown()) return false; // Swat down highest ban level immediately before even hitting command parsing. @@ -47,7 +47,7 @@ public class Superintendent // This runs after all the objects have been constructed! // Modifications to objects here stick! - public static boolean PostProcessSetup(GuildMessageReceivedEvent event, KittyUser user, KittyGuild guild, KittyChannel channel, Response res, UserInput input) + public static boolean postProcessSetup(GuildMessageReceivedEvent event, KittyUser user, KittyGuild guild, KittyChannel channel, Response res, UserInput input) { // Verify we have everything. From here out, we promise we have that all. if(event == null || user == null || guild == null || channel == null || res == null || input == null) @@ -72,11 +72,11 @@ public class Superintendent // Only called once per command. Good for lazily updating. // Happens just before the command / plugin runs. - public static boolean PerCommandUpkeepPre() + public static boolean perCommandUpkeepPre() { // Upkeep localization system's file monitoring - LocStrings.Upkeep(); - LocCommands.Upkeep(); + LocStrings.upkeep(); + LocCommands.upkeep(); return true; } @@ -87,7 +87,7 @@ public class Superintendent // This is for stuff that we need to do on a regular basis, but don't // necessarily want running at all points in time. // Happens just after the command / plugin runs. - public static boolean PerCommandUpkeepPost(KittyCore kittyCore, DatabaseManager databaseManager) + public static boolean perCommandUpkeepPost(KittyCore kittyCore, DatabaseManager databaseManager) { // Upkeep database lazily on occasion if(delayTimerCurrent.decrementAndGet() < 0) @@ -97,7 +97,7 @@ public class Superintendent } // Update command-specific - RPManager.Upkeep(kittyCore); + RPManager.upkeep(kittyCore); return true; } From 5e531a19b7027911eb43f33a133bb8bbb59bd3b0 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Wed, 19 Jun 2019 21:58:26 -0700 Subject: [PATCH 22/24] = Converted formatting for the core rpg --- src/commands/CommandRPG.java | 2 +- src/commands/rpg/RPGCommandBattleFight.java | 4 +-- src/commands/rpg/RPGCommandBattleRun.java | 6 ++--- src/commands/rpg/RPGCommandExplore.java | 14 +++++----- src/commands/rpg/RPGCommandInfo.java | 22 +++++++-------- src/commands/rpg/RPGCommandStats.java | 26 +++++++++--------- src/core/rpg/RPGArmor.java | 2 +- src/core/rpg/RPGCommand.java | 2 +- src/core/rpg/RPGExpTable.java | 6 ++--- src/core/rpg/RPGFramework.java | 30 ++++++++++----------- src/core/rpg/RPGItem.java | 6 ++--- src/core/rpg/RPGLog.java | 2 +- src/core/rpg/RPGMain.java | 16 +++++------ src/core/rpg/RPGPlayer.java | 18 ++++++------- src/core/rpg/RPGUnit.java | 10 +++---- src/core/rpg/RPGWeapon.java | 4 +-- 16 files changed, 85 insertions(+), 85 deletions(-) diff --git a/src/commands/CommandRPG.java b/src/commands/CommandRPG.java index bb7ca35..6230dc0 100644 --- a/src/commands/CommandRPG.java +++ b/src/commands/CommandRPG.java @@ -39,7 +39,7 @@ public class CommandRPG extends Command String result = null; synchronized(framework) { - result = framework.Run(user.uniqueID, input.args.trim()); + result = framework.run(user.uniqueID, input.args.trim()); } if(result == null) diff --git a/src/commands/rpg/RPGCommandBattleFight.java b/src/commands/rpg/RPGCommandBattleFight.java index d353496..7c1fe64 100644 --- a/src/commands/rpg/RPGCommandBattleFight.java +++ b/src/commands/rpg/RPGCommandBattleFight.java @@ -7,7 +7,7 @@ import core.rpg.RPGState; public class RPGCommandBattleFight extends RPGCommand { @Override - public String OnRun(RPGState state, RPGInput input) + public String onRun(RPGState state, RPGInput input) { if(state.battleContext == null) return "```There's nothing to fight!```"; @@ -19,7 +19,7 @@ public class RPGCommandBattleFight extends RPGCommand reward = "+150xp"; state.battleContext = null; - state.player.ApplyEXP(150); + state.player.applyEXP(150); if(out != null && reward != null) { diff --git a/src/commands/rpg/RPGCommandBattleRun.java b/src/commands/rpg/RPGCommandBattleRun.java index b01a593..b655cab 100644 --- a/src/commands/rpg/RPGCommandBattleRun.java +++ b/src/commands/rpg/RPGCommandBattleRun.java @@ -7,15 +7,15 @@ import core.rpg.RPGState; public class RPGCommandBattleRun extends RPGCommand { @Override - public String OnRun(RPGState state, RPGInput input) + public String onRun(RPGState state, RPGInput input) { if(state.battleContext == null) return "```There's nothing to run from!```"; - long lostGold = (long)(state.player.GetGold() * .1); + long lostGold = (long)(state.player.getGold() * .1); String out = null; - state.player.SpendGold(lostGold); + state.player.spendGold(lostGold); state.battleContext = null; out = "You duck behind a tree and manage to escape from encounter just barely!"; diff --git a/src/commands/rpg/RPGCommandExplore.java b/src/commands/rpg/RPGCommandExplore.java index 55e38f9..3e5544c 100644 --- a/src/commands/rpg/RPGCommandExplore.java +++ b/src/commands/rpg/RPGCommandExplore.java @@ -28,7 +28,7 @@ public class RPGCommandExplore extends RPGCommand } @Override - public String OnRun(RPGState state, RPGInput input) + public String onRun(RPGState state, RPGInput input) { Chance chance = new Chance(100); @@ -50,7 +50,7 @@ public class RPGCommandExplore extends RPGCommand out = "As you take a stroll, you spy a small shiny glint from a bush and decide to investigate! Looks like it's your lucky day!"; reward = "+" + gp + "gp"; - state.player.GiveGold(gp); + state.player.giveGold(gp); } else if(chance.Next(20)) { @@ -59,8 +59,8 @@ public class RPGCommandExplore extends RPGCommand out = "You head out on a lovely stroll down a familiar path - the sun is out and the birds are chirping! Nothing much comes of it, but you feel refreshed."; reward = "+" + xp + "xp, +" + healing + "hp"; - state.player.ApplyHealing(healing); - state.player.ApplyEXP(xp); + state.player.applyHealing(healing); + state.player.applyEXP(xp); } else if(chance.Next(20)) { @@ -69,8 +69,8 @@ public class RPGCommandExplore extends RPGCommand out = "Today's the day you head out on a new path. You find a lot of little nicknacks and trinkets on the trail, but leave them be. The trail gets really steep, the rocks jagged, but you keep going. Eventually, you make it out to the other side into a small but pleasant town, and collapse on a bench to catch your breath."; reward = "+" + xp + "xp, -" + damage + "hp"; - state.player.ApplyEXP(xp); - state.player.ApplyDamage(damage); + state.player.applyEXP(xp); + state.player.applyDamage(damage); } else { @@ -78,7 +78,7 @@ public class RPGCommandExplore extends RPGCommand out = "You step outside but it starts to rain. You decide not to do much today, and hang about the inn and the tavern."; reward = "+" + hp + "hp"; - state.player.ApplyHealing(hp); + state.player.applyHealing(hp); } if(out != null && reward != null) diff --git a/src/commands/rpg/RPGCommandInfo.java b/src/commands/rpg/RPGCommandInfo.java index b668757..5fbaf7e 100644 --- a/src/commands/rpg/RPGCommandInfo.java +++ b/src/commands/rpg/RPGCommandInfo.java @@ -10,7 +10,7 @@ public class RPGCommandInfo extends RPGCommand { @Override - public String OnRun(RPGState state, RPGInput input) + public String onRun(RPGState state, RPGInput input) { String out = null; switch(input.value.trim().toLowerCase()) @@ -27,7 +27,7 @@ public class RPGCommandInfo extends RPGCommand case "hand": case "att": case "attack": - out = WeaponStats(state.player.GetWeapon()); + out = WeaponStats(state.player.getWeapon()); break; case "armour": @@ -44,7 +44,7 @@ public class RPGCommandInfo extends RPGCommand case "dress": case "wear": case "outfit": - out = ArmorStats(state.player.GetArmor()); + out = ArmorStats(state.player.getArmor()); break; } @@ -60,14 +60,14 @@ public class RPGCommandInfo extends RPGCommand return null; String out = ""; - out += "[" + weapon.GetName() + "]"; + out += "[" + weapon.getName() + "]"; out += "\n"; - out += " att: " + weapon.GetAttack(); + out += " att: " + weapon.getAttack(); out += "\n"; - out += "value: " + weapon.GetValue() + "gp"; + out += "value: " + weapon.getValue() + "gp"; out += "\n"; out += "\n"; - out += weapon.GetDescription(); + out += weapon.getDescription(); return out; } @@ -78,14 +78,14 @@ public class RPGCommandInfo extends RPGCommand return null; String out = ""; - out += "[" + armor.GetName() + "]"; + out += "[" + armor.getName() + "]"; out += "\n"; - out += " def: " + armor.GetDefense(); + out += " def: " + armor.getDefense(); out += "\n"; - out += "value: " + armor.GetValue() + "gp"; + out += "value: " + armor.getValue() + "gp"; out += "\n"; out += "\n"; - out += armor.GetDescription(); + out += armor.getDescription(); return out; } diff --git a/src/commands/rpg/RPGCommandStats.java b/src/commands/rpg/RPGCommandStats.java index 221d038..1e2cb9b 100644 --- a/src/commands/rpg/RPGCommandStats.java +++ b/src/commands/rpg/RPGCommandStats.java @@ -11,18 +11,18 @@ import core.rpg.RPGWeapon; public class RPGCommandStats extends RPGCommand { @Override - public String OnRun(RPGState state, RPGInput input) + public String onRun(RPGState state, RPGInput input) { RPGPlayer player = state.player; - long exp = player.GetEXP(); - long level = RPGExpTable.LevelFromEXP(player.GetEXP()); - long ceil = RPGExpTable.EXPCeil(level); + long exp = player.getEXP(); + long level = RPGExpTable.levelFromEXP(player.getEXP()); + long ceil = RPGExpTable.expCeil(level); String indent = ""; String linebreak = "\n"; String out = ""; - out += indent + "[" + player.GetName() + ", lv. " + level + "]"; + out += indent + "[" + player.getName() + ", lv. " + level + "]"; out += indent + linebreak; out += indent + "_______________"; out += indent + linebreak; @@ -31,26 +31,26 @@ public class RPGCommandStats extends RPGCommand out += indent + " (until next: " + (ceil - exp) + ")"; out += indent + linebreak; - out += indent + " Gold: " + player.GetGold(); + out += indent + " Gold: " + player.getGold(); out += indent + linebreak; - out += indent + "Health: " + player.GetHealthCurrent() + "/" + player.GetHealthMax(); + out += indent + "Health: " + player.getHealthCurrent() + "/" + player.getHealthMax(); out += indent + linebreak; - RPGWeapon weapon = player.GetWeapon(); + RPGWeapon weapon = player.getWeapon(); out += indent + "_____"; out += indent + linebreak; - out += indent + "Weapon: " + weapon.GetName(); + out += indent + "Weapon: " + weapon.getName(); out += indent + linebreak; - out += indent + " att: " + weapon.GetAttack(); + out += indent + " att: " + weapon.getAttack(); out += indent + linebreak; - RPGArmor armor = player.GetArmor(); + RPGArmor armor = player.getArmor(); out += indent + "_____"; out += indent + linebreak; - out += indent + "Armor: " + armor.GetName(); + out += indent + "Armor: " + armor.getName(); out += indent + linebreak; - out += indent + " def: " + armor.GetDefense() ; + out += indent + " def: " + armor.getDefense() ; out += indent + linebreak; out += indent + linebreak; diff --git a/src/core/rpg/RPGArmor.java b/src/core/rpg/RPGArmor.java index 62b957d..9d3788f 100644 --- a/src/core/rpg/RPGArmor.java +++ b/src/core/rpg/RPGArmor.java @@ -10,5 +10,5 @@ public class RPGArmor extends RPGItem defense = 1; } - public long GetDefense() { return defense; } + public long getDefense() { return defense; } } diff --git a/src/core/rpg/RPGCommand.java b/src/core/rpg/RPGCommand.java index d22448c..0a7170e 100644 --- a/src/core/rpg/RPGCommand.java +++ b/src/core/rpg/RPGCommand.java @@ -5,5 +5,5 @@ public abstract class RPGCommand public RPGCommand() { } // OVERRIDE ME - public abstract String OnRun(RPGState state, RPGInput input); + public abstract String onRun(RPGState state, RPGInput input); } diff --git a/src/core/rpg/RPGExpTable.java b/src/core/rpg/RPGExpTable.java index 5a1f60a..310d41e 100644 --- a/src/core/rpg/RPGExpTable.java +++ b/src/core/rpg/RPGExpTable.java @@ -2,7 +2,7 @@ package core.rpg; public final class RPGExpTable { - public static long EXPFloor(long level) + public static long expFloor(long level) { if(level > Levels.length - 1) level = Levels.length - 1; @@ -13,7 +13,7 @@ public final class RPGExpTable return Levels[(int) level]; } - public static long EXPCeil(long level) + public static long expCeil(long level) { if(level > Levels.length - 1) level = Levels.length - 1; @@ -23,7 +23,7 @@ public final class RPGExpTable return Levels[(int) (level + 1)]; } - public static long LevelFromEXP(long exp) + public static long levelFromEXP(long exp) { if(exp < 0) exp = 0; diff --git a/src/core/rpg/RPGFramework.java b/src/core/rpg/RPGFramework.java index 21f8312..424048f 100644 --- a/src/core/rpg/RPGFramework.java +++ b/src/core/rpg/RPGFramework.java @@ -22,24 +22,24 @@ public class RPGFramework this.gameStates = new HashMap(); this.gameCommands = new HashMap(); - RegisterCommand("stats", new RPGCommandStats()); - RegisterCommand("about", new RPGCommandInfo()); - RegisterCommand("info", new RPGCommandInfo()); - RegisterCommand("explore", new RPGCommandExplore()); - RegisterCommand("run", new RPGCommandBattleRun()); - RegisterCommand("fight", new RPGCommandBattleFight()); + registerCommand("stats", new RPGCommandStats()); + registerCommand("about", new RPGCommandInfo()); + registerCommand("info", new RPGCommandInfo()); + registerCommand("explore", new RPGCommandExplore()); + registerCommand("run", new RPGCommandBattleRun()); + registerCommand("fight", new RPGCommandBattleFight()); } // Primary external - public String Run(String userID, String inputRaw) + public String run(String userID, String inputRaw) { - RPGState state = LookupState(userID); + RPGState state = lookupState(userID); RPGInput input = new RPGInput(inputRaw); - return ExecuteCommand(input.key, state, input); + return executeCommand(input.key, state, input); } // Get state for executing a command - public RPGState LookupState(String userID) + public RPGState lookupState(String userID) { RPGState state; synchronized(gameStates) @@ -58,23 +58,23 @@ public class RPGFramework } // Registers a command - private void RegisterCommand(String commandName, RPGCommand command) + private void registerCommand(String commandName, RPGCommand command) { commandName = commandName.toLowerCase(); if(gameCommands.put(commandName, command) != null) - RPGLog.Log("Managed to register the same RPG command twice! Not ideal!"); + RPGLog.log("Managed to register the same RPG command twice! Not ideal!"); - RPGLog.Log("Registered " + commandName); + RPGLog.log("Registered " + commandName); } - private String ExecuteCommand(String name, RPGState state, RPGInput input) + private String executeCommand(String name, RPGState state, RPGInput input) { synchronized(gameCommands) { RPGCommand command = gameCommands.get(name.toLowerCase()); if(command != null && state != null) - return command.OnRun(state, input); + return command.onRun(state, input); } return null; diff --git a/src/core/rpg/RPGItem.java b/src/core/rpg/RPGItem.java index e7dd749..3c71b03 100644 --- a/src/core/rpg/RPGItem.java +++ b/src/core/rpg/RPGItem.java @@ -19,7 +19,7 @@ public abstract class RPGItem this.value = value; } - public String GetName() { return name; } - public String GetDescription() { return description; } - public long GetValue() { return value; } + public String getName() { return name; } + public String getDescription() { return description; } + public long getValue() { return value; } } diff --git a/src/core/rpg/RPGLog.java b/src/core/rpg/RPGLog.java index 0ee2bf8..08b1bc9 100644 --- a/src/core/rpg/RPGLog.java +++ b/src/core/rpg/RPGLog.java @@ -5,7 +5,7 @@ import utils.LogFilter; public class RPGLog { - public static void Log(String toWrite) + public static void log(String toWrite) { GlobalLog.Log(LogFilter.Command, "[RPG] " + toWrite); } diff --git a/src/core/rpg/RPGMain.java b/src/core/rpg/RPGMain.java index 0af356b..d7d5598 100644 --- a/src/core/rpg/RPGMain.java +++ b/src/core/rpg/RPGMain.java @@ -10,29 +10,29 @@ public class RPGMain public static void RPGmain(String[] args) { - Init(); - while(Run()) { }; - Shutdown(); + init(); + while(run()) { }; + shutdown(); } // Initializes stuff (small factory, ish) - private static void Init() + private static void init() { framework = new RPGFramework(); scanner = new Scanner(System.in); } // Main loop - private static boolean Run() + private static boolean run() { // move outside - String out = framework.Run("Test", scanner.nextLine()); - RPGLog.Log(out); + String out = framework.run("Test", scanner.nextLine()); + RPGLog.log(out); return true; } // Cleanup - private static void Shutdown() + private static void shutdown() { scanner.close(); } diff --git a/src/core/rpg/RPGPlayer.java b/src/core/rpg/RPGPlayer.java index 86d61be..f29ce7a 100644 --- a/src/core/rpg/RPGPlayer.java +++ b/src/core/rpg/RPGPlayer.java @@ -22,17 +22,17 @@ public class RPGPlayer extends RPGUnit } // Getters - public long GetEXP() { return exp; } - public long GetGold() { return gold; } - public String GetName() { return name; } - public RPGArmor GetArmor() { return armor; }; - public RPGWeapon GetWeapon() { return weapon; }; + public long getEXP() { return exp; } + public long getGold() { return gold; } + public String getName() { return name; } + public RPGArmor getArmor() { return armor; }; + public RPGWeapon getWeapon() { return weapon; }; // Setters - public void SetName(String name) { this.name = name; } + public void setName(String name) { this.name = name; } // Interactions - public void ApplyEXP(int expToGive) + public void applyEXP(int expToGive) { if(expToGive < 0) expToGive = 0; @@ -40,7 +40,7 @@ public class RPGPlayer extends RPGUnit exp += expToGive; } - public void GiveGold(long amount) + public void giveGold(long amount) { if(amount < 0) amount = 0; @@ -48,7 +48,7 @@ public class RPGPlayer extends RPGUnit gold += amount; } - public void SpendGold(long amount) + public void spendGold(long amount) { if(amount < 0) amount = 0; diff --git a/src/core/rpg/RPGUnit.java b/src/core/rpg/RPGUnit.java index cb2cb99..b0c23b1 100644 --- a/src/core/rpg/RPGUnit.java +++ b/src/core/rpg/RPGUnit.java @@ -5,13 +5,13 @@ public abstract class RPGUnit protected int healthMax; protected int healthCurrent; - public int GetHealthMax() { return healthMax; } - public int GetHealthCurrent() { return healthCurrent; } - public boolean IsAlive() { return healthCurrent > 0; } + public int getHealthMax() { return healthMax; } + public int getHealthCurrent() { return healthCurrent; } + public boolean isAlive() { return healthCurrent > 0; } // Generic implementation. Consider implementing armor in // derived classes, for example. - public void ApplyDamage(int value) + public void applyDamage(int value) { if(value < 0) value = 0; @@ -21,7 +21,7 @@ public abstract class RPGUnit // Generic implementation. Consider applying boosts in // derived classes, for example. - public void ApplyHealing(int value) + public void applyHealing(int value) { if(value < 0) value = 0; diff --git a/src/core/rpg/RPGWeapon.java b/src/core/rpg/RPGWeapon.java index 7b390ad..b53a25e 100644 --- a/src/core/rpg/RPGWeapon.java +++ b/src/core/rpg/RPGWeapon.java @@ -12,6 +12,6 @@ public class RPGWeapon extends RPGItem accuracy = 0.8; } - public long GetAttack() { return attack; } - public double GetAccuracy() { return accuracy; } + public long getAttack() { return attack; } + public double getAccuracy() { return accuracy; } } From 06317a4528a079056f0d602d5499f9977a53ec07 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Wed, 19 Jun 2019 22:14:13 -0700 Subject: [PATCH 23/24] = Updated utils and logging subsystem formatting --- src/commands/CommandBlurry.java | 4 +-- src/commands/CommandBoop.java | 2 +- src/commands/CommandCatch.java | 6 ++-- src/commands/CommandColiru.java | 2 +- src/commands/CommandColor.java | 4 +-- src/commands/CommandHelpBuilder.java | 4 +-- src/commands/CommandLeaderboard.java | 4 +-- src/commands/CommandMap.java | 6 ++-- src/commands/CommandPerish.java | 4 +-- src/commands/CommandShutdown.java | 4 +-- src/commands/CommandStark.java | 4 +-- src/commands/CommandTeey.java | 6 ++-- src/commands/CommandWolfram.java | 2 +- src/commands/CommandYeet.java | 6 ++-- src/core/BaseKeyValueFile.java | 4 +-- src/core/BaseLocFile.java | 12 ++++---- src/core/CharacterManager.java | 2 +- src/core/Command.java | 2 +- src/core/CommandEnabler.java | 4 +-- src/core/CommandManager.java | 6 ++-- src/core/DatabaseDriverKeyValue.java | 24 ++++++++-------- src/core/DatabaseManager.java | 8 +++--- src/core/LocCommands.java | 4 +-- src/core/LocStrings.java | 4 +-- src/core/ObjectBuilderFactory.java | 2 +- src/core/RPManager.java | 2 +- src/core/Stats.java | 2 +- src/core/benchmark/BenchmarkInput.java | 2 +- src/core/benchmark/BenchmarkLog.java | 6 ++-- src/core/benchmark/BenchmarkManager.java | 8 +++--- src/core/lua/PluginLog.java | 6 ++-- src/core/rpg/RPGInput.java | 2 +- src/core/rpg/RPGLog.java | 2 +- src/dataStructures/KittyTrackedLong.java | 2 +- src/dataStructures/KittyTrackedString.java | 2 +- src/dataStructures/KittyUser.java | 4 +-- src/dataStructures/Response.java | 8 +++--- src/dataStructures/TaggedPairStore.java | 8 +++--- src/network/JDBCDriver.java | 8 +++--- src/network/JDBCDriverMySQL.java | 8 +++--- src/network/JDBCDriverPostgreSQL.java | 8 +++--- src/network/JDBCDriverSQLite.java | 20 +++++++------- src/network/NetworkColiru.java | 5 ++-- src/network/NetworkDerpi.java | 4 +-- src/network/NetworkE621.java | 2 +- src/network/NetworkJDoodle.java | 9 ++++-- src/network/NetworkTheColorAPI.java | 4 +-- src/network/NetworkTwitter.java | 3 -- src/utils/GlobalLog.java | 22 +++++++-------- src/utils/HTTPUtils.java | 12 ++++---- src/utils/ImageOverlayBuilder.java | 32 +++++++++++----------- src/utils/ImageUtils.java | 8 +++--- src/utils/OptionParser.java | 12 ++++---- src/utils/StringUtils.java | 6 ++-- src/utils/io/DirectoryMonitor.java | 24 ++++++++-------- src/utils/io/FileMonitor.java | 14 +++++----- src/utils/io/FileUtils.java | 16 +++++------ src/utils/io/IOLog.java | 6 ++-- 58 files changed, 205 insertions(+), 202 deletions(-) diff --git a/src/commands/CommandBlurry.java b/src/commands/CommandBlurry.java index ff56a5b..c2a834b 100644 --- a/src/commands/CommandBlurry.java +++ b/src/commands/CommandBlurry.java @@ -63,8 +63,8 @@ public class CommandBlurry extends Command postProcessed = new File(name); res.sendFile(postProcessed, "png"); - ImageUtils.BlockingFileDelete(preProcessed); - ImageUtils.BlockingFileDelete(postProcessed); + ImageUtils.blockingFileDelete(preProcessed); + ImageUtils.blockingFileDelete(postProcessed); } private static void ApplySnap(BufferedImage image, String name) throws IOException diff --git a/src/commands/CommandBoop.java b/src/commands/CommandBoop.java index fc0da25..d694277 100644 --- a/src/commands/CommandBoop.java +++ b/src/commands/CommandBoop.java @@ -42,7 +42,7 @@ public class CommandBoop extends Command } catch (NumberFormatException e) { - GlobalLog.Warn(LogFilter.Command, "No valid value was found for boops! Starting over at 0!"); + GlobalLog.warn(LogFilter.Command, "No valid value was found for boops! Starting over at 0!"); boops = 0; markDirty(); } diff --git a/src/commands/CommandCatch.java b/src/commands/CommandCatch.java index dd24612..ceaa01d 100644 --- a/src/commands/CommandCatch.java +++ b/src/commands/CommandCatch.java @@ -54,7 +54,7 @@ public class CommandCatch extends Command catcheeFile = new File(catchFilename); ImageOverlayBuilder builder = new ImageOverlayBuilder("assets/catch/frames/", "catch ", 92, 18); - builder.Overlay(ImageIO.read(catcheeFile), name); + builder.overlay(ImageIO.read(catcheeFile), name); } catch (IOException e) { @@ -65,7 +65,7 @@ public class CommandCatch extends Command res.sendFile(catchFile, "gif"); // Thread cleanup... - ImageUtils.BlockingFileDelete(catchFile); - ImageUtils.BlockingFileDelete(catcheeFile); + ImageUtils.blockingFileDelete(catchFile); + ImageUtils.blockingFileDelete(catcheeFile); } } diff --git a/src/commands/CommandColiru.java b/src/commands/CommandColiru.java index 3973801..9dc39c1 100644 --- a/src/commands/CommandColiru.java +++ b/src/commands/CommandColiru.java @@ -23,7 +23,7 @@ public class CommandColiru extends Command return; } - res.send(compiler.compileCPlus(input.args)); + res.send(compiler.compileCPlusPlus(input.args)); } } diff --git a/src/commands/CommandColor.java b/src/commands/CommandColor.java index a130c86..a4c2059 100644 --- a/src/commands/CommandColor.java +++ b/src/commands/CommandColor.java @@ -32,7 +32,7 @@ public class CommandColor extends Command public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { // First, try and parse out the color to make sure we can even get it. - ColorData colorData = theColorAPI.LookupHex(input.args.trim()); + ColorData colorData = theColorAPI.lookupHex(input.args.trim()); // Verify the color was even found if(colorData == null) @@ -77,7 +77,7 @@ public class CommandColor extends Command // Send then delete the temp local files res.send(response); - ImageUtils.BlockingFileDelete(file); + ImageUtils.blockingFileDelete(file); }; } diff --git a/src/commands/CommandHelpBuilder.java b/src/commands/CommandHelpBuilder.java index e736c5e..109dc03 100644 --- a/src/commands/CommandHelpBuilder.java +++ b/src/commands/CommandHelpBuilder.java @@ -63,13 +63,13 @@ public class CommandHelpBuilder extends Command { } catch (FileNotFoundException e) { - GlobalLog.Error(e.toString()); + GlobalLog.error(e.toString()); return; } File file = new File(filename); res.sendFile(file, "txt"); - ImageUtils.BlockingFileDelete(file); + ImageUtils.blockingFileDelete(file); } // Generates the section for a specific role, optionally adding spacing after for another section diff --git a/src/commands/CommandLeaderboard.java b/src/commands/CommandLeaderboard.java index 29914c5..79a1ff6 100644 --- a/src/commands/CommandLeaderboard.java +++ b/src/commands/CommandLeaderboard.java @@ -32,7 +32,7 @@ public class CommandLeaderboard extends Command public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) { // Start by force-flushing. We need to be up-to-date. - GlobalLog.Log("Flushed database for " + DatabaseManager.instance.upkeep() + " items."); + GlobalLog.log("Flushed database for " + DatabaseManager.instance.upkeep() + " items."); // Get all users associated with a guild and get their bean count String guildID = guild.uniqueID; @@ -74,7 +74,7 @@ public class CommandLeaderboard extends Command return (int)difference; }); - GlobalLog.Log(LogFilter.Command, "Sorted through " + users.size() + " KittyUsers for leaderboard purposes."); + GlobalLog.log(LogFilter.Command, "Sorted through " + users.size() + " KittyUsers for leaderboard purposes."); // Configure output final int listSize = 10; diff --git a/src/commands/CommandMap.java b/src/commands/CommandMap.java index e337f3f..f607229 100644 --- a/src/commands/CommandMap.java +++ b/src/commands/CommandMap.java @@ -43,18 +43,18 @@ public class CommandMap extends Command { OptionParser parser = new OptionParser(input.args); - String seedStr = parser.GetOption("-s", true); + String seedStr = parser.getOption("-s", true); if(seedStr != null) { seed = Long.parseLong(seedStr); hasSeed = true; } - String widthStr = parser.GetOption("-w", true); + String widthStr = parser.getOption("-w", true); if(widthStr != null) width = ValidateSize(Integer.parseInt(widthStr), MaxWidth); - String heightStr = parser.GetOption("-h", true); + String heightStr = parser.getOption("-h", true); if(heightStr != null) height = ValidateSize(Integer.parseInt(heightStr), MaxHeight); } diff --git a/src/commands/CommandPerish.java b/src/commands/CommandPerish.java index 9089a72..8da8ba6 100644 --- a/src/commands/CommandPerish.java +++ b/src/commands/CommandPerish.java @@ -69,8 +69,8 @@ public class CommandPerish extends Command postProcessed = new File(name); res.sendFile(postProcessed, "png"); - ImageUtils.BlockingFileDelete(preProcessed); - ImageUtils.BlockingFileDelete(postProcessed); + ImageUtils.blockingFileDelete(preProcessed); + ImageUtils.blockingFileDelete(postProcessed); } private static void ApplyTintEffect(BufferedImage image, String name) throws IOException diff --git a/src/commands/CommandShutdown.java b/src/commands/CommandShutdown.java index afcb43f..aec54ea 100644 --- a/src/commands/CommandShutdown.java +++ b/src/commands/CommandShutdown.java @@ -48,14 +48,14 @@ public class CommandShutdown extends Command // Force upkeep, this works so long as upkeep is on the main thread. res.sendImmediate(LocStrings.stub("ShutdownSafe")); DatabaseManager.instance.upkeep(); - GlobalLog.Warn(LogFilter.Command, LocStrings.lookup("ShutdownSafe")); + GlobalLog.warn(LogFilter.Command, LocStrings.lookup("ShutdownSafe")); System.exit(0); } else { res.sendImmediate(LocStrings.stub("ShutdownUnsafe"));// "``"); - GlobalLog.Warn(LogFilter.Command, LocStrings.lookup("ShutdownSafe")); + GlobalLog.warn(LogFilter.Command, LocStrings.lookup("ShutdownSafe")); System.exit(0); } } diff --git a/src/commands/CommandStark.java b/src/commands/CommandStark.java index 24865e0..f33b076 100644 --- a/src/commands/CommandStark.java +++ b/src/commands/CommandStark.java @@ -63,8 +63,8 @@ public class CommandStark extends Command postProcessed = new File(name); res.sendFile(postProcessed, "png"); - ImageUtils.BlockingFileDelete(preProcessed); - ImageUtils.BlockingFileDelete(postProcessed); + ImageUtils.blockingFileDelete(preProcessed); + ImageUtils.blockingFileDelete(postProcessed); } private static void ApplySnap(BufferedImage image, String name) throws IOException diff --git a/src/commands/CommandTeey.java b/src/commands/CommandTeey.java index 8ba9f4d..c98d0b2 100644 --- a/src/commands/CommandTeey.java +++ b/src/commands/CommandTeey.java @@ -54,7 +54,7 @@ public class CommandTeey extends Command teeyeeFile = new File(yeeteeFilename); ImageOverlayBuilder builder = new ImageOverlayBuilder("assets/teey/frames/", "teey ", 24, 18); - builder.Overlay(ImageIO.read(teeyeeFile), name); + builder.overlay(ImageIO.read(teeyeeFile), name); } catch (IOException e) { @@ -65,7 +65,7 @@ public class CommandTeey extends Command res.sendFile(teeyFile, "gif"); // Thread cleanup... - ImageUtils.BlockingFileDelete(teeyFile); - ImageUtils.BlockingFileDelete(teeyeeFile); + ImageUtils.blockingFileDelete(teeyFile); + ImageUtils.blockingFileDelete(teeyeeFile); } } diff --git a/src/commands/CommandWolfram.java b/src/commands/CommandWolfram.java index 54b26b4..ee341cc 100644 --- a/src/commands/CommandWolfram.java +++ b/src/commands/CommandWolfram.java @@ -27,7 +27,7 @@ public class CommandWolfram extends Command { File pic = new File(searcher.getWolfram(input.args)); res.sendFile(pic, "png"); - ImageUtils.BlockingFileDelete(pic); + ImageUtils.blockingFileDelete(pic); } catch (IOException e) { diff --git a/src/commands/CommandYeet.java b/src/commands/CommandYeet.java index 6fd467b..71c5a63 100644 --- a/src/commands/CommandYeet.java +++ b/src/commands/CommandYeet.java @@ -54,7 +54,7 @@ public class CommandYeet extends Command yeeteeFile = new File(yeeteeFilename); ImageOverlayBuilder builder = new ImageOverlayBuilder("assets/yeet/frames/", "yeet ", 24, 18); - builder.Overlay(ImageIO.read(yeeteeFile), name); + builder.overlay(ImageIO.read(yeeteeFile), name); } catch (IOException e) { @@ -65,7 +65,7 @@ public class CommandYeet extends Command res.sendFile(yeetFile, "gif"); // Thread cleanup... - ImageUtils.BlockingFileDelete(yeetFile); - ImageUtils.BlockingFileDelete(yeeteeFile); + ImageUtils.blockingFileDelete(yeetFile); + ImageUtils.blockingFileDelete(yeeteeFile); } } diff --git a/src/core/BaseKeyValueFile.java b/src/core/BaseKeyValueFile.java index 9519fb6..b2b19bd 100644 --- a/src/core/BaseKeyValueFile.java +++ b/src/core/BaseKeyValueFile.java @@ -38,7 +38,7 @@ public class BaseKeyValueFile File f = new File(filename); if(f.isFile() && f.canRead()) { - String content = FileUtils.ReadContent(f).trim(); + String content = FileUtils.readContent(f).trim(); String[] lines = content.split("" + pairSeparator); for(int i = 0; i < lines.length; ++i) @@ -84,7 +84,7 @@ public class BaseKeyValueFile } catch (IOException e) { - GlobalLog.Error(LogFilter.Core, "Issue writing file " + filename + ": " + e.getMessage()); + GlobalLog.error(LogFilter.Core, "Issue writing file " + filename + ": " + e.getMessage()); } } } diff --git a/src/core/BaseLocFile.java b/src/core/BaseLocFile.java index 672fd30..a139857 100644 --- a/src/core/BaseLocFile.java +++ b/src/core/BaseLocFile.java @@ -30,9 +30,9 @@ public abstract class BaseLocFile protected TaggedPairStore stringStore; // Logging - private void log(String str) { GlobalLog.Log(LogFilter.Strings, str); } - private void warn(String str) { GlobalLog.Warn(LogFilter.Strings, str); } - private void error(String str) { GlobalLog.Error(LogFilter.Strings, str); } + private void log(String str) { GlobalLog.log(LogFilter.Strings, str); } + private void warn(String str) { GlobalLog.warn(LogFilter.Strings, str); } + private void error(String str) { GlobalLog.error(LogFilter.Strings, str); } // File monitoring protected FileMonitor fileMonitor; @@ -49,7 +49,7 @@ public abstract class BaseLocFile { synchronized(stringStore) { - fileMonitor.Update(this::onFileChange); + fileMonitor.update(this::onFileChange); } } @@ -80,7 +80,7 @@ public abstract class BaseLocFile String filename = path.getFileName().toString(); if(filename.contains(".java")) { - String contents = FileUtils.ReadContent(path); + String contents = FileUtils.readContent(path); String[] split = contents.split(functionName); // Identify all localizer function calls @@ -203,7 +203,7 @@ public abstract class BaseLocFile public void scrapeAll() { ArrayList localizeList = new ArrayList(); - FileUtils.AcquireAllFiles(KittySourceDirectory).forEach((path) -> tryStripSpecified(path, localizeList)); + FileUtils.acquireAllFiles(KittySourceDirectory).forEach((path) -> tryStripSpecified(path, localizeList)); for(LocInfo toStub : localizeList) stringStore.addKeyValue(toStub.file, toStub.phrase, toStub.phrase); diff --git a/src/core/CharacterManager.java b/src/core/CharacterManager.java index 81aa10d..0a55d81 100644 --- a/src/core/CharacterManager.java +++ b/src/core/CharacterManager.java @@ -24,7 +24,7 @@ public class CharacterManager } else { - GlobalLog.Error(LogFilter.Core, "Attempted to create a second CharacterManager singleton!"); + GlobalLog.error(LogFilter.Core, "Attempted to create a second CharacterManager singleton!"); return; } } diff --git a/src/core/Command.java b/src/core/Command.java index 954edb5..f38e0e8 100644 --- a/src/core/Command.java +++ b/src/core/Command.java @@ -28,7 +28,7 @@ public abstract class Command private void reject(KittyUser user, String reason) { - GlobalLog.Warn(LogFilter.Command, this.getClass().getSimpleName() + " from " + user.name + " rejected due to command's " + reason); + GlobalLog.warn(LogFilter.Command, this.getClass().getSimpleName() + " from " + user.name + " rejected due to command's " + reason); } // Determine if we're exclusive enough for this command and diff --git a/src/core/CommandEnabler.java b/src/core/CommandEnabler.java index 160c921..b249655 100644 --- a/src/core/CommandEnabler.java +++ b/src/core/CommandEnabler.java @@ -30,7 +30,7 @@ public class CommandEnabler extends BaseKeyValueFile super(name); // Create/Init variables - GlobalLog.Log(LogFilter.Core, "Initializing " + this.getClass().getSimpleName()); + GlobalLog.log(LogFilter.Core, "Initializing " + this.getClass().getSimpleName()); enabledMap = new HashMap<>(); keyList = new ArrayList<>(); @@ -68,7 +68,7 @@ public class CommandEnabler extends BaseKeyValueFile if(enabledMap.putIfAbsent(command, defaultEnabledState) == null) { - GlobalLog.Log(LogFilter.Strings, "Identified new toggleable raw command: " + command); + GlobalLog.log(LogFilter.Strings, "Identified new toggleable raw command: " + command); keyList.add(command); } } diff --git a/src/core/CommandManager.java b/src/core/CommandManager.java index e4ada68..73befc7 100644 --- a/src/core/CommandManager.java +++ b/src/core/CommandManager.java @@ -59,11 +59,11 @@ public class CommandManager if(old != null) { - GlobalLog.Warn(LogFilter.Core, "Writing over a command with the key " + key); + GlobalLog.warn(LogFilter.Core, "Writing over a command with the key " + key); return; } - GlobalLog.Log(LogFilter.Core, "Command registered under key " + key); + GlobalLog.log(LogFilter.Core, "Command registered under key " + key); } // Registers a command under multiple names! @@ -91,7 +91,7 @@ public class CommandManager } else { - GlobalLog.Warn(LogFilter.Command, "User " + user.name + " tried to invoke command that doesn't exist: " + input.key); + GlobalLog.warn(LogFilter.Command, "User " + user.name + " tried to invoke command that doesn't exist: " + input.key); return false; } } diff --git a/src/core/DatabaseDriverKeyValue.java b/src/core/DatabaseDriverKeyValue.java index c7f7469..14a8699 100644 --- a/src/core/DatabaseDriverKeyValue.java +++ b/src/core/DatabaseDriverKeyValue.java @@ -38,14 +38,14 @@ public class DatabaseDriverKeyValue public void ensureTableExists(String tableName, String keyName, String valueName) { // Require a global table if it doesn't exist already - driver.ExecuteStatement(JDBCStatementType.Create, "CREATE TABLE IF NOT EXISTS " + tableName + " (" + keyName + " text PRIMARY KEY, " + valueName + " text)", null); + driver.executeStatement(JDBCStatementType.Create, "CREATE TABLE IF NOT EXISTS " + tableName + " (" + keyName + " text PRIMARY KEY, " + valueName + " text)", null); } // Set up and create a table in the database public boolean connect() { driver = new JDBCDriverSQLite(); - if(driver.Connect() == false) + if(driver.connect() == false) { return false; } @@ -59,7 +59,7 @@ public class DatabaseDriverKeyValue // The key will be created if it doesn't exist and the value specified will be stored. public void createSetKey(String key, String value) { - GlobalLog.Log(LogFilter.Database, "CreateSetKey: Key-" + key + " value-" + value); + GlobalLog.log(LogFilter.Database, "CreateSetKey: Key-" + key + " value-" + value); if(hasKey(key)) { @@ -74,7 +74,7 @@ public class DatabaseDriverKeyValue // Creates a key. The key will be created if it doesn't exist, and the default value returned. public String createGetKey(String key) { - GlobalLog.Log(LogFilter.Database, "CreateGetKey: " + key); + GlobalLog.log(LogFilter.Database, "CreateGetKey: " + key); if(hasKey(key)) { @@ -92,15 +92,15 @@ public class DatabaseDriverKeyValue private void updateKey(String key, String value) { String command = "UPDATE " + tableName + " SET " + valueColumnName + " = ? WHERE " + keyColumnName + " = ?"; - boolean status = driver.ExecuteStatement(JDBCStatementType.Update, command, new String[] { value, key }); - GlobalLog.Log(LogFilter.Database, "UpdateKey status: " + status); + boolean status = driver.executeStatement(JDBCStatementType.Update, command, new String[] { value, key }); + GlobalLog.log(LogFilter.Database, "UpdateKey status: " + status); } // Protoype updating for seeing if a key exists private boolean hasKey(String key) { String command = "SELECT COUNT(1) as count FROM " + tableName + " WHERE " + keyColumnName + " = ?"; - ResultSet set = driver.ExecuteReturningStatement(JDBCStatementType.Select, command, new String[] { key }); + ResultSet set = driver.executeReturningStatement(JDBCStatementType.Select, command, new String[] { key }); String out = resultAsString(set, "count"); return out.charAt(0) == '1'; } @@ -109,7 +109,7 @@ public class DatabaseDriverKeyValue private String getKey(String key) { String command = "SELECT " + valueColumnName + " as searchedKey FROM " + tableName +" WHERE " + keyColumnName + " = ?"; - ResultSet set = driver.ExecuteReturningStatement(JDBCStatementType.Select, command, new String[] { key }); + ResultSet set = driver.executeReturningStatement(JDBCStatementType.Select, command, new String[] { key }); return resultAsString(set, "searchedKey"); } @@ -117,15 +117,15 @@ public class DatabaseDriverKeyValue private void createKey(String key, String value) { String command = "INSERT INTO " + tableName + " (GlobalKey, GlobalValue) VALUES (?, ?)"; - boolean status = driver.ExecuteStatement(JDBCStatementType.Insert, command, new String[] { key, value }); - GlobalLog.Log(LogFilter.Database, "CreateKey status: " + status); + boolean status = driver.executeStatement(JDBCStatementType.Insert, command, new String[] { key, value }); + GlobalLog.log(LogFilter.Database, "CreateKey status: " + status); } // Get all keys containing a substring public List getKeysWith(String keySubstring) { String command = "SELECT * FROM " + tableName + " WHERE " + keyColumnName + " like ?"; - ResultSet result = driver.ExecuteReturningStatement(JDBCStatementType.Select, command, new String[] { "%" + keySubstring + "%" }); + ResultSet result = driver.executeReturningStatement(JDBCStatementType.Select, command, new String[] { "%" + keySubstring + "%" }); List keys = new ArrayList(); @@ -165,7 +165,7 @@ public class DatabaseDriverKeyValue } catch (SQLException e) { - GlobalLog.Error(LogFilter.Database, e.toString()); + GlobalLog.error(LogFilter.Database, e.toString()); return null; } } diff --git a/src/core/DatabaseManager.java b/src/core/DatabaseManager.java index f5a3a11..204165b 100644 --- a/src/core/DatabaseManager.java +++ b/src/core/DatabaseManager.java @@ -35,7 +35,7 @@ public class DatabaseManager // Constructor to enforce singleton. public DatabaseManager() { - GlobalLog.Log(LogFilter.Database, "Creating database manager"); + GlobalLog.log(LogFilter.Database, "Creating database manager"); if(instance == null) { @@ -43,7 +43,7 @@ public class DatabaseManager } else { - GlobalLog.Error(LogFilter.Database, "Attempted to register a second DataBase manager!"); + GlobalLog.error(LogFilter.Database, "Attempted to register a second DataBase manager!"); return; } @@ -59,13 +59,13 @@ public class DatabaseManager // Connect data sets if(globalDataDriver.connect() == false) { - GlobalLog.Error("Global database failed to connect. Without this DB, this bot can not run."); + GlobalLog.error("Global database failed to connect. Without this DB, this bot can not run."); System.exit(1); } if(characterDataDriver.connect() == false) { - GlobalLog.Error("Character database failed to connect. Without this DB, this bot can not run."); + GlobalLog.error("Character database failed to connect. Without this DB, this bot can not run."); System.exit(1); } } diff --git a/src/core/LocCommands.java b/src/core/LocCommands.java index 6c2b40e..86bfc1d 100644 --- a/src/core/LocCommands.java +++ b/src/core/LocCommands.java @@ -19,7 +19,7 @@ public class LocCommands extends BaseLocFile { super(fileName, function); - GlobalLog.Log(LogFilter.Core, "Initializing " + this.getClass().getSimpleName()); + GlobalLog.log(LogFilter.Core, "Initializing " + this.getClass().getSimpleName()); if(instance == null) { @@ -33,7 +33,7 @@ public class LocCommands extends BaseLocFile } else { - GlobalLog.Error(LogFilter.Core, "You can't have two of the following: " + this.getClass().getSimpleName()); + GlobalLog.error(LogFilter.Core, "You can't have two of the following: " + this.getClass().getSimpleName()); } } diff --git a/src/core/LocStrings.java b/src/core/LocStrings.java index 95f1594..c95d363 100644 --- a/src/core/LocStrings.java +++ b/src/core/LocStrings.java @@ -18,7 +18,7 @@ public class LocStrings extends BaseLocFile { super(fileName, function); - GlobalLog.Log(LogFilter.Core, "Initializing " + this.getClass().getSimpleName()); + GlobalLog.log(LogFilter.Core, "Initializing " + this.getClass().getSimpleName()); if(instance == null) { @@ -32,7 +32,7 @@ public class LocStrings extends BaseLocFile } else { - GlobalLog.Error(LogFilter.Core, "You can't have two of the following: " + this.getClass().getSimpleName()); + GlobalLog.error(LogFilter.Core, "You can't have two of the following: " + this.getClass().getSimpleName()); } } diff --git a/src/core/ObjectBuilderFactory.java b/src/core/ObjectBuilderFactory.java index 87cc63a..640157b 100644 --- a/src/core/ObjectBuilderFactory.java +++ b/src/core/ObjectBuilderFactory.java @@ -99,7 +99,7 @@ public class ObjectBuilderFactory } catch(InterruptedException ie) { - GlobalLog.Error(LogFilter.Core, "Issue during object builder lazy initialization." + GlobalLog.error(LogFilter.Core, "Issue during object builder lazy initialization." + " The factory was not initialized, and kitty will not be able to continue functionally."); } } diff --git a/src/core/RPManager.java b/src/core/RPManager.java index 91c7a05..9047d9e 100644 --- a/src/core/RPManager.java +++ b/src/core/RPManager.java @@ -23,7 +23,7 @@ public class RPManager } else { - GlobalLog.Error(LogFilter.Core, "Attempted to create a second RP Manager!"); + GlobalLog.error(LogFilter.Core, "Attempted to create a second RP Manager!"); return; } } diff --git a/src/core/Stats.java b/src/core/Stats.java index 4c7353c..f3fc254 100644 --- a/src/core/Stats.java +++ b/src/core/Stats.java @@ -31,7 +31,7 @@ public class Stats } else { - GlobalLog.Error(LogFilter.Core, "Attempted to create a second Stats singleton!"); + GlobalLog.error(LogFilter.Core, "Attempted to create a second Stats singleton!"); return; } diff --git a/src/core/benchmark/BenchmarkInput.java b/src/core/benchmark/BenchmarkInput.java index 3e131ff..3773c36 100644 --- a/src/core/benchmark/BenchmarkInput.java +++ b/src/core/benchmark/BenchmarkInput.java @@ -19,7 +19,7 @@ public class BenchmarkInput return; raw = raw.trim(); - int whitespacePos = StringUtils.FindFirstWhitespace(raw); + int whitespacePos = StringUtils.findFirstWhitespace(raw); if(whitespacePos == -1) { diff --git a/src/core/benchmark/BenchmarkLog.java b/src/core/benchmark/BenchmarkLog.java index 999b5a0..0417f02 100644 --- a/src/core/benchmark/BenchmarkLog.java +++ b/src/core/benchmark/BenchmarkLog.java @@ -5,7 +5,7 @@ import utils.GlobalLog; //Logging shim public class BenchmarkLog { - public static void log(String str) { GlobalLog.Log("[Benchmark] " + str); } - public static void warn(String str) { GlobalLog.Warn("[Benchmark] " + str); } - public static void error(String str) { GlobalLog.Error(" [Benchmark] " + str); } + public static void log(String str) { GlobalLog.log("[Benchmark] " + str); } + public static void warn(String str) { GlobalLog.warn("[Benchmark] " + str); } + public static void error(String str) { GlobalLog.error(" [Benchmark] " + str); } } diff --git a/src/core/benchmark/BenchmarkManager.java b/src/core/benchmark/BenchmarkManager.java index 466454f..04e9909 100644 --- a/src/core/benchmark/BenchmarkManager.java +++ b/src/core/benchmark/BenchmarkManager.java @@ -35,7 +35,7 @@ public class BenchmarkManager rebuildLookup(); - BenchmarkLog.log("Took " + (Instant.now().toEpochMilli() - start) + " ms to load " + raw.size() + " entries from " + directoryMonitor.GetCurrentFiles().size() + " file" + (raw.size() > 1 ? "s" : "")); + BenchmarkLog.log("Took " + (Instant.now().toEpochMilli() - start) + " ms to load " + raw.size() + " entries from " + directoryMonitor.getCurrentFiles().size() + " file" + (raw.size() > 1 ? "s" : "")); } // Rebuilds the files being monitored @@ -50,14 +50,14 @@ public class BenchmarkManager synchronized(directoryMonitor) { - files = directoryMonitor.GetCurrentFiles(); + files = directoryMonitor.getCurrentFiles(); } if(files != null) { for(MonitoredFile mf : files) { - String contents = FileUtils.ReadContent(mf.path); + String contents = FileUtils.readContent(mf.path); String[] lines = contents.split(lineDelimiter); for(int i = 1; i < lines.length; ++i) @@ -169,7 +169,7 @@ public class BenchmarkManager public void update() { needsUpdate = false; - directoryMonitor.Update(this::onRescan, this::onRescan, this::onRescan); + directoryMonitor.update(this::onRescan, this::onRescan, this::onRescan); if(needsUpdate) rebuildLookup(); diff --git a/src/core/lua/PluginLog.java b/src/core/lua/PluginLog.java index b5e16fb..471cf2b 100644 --- a/src/core/lua/PluginLog.java +++ b/src/core/lua/PluginLog.java @@ -5,7 +5,7 @@ import utils.LogFilter; public class PluginLog { - public static void log(String s) { GlobalLog.Log(LogFilter.Plugin, s); } - public static void warn(String s) { GlobalLog.Warn(LogFilter.Plugin, s); } - public static void error(String s) { GlobalLog.Error(LogFilter.Plugin, s); } + public static void log(String s) { GlobalLog.log(LogFilter.Plugin, s); } + public static void warn(String s) { GlobalLog.warn(LogFilter.Plugin, s); } + public static void error(String s) { GlobalLog.error(LogFilter.Plugin, s); } } diff --git a/src/core/rpg/RPGInput.java b/src/core/rpg/RPGInput.java index 64ec472..d93a318 100644 --- a/src/core/rpg/RPGInput.java +++ b/src/core/rpg/RPGInput.java @@ -18,7 +18,7 @@ public class RPGInput return; raw = raw.trim(); - int whitespacePos = StringUtils.FindFirstWhitespace(raw); + int whitespacePos = StringUtils.findFirstWhitespace(raw); if(whitespacePos == -1) { diff --git a/src/core/rpg/RPGLog.java b/src/core/rpg/RPGLog.java index 08b1bc9..cbf6774 100644 --- a/src/core/rpg/RPGLog.java +++ b/src/core/rpg/RPGLog.java @@ -7,6 +7,6 @@ public class RPGLog { public static void log(String toWrite) { - GlobalLog.Log(LogFilter.Command, "[RPG] " + toWrite); + GlobalLog.log(LogFilter.Command, "[RPG] " + toWrite); } } diff --git a/src/dataStructures/KittyTrackedLong.java b/src/dataStructures/KittyTrackedLong.java index c7f60bb..3b4ab5b 100644 --- a/src/dataStructures/KittyTrackedLong.java +++ b/src/dataStructures/KittyTrackedLong.java @@ -71,7 +71,7 @@ public class KittyTrackedLong extends DatabaseTrackedObject catch(Exception e) { tracked = 0; - GlobalLog.Error(LogFilter.Core, "Falling back to default of 0 due to failure to deserialize long with database ID " + identifier); + GlobalLog.error(LogFilter.Core, "Falling back to default of 0 due to failure to deserialize long with database ID " + identifier); } } else diff --git a/src/dataStructures/KittyTrackedString.java b/src/dataStructures/KittyTrackedString.java index 5bb959c..d777f2f 100644 --- a/src/dataStructures/KittyTrackedString.java +++ b/src/dataStructures/KittyTrackedString.java @@ -49,7 +49,7 @@ public class KittyTrackedString extends DatabaseTrackedObject } else { - GlobalLog.Log(LogFilter.Database, "String had null or empty value with identifier: " + identifier); + GlobalLog.log(LogFilter.Database, "String had null or empty value with identifier: " + identifier); string = ""; markDirty(); } diff --git a/src/dataStructures/KittyUser.java b/src/dataStructures/KittyUser.java index db91d4a..730e09e 100644 --- a/src/dataStructures/KittyUser.java +++ b/src/dataStructures/KittyUser.java @@ -87,7 +87,7 @@ public class KittyUser extends DatabaseTrackedObject String[] strings = prepareFromString(string); if(strings.length < 2) { - GlobalLog.Log(LogFilter.Database, "Upgrading user " + name + " to include 'role' in DB"); + GlobalLog.log(LogFilter.Database, "Upgrading user " + name + " to include 'role' in DB"); // Mark ourselves dirty to re-write the role information stored in the user. // Just uses defaults from earlier again. @@ -101,7 +101,7 @@ public class KittyUser extends DatabaseTrackedObject } catch (NumberFormatException e) { - GlobalLog.Warn(LogFilter.Database, "Invalid user data for user " + name + "! " + GlobalLog.warn(LogFilter.Database, "Invalid user data for user " + name + "! " + "Starting over at 0 beans with a general role!"); // We don't need to specify the role at this point because it is set at this point. diff --git a/src/dataStructures/Response.java b/src/dataStructures/Response.java index 18549e0..8e8ba10 100644 --- a/src/dataStructures/Response.java +++ b/src/dataStructures/Response.java @@ -90,7 +90,7 @@ public class Response // Queues a standard text-based message response to the channel that issued the command. public void send(String toRespondWith) { - GlobalLog.Log(LogFilter.Response, "Sending response: " + toRespondWith); + GlobalLog.log(LogFilter.Response, "Sending response: " + toRespondWith); if(toRespondWith.length() > discordMessageMax) { event.getChannel().sendMessage(toRespondWith.substring(0, kittyMessageMax) + "\n\nI think that's enough!").queue(); @@ -119,7 +119,7 @@ public class Response // Immediately dispatches the message to the channel that issued the command. public void sendImmediate(String toRespondWith) { - GlobalLog.Log(LogFilter.Response, "Sending immediate response: " + toRespondWith); + GlobalLog.log(LogFilter.Response, "Sending immediate response: " + toRespondWith); if(toRespondWith.length() > discordMessageMax) { event.getChannel().sendMessage(toRespondWith.substring(0, kittyMessageMax) + "\n\nI think that's enough!"); @@ -133,14 +133,14 @@ public class Response // Queues a file response to the channel that issued the command. public void sendFile(File toRespondWith, String extension) { - GlobalLog.Log(LogFilter.Response, "Sending file response"); + GlobalLog.log(LogFilter.Response, "Sending file response"); event.getChannel().sendFile(toRespondWith, "return." + extension).queue(); } // Queues an input stream response to the channel that issued the command. public void sendFile(InputStream in, String extension) { - GlobalLog.Log(LogFilter.Response, "Sending input stream response"); + GlobalLog.log(LogFilter.Response, "Sending input stream response"); event.getChannel().sendFile(in, "return." + extension).queue(); } } diff --git a/src/dataStructures/TaggedPairStore.java b/src/dataStructures/TaggedPairStore.java index 9318553..8513b11 100644 --- a/src/dataStructures/TaggedPairStore.java +++ b/src/dataStructures/TaggedPairStore.java @@ -93,8 +93,8 @@ public class TaggedPairStore Map.Entry internalPair = (Map.Entry)internal.next(); String key = (String)internalPair.getKey(); String value = (String)internalPair.getValue(); - key = StringUtils.ReEscape(key); - value = StringUtils.ReEscape(value); + key = StringUtils.reEscape(key); + value = StringUtils.reEscape(value); if(key.endsWith("\\r")) { @@ -160,8 +160,8 @@ public class TaggedPairStore String key = line.substring(0, splitPos); String value = line.substring(splitPos + PairSplit.length()); - key = StringUtils.UnEscape(key); - value = StringUtils.UnEscape(value); + key = StringUtils.unEscape(key); + value = StringUtils.unEscape(value); taggedPairs.get(sectionName).putIfAbsent(key, value); allPairs.putIfAbsent(key, value); diff --git a/src/network/JDBCDriver.java b/src/network/JDBCDriver.java index bd99ee1..1c59163 100644 --- a/src/network/JDBCDriver.java +++ b/src/network/JDBCDriver.java @@ -7,14 +7,14 @@ import java.sql.ResultSet; public abstract class JDBCDriver { // Connects to the database, returns a bool if it succeeded. - public abstract boolean Connect(); + public abstract boolean connect(); // Disconnects the driver. Returns if the driver is disconnected now, regardless of connection status. - public abstract boolean Disconnect(); + public abstract boolean disconnect(); // Executes a SQL command with the database. Returns if it was executed successfully, or in the // case of the returning statement, returns the ResultSet. Args are placed into the prepared statement // in place of each '?' places into it. - public abstract boolean ExecuteStatement(JDBCStatementType type, String command, String[] args); - public abstract ResultSet ExecuteReturningStatement(JDBCStatementType type, String command, String[] args); + public abstract boolean executeStatement(JDBCStatementType type, String command, String[] args); + public abstract ResultSet executeReturningStatement(JDBCStatementType type, String command, String[] args); } diff --git a/src/network/JDBCDriverMySQL.java b/src/network/JDBCDriverMySQL.java index 5fbb404..3649989 100644 --- a/src/network/JDBCDriverMySQL.java +++ b/src/network/JDBCDriverMySQL.java @@ -5,25 +5,25 @@ import java.sql.ResultSet; public class JDBCDriverMySQL extends JDBCDriver { @Override - public boolean Connect() { + public boolean connect() { // TODO Auto-generated method stub return false; } @Override - public boolean Disconnect() { + public boolean disconnect() { // TODO Auto-generated method stub return false; } @Override - public boolean ExecuteStatement(JDBCStatementType type, String statement, String[] args) { + public boolean executeStatement(JDBCStatementType type, String statement, String[] args) { // TODO Auto-generated method stub return false; } @Override - public ResultSet ExecuteReturningStatement(JDBCStatementType type, String statement, String[] args) { + public ResultSet executeReturningStatement(JDBCStatementType type, String statement, String[] args) { // TODO Auto-generated method stub return null; } diff --git a/src/network/JDBCDriverPostgreSQL.java b/src/network/JDBCDriverPostgreSQL.java index b6765eb..fbe1593 100644 --- a/src/network/JDBCDriverPostgreSQL.java +++ b/src/network/JDBCDriverPostgreSQL.java @@ -5,25 +5,25 @@ import java.sql.ResultSet; public class JDBCDriverPostgreSQL extends JDBCDriver { @Override - public boolean Connect() { + public boolean connect() { // TODO Auto-generated method stub return false; } @Override - public boolean Disconnect() { + public boolean disconnect() { // TODO Auto-generated method stub return false; } @Override - public boolean ExecuteStatement(JDBCStatementType type, String statement, String[] args) { + public boolean executeStatement(JDBCStatementType type, String statement, String[] args) { // TODO Auto-generated method stub return false; } @Override - public ResultSet ExecuteReturningStatement(JDBCStatementType type, String statement, String[] args) { + public ResultSet executeReturningStatement(JDBCStatementType type, String statement, String[] args) { // TODO Auto-generated method stub return null; } diff --git a/src/network/JDBCDriverSQLite.java b/src/network/JDBCDriverSQLite.java index 594906f..62edfe1 100644 --- a/src/network/JDBCDriverSQLite.java +++ b/src/network/JDBCDriverSQLite.java @@ -18,7 +18,7 @@ public class JDBCDriverSQLite extends JDBCDriver public static final String databaseName = "catfood"; @Override - public boolean Connect() + public boolean connect() { if(connection == null) { @@ -38,23 +38,23 @@ public class JDBCDriverSQLite extends JDBCDriver // create a connection to the database connection = DriverManager.getConnection(url); - GlobalLog.Log(LogFilter.Database, "Connection to SQLite has been established."); + GlobalLog.log(LogFilter.Database, "Connection to SQLite has been established."); } catch (SQLException e) { - GlobalLog.Error(e.getMessage()); + GlobalLog.error(e.getMessage()); } } else { - GlobalLog.Log(LogFilter.Database, "SQLite database asked to connect a second time. This is perfectly fine as this app has all its data tied together."); + GlobalLog.log(LogFilter.Database, "SQLite database asked to connect a second time. This is perfectly fine as this app has all its data tied together."); } return connection != null; } @Override - public boolean Disconnect() + public boolean disconnect() { try { @@ -67,13 +67,13 @@ public class JDBCDriverSQLite extends JDBCDriver } catch (SQLException ex) { - GlobalLog.Error(ex.getMessage()); + GlobalLog.error(ex.getMessage()); return false; } } @Override - public ResultSet ExecuteReturningStatement(JDBCStatementType type, String command, String[] args) + public ResultSet executeReturningStatement(JDBCStatementType type, String command, String[] args) { if(connection == null) return null; @@ -114,7 +114,7 @@ public class JDBCDriverSQLite extends JDBCDriver { try { - GlobalLog.Fatal(e.getMessage()); + GlobalLog.fatal(e.getMessage()); } catch (Exception e1) { @@ -125,7 +125,7 @@ public class JDBCDriverSQLite extends JDBCDriver } } - public boolean ExecuteStatement(JDBCStatementType type, String command, String[] args) + public boolean executeStatement(JDBCStatementType type, String command, String[] args) { if(connection == null) return false; @@ -178,7 +178,7 @@ public class JDBCDriverSQLite extends JDBCDriver { try { - GlobalLog.Fatal(e.getMessage()); + GlobalLog.fatal(e.getMessage()); } catch (Exception e1) { diff --git a/src/network/NetworkColiru.java b/src/network/NetworkColiru.java index 63d80fb..6cf23fd 100644 --- a/src/network/NetworkColiru.java +++ b/src/network/NetworkColiru.java @@ -4,7 +4,7 @@ import utils.HTTPUtils; public class NetworkColiru { - public String compileCPlus(String query) + public String compileCPlusPlus(String query) { // Escape characters that need escaping. // Primarily types of whitespace. @@ -15,7 +15,7 @@ public class NetworkColiru query = query.replace("\t", "\\t"); // Send the compilation request! - String result = HTTPUtils.SendPOSTRequest("http://coliru.stacked-crooked.com/compile" + String result = HTTPUtils.sendPOSTRequest("http://coliru.stacked-crooked.com/compile" , "{ \"cmd\": \"g++ main.cpp && ./a.out\", \"src\": \"" + query + "\" }"); // If we got a valid response... @@ -23,6 +23,7 @@ public class NetworkColiru { result = "Here's what happened when I went to compiled that! \n```" + result + "```"; } + return result; } diff --git a/src/network/NetworkDerpi.java b/src/network/NetworkDerpi.java index 04f82f5..4463b40 100644 --- a/src/network/NetworkDerpi.java +++ b/src/network/NetworkDerpi.java @@ -26,7 +26,7 @@ public class NetworkDerpi GenericImage image = new GenericImage(" ", " ", " "); query = query.trim(); query = query.replace(" ", ","); - String res = HTTPUtils.SendGETRequest(mainURL + query + "&random_image=1&key=" + Ref.derpiKey); + String res = HTTPUtils.sendGETRequest(mainURL + query + "&random_image=1&key=" + Ref.derpiKey); if(res != null) { // Use class evaluation on an array of the response object to be able to hold multiple. @@ -34,7 +34,7 @@ public class NetworkDerpi if(res != null) { - String res2 = HTTPUtils.SendGETRequest("https://derpibooru.org/" + obj.id + ".json"); + String res2 = HTTPUtils.sendGETRequest("https://derpibooru.org/" + obj.id + ".json"); image.editPostURL(""); DerpiResponseObject imageObj = jsonParser_.fromJson(res2, DerpiResponseObject.class); diff --git a/src/network/NetworkE621.java b/src/network/NetworkE621.java index 6cadeca..ef913a0 100644 --- a/src/network/NetworkE621.java +++ b/src/network/NetworkE621.java @@ -56,7 +56,7 @@ public class NetworkE621 // Configure and send request. Note: Random ordering added as first // tag by default. User-provided tags, therefore, will override it. // If order:score is provided, that will be honored over order:random. - String res = HTTPUtils.SendPOSTRequest(API_ROOT + String res = HTTPUtils.sendPOSTRequest(API_ROOT , "tags=order:random%20" + input + "&limit=" + maxSearchResults_); diff --git a/src/network/NetworkJDoodle.java b/src/network/NetworkJDoodle.java index 824f93b..5ba01f8 100644 --- a/src/network/NetworkJDoodle.java +++ b/src/network/NetworkJDoodle.java @@ -35,7 +35,8 @@ public class NetworkJDoodle String input = "{\"clientId\": \"" + Ref.jdoodleID + "\",\"clientSecret\":\"" + Ref.jdoodleSecret + "\",\"script\":\"" + query + "\",\"language\":\"" + lang + "\",\"versionIndex\":\"" + version + "\"} "; - try { + try + { URL url = new URL("https://api.jdoodle.com/v1/execute"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); @@ -69,10 +70,12 @@ public class NetworkJDoodle result += "The CPU time was " + doodle.cpuTime + "\n"; connection.disconnect(); return result; - } catch (MalformedURLException e) + } + catch (MalformedURLException e) { return "You probably shouldn't be seeing this"; - } catch (IOException e) + } + catch (IOException e) { return "You probably shouldn't be seeing this"; } diff --git a/src/network/NetworkTheColorAPI.java b/src/network/NetworkTheColorAPI.java index 2bb9f0d..5f2e2b2 100644 --- a/src/network/NetworkTheColorAPI.java +++ b/src/network/NetworkTheColorAPI.java @@ -71,12 +71,12 @@ public class NetworkTheColorAPI public tca_XYZ XYZ; } - public ColorData LookupHex(String hex) + public ColorData lookupHex(String hex) { try { hex = hex.replace("#", ""); - String response = HTTPUtils.SendGETRequest("https://www.thecolorapi.com/id?hex=" + hex); + String response = HTTPUtils.sendGETRequest("https://www.thecolorapi.com/id?hex=" + hex); ColorData data = jsonParser.fromJson(response, ColorData.class); return data; diff --git a/src/network/NetworkTwitter.java b/src/network/NetworkTwitter.java index f298e4e..0c9a9bd 100644 --- a/src/network/NetworkTwitter.java +++ b/src/network/NetworkTwitter.java @@ -18,8 +18,6 @@ public class NetworkTwitter .setOAuthConsumerSecret(Ref.twitterAPISecret) .setOAuthAccessToken(Ref.twitterAccessToken) .setOAuthAccessTokenSecret(Ref.twitterAccessTokenSecret); - - } public String tweet(String tweetText) throws Exception @@ -28,6 +26,5 @@ public class NetworkTwitter Twitter twitter = tf.getInstance(); Status status = twitter.updateStatus(tweetText); return "Status set to: `" + status.getText() + "`!"; - } } diff --git a/src/utils/GlobalLog.java b/src/utils/GlobalLog.java index 0131587..e0652ba 100644 --- a/src/utils/GlobalLog.java +++ b/src/utils/GlobalLog.java @@ -23,12 +23,12 @@ public class GlobalLog DateFormat dF = new SimpleDateFormat("yyyy_MM_dd_HH-mm"); Date today = new Date(); - FileUtils.CreateDirectoryIfDoesntExist(directory); + FileUtils.createDirectoryIfDoesntExist(directory); outputLog = new PrintWriter(directory + (dF.format(today) + ".log"), "UTF-8"); - GlobalLog.Log(LogFilter.Util, "Finished initializing logging system"); + GlobalLog.log(LogFilter.Util, "Finished initializing logging system"); } - private static void Write(String status, LogFilter filter, String body) + private static void write(String status, LogFilter filter, String body) { String logLine = "[" + status + "] " + "[" + filter.name() + "] " + body; outputLog.write(logLine + "\n"); @@ -36,13 +36,13 @@ public class GlobalLog System.out.println(logLine); } - public static void Log(String msg) { Write(log, LogFilter.Debug, msg); } - public static void Warn(String msg) { Write(warn, LogFilter.Debug, msg); } - public static void Error(String msg) { Write(error, LogFilter.Debug, msg); } - public static void Fatal(String msg) throws Exception { Write(fatal, LogFilter.Debug, msg); throw new Exception(msg); } + public static void log(String msg) { write(log, LogFilter.Debug, msg); } + public static void warn(String msg) { write(warn, LogFilter.Debug, msg); } + public static void error(String msg) { write(error, LogFilter.Debug, msg); } + public static void fatal(String msg) throws Exception { write(fatal, LogFilter.Debug, msg); throw new Exception(msg); } - public static void Log(LogFilter filter, String msg) { Write(log, filter, msg); } - public static void Warn(LogFilter filter, String msg) { Write(warn, filter, msg); } - public static void Error(LogFilter filter, String msg) { Write(error, filter, msg); } - public static void Fatal(LogFilter filter, String msg) throws Exception { Write(fatal, filter, msg); throw new Exception(msg); } + public static void log(LogFilter filter, String msg) { write(log, filter, msg); } + public static void warn(LogFilter filter, String msg) { write(warn, filter, msg); } + public static void error(LogFilter filter, String msg) { write(error, filter, msg); } + public static void fatal(LogFilter filter, String msg) throws Exception { write(fatal, filter, msg); throw new Exception(msg); } } diff --git a/src/utils/HTTPUtils.java b/src/utils/HTTPUtils.java index b9355a1..ef1ef98 100644 --- a/src/utils/HTTPUtils.java +++ b/src/utils/HTTPUtils.java @@ -21,7 +21,7 @@ public class HTTPUtils // Sends a GET request for the specified URL. - public static String SendGETRequest(String url) + public static String sendGETRequest(String url) { try { @@ -45,8 +45,8 @@ public class HTTPUtils // Sends a POST request to the desired URL. // There are two forms of this function, one of which takes - public static String SendPOSTRequest(String url) { return SendPOSTRequest(url, ""); } - public static String SendPOSTRequest(String url, String params) + public static String sendPOSTRequest(String url) { return sendPOSTRequest(url, ""); } + public static String sendPOSTRequest(String url, String params) { try { @@ -103,8 +103,10 @@ public class HTTPUtils // Close and return our data in.close(); return new String(String.toString()); - } else { - GlobalLog.Error(LogFilter.Network, con.getRequestMethod() + " responded with " + responseCode + " instead of 200."); + } + else + { + GlobalLog.error(LogFilter.Network, con.getRequestMethod() + " responded with " + responseCode + " instead of 200."); return Integer.toString(responseCode); } } diff --git a/src/utils/ImageOverlayBuilder.java b/src/utils/ImageOverlayBuilder.java index 21da10e..00837f2 100644 --- a/src/utils/ImageOverlayBuilder.java +++ b/src/utils/ImageOverlayBuilder.java @@ -34,10 +34,10 @@ public class ImageOverlayBuilder public static final String LOG_HEADER = "[Overlay] "; // Logging intermediate functions - private static void Verbose(String str) { if(VERBOSE) Log("[Verbose] " + str); } - private static void Log(String str) { GlobalLog.Log(LogFilter.Util, LOG_HEADER + str); } - private static void Warn(String str) { GlobalLog.Warn(LogFilter.Util, LOG_HEADER + str); } - private static void Error(String str) { GlobalLog.Error(LogFilter.Util, LOG_HEADER + str); } + private static void verbose(String str) { if(VERBOSE) log("[Verbose] " + str); } + private static void log(String str) { GlobalLog.log(LogFilter.Util, LOG_HEADER + str); } + private static void warn(String str) { GlobalLog.warn(LogFilter.Util, LOG_HEADER + str); } + private static void error(String str) { GlobalLog.error(LogFilter.Util, LOG_HEADER + str); } // Local variables private final String basePath; // The folder location of the files @@ -61,46 +61,46 @@ public class ImageOverlayBuilder } // Performs a per-frame overlay, catches IO errors as a note.) - public void Overlay(BufferedImage overlay, String outpath) + public void overlay(BufferedImage overlay, String outpath) { try { long start = Calendar.getInstance().getTimeInMillis(); - ProcessOverlay(overlay, outpath); + processOverlay(overlay, outpath); long end = Calendar.getInstance().getTimeInMillis(); - Log("Took " + (end - start) + "ms"); + log("Took " + (end - start) + "ms"); } catch (IOException e) { - Error(e.getMessage()); + error(e.getMessage()); } } // Processing the image frames to construct a gif. Relies on (0,255,0) pixel for image center specification. - private void ProcessOverlay(BufferedImage overlay, String outfileName) throws IOException + private void processOverlay(BufferedImage overlay, String outfileName) throws IOException { ArrayList frames = new ArrayList(frameCount); //BufferedImage[] frames = new BufferedImage[frameCount]; for(int i = 0; i < frameCount; ++i) { - BufferedImage out = CombineImages(basePath + baseName + i + FRAME_FILE_EXTENSION , overlay); + BufferedImage out = combineImages(basePath + baseName + i + FRAME_FILE_EXTENSION , overlay); if(out != null) frames.add(out);// = out; else - Warn("Skipping frame " + i + " of base " + basePath + baseName); + warn("Skipping frame " + i + " of base " + basePath + baseName); } if(frames.isEmpty()) { - Error("No frames were found at all, so the gif could not be made!"); + error("No frames were found at all, so the gif could not be made!"); return; } - Verbose("Processed " + frameCount + " frames, found " + frames.size() + " valid, writing..."); + verbose("Processed " + frameCount + " frames, found " + frames.size() + " valid, writing..."); ImageOutputStream output = new FileImageOutputStream(new File(outfileName)); GifSequenceWriter writer = new GifSequenceWriter(output, frames.get(0).getType(), fps, true); @@ -115,7 +115,7 @@ public class ImageOverlayBuilder // Performs an overlay at a pixel location. We're making some assumptions here, mostly that there is going // to be an RGBA-32-bit encoded PNG image read in for our parsing purposes. We then look for a 0, 255, 0 // green pixel on the base frame to apply the overlay buffer to, centered. - private BufferedImage CombineImages(String pathBase, BufferedImage overlay) throws IOException + private BufferedImage combineImages(String pathBase, BufferedImage overlay) throws IOException { // Acquire images BufferedImage imageBase = null; @@ -137,7 +137,7 @@ public class ImageOverlayBuilder // Warn about odd sizing when applicable if(overlayHeight > baseHeight || overlayWidth > baseWidth) - Warn("Size mismatch, overlay is larger. May function, but not supported."); + warn("Size mismatch, overlay is larger. May function, but not supported."); // Skim base picture for solid green pixel to use as target center int targetX = NONE; @@ -165,7 +165,7 @@ public class ImageOverlayBuilder // Skip overlay if we have no target location if(targetX == NONE || targetY == NONE) { - Verbose("No overlay required for this frame."); + verbose("No overlay required for this frame."); return imageBase; } diff --git a/src/utils/ImageUtils.java b/src/utils/ImageUtils.java index 7d8822a..640191c 100644 --- a/src/utils/ImageUtils.java +++ b/src/utils/ImageUtils.java @@ -39,7 +39,7 @@ public class ImageUtils boolean didWrite = ImageIO.write(data, extension, outputfile); if(!didWrite) { - GlobalLog.Error(LogFilter.Util, "Could not identify the writer for extension type '" + extension + "' - Did you accidentally include a period or other punctuation?"); + GlobalLog.error(LogFilter.Util, "Could not identify the writer for extension type '" + extension + "' - Did you accidentally include a period or other punctuation?"); return null; } @@ -47,7 +47,7 @@ public class ImageUtils } catch (IOException e) { - GlobalLog.Error(LogFilter.Util, "Exception in writeTempImageData: " + e.toString()); + GlobalLog.error(LogFilter.Util, "Exception in writeTempImageData: " + e.toString()); return null; } @@ -90,14 +90,14 @@ public class ImageUtils } catch(Exception e) { - GlobalLog.Error(LogFilter.Util, "Exception in downloadFromURL: " + e.toString()); + GlobalLog.error(LogFilter.Util, "Exception in downloadFromURL: " + e.toString()); return null; } } // Deletes the file provided, if it exists. Will continue, in a blocking way, // to attempt to delete the file 10 times a second until thread termination. - public static void BlockingFileDelete(File file) + public static void blockingFileDelete(File file) { if(file == null) return; diff --git a/src/utils/OptionParser.java b/src/utils/OptionParser.java index bc23853..0313366 100644 --- a/src/utils/OptionParser.java +++ b/src/utils/OptionParser.java @@ -40,10 +40,10 @@ public class OptionParser floating = new ArrayList(); if(toParse != null && toParse.length() > 0) - Parse(toParse); + parse(toParse); } - public void Parse(String vals) + public void parse(String vals) { String[] strings = vals.split("\\s+"); @@ -84,17 +84,17 @@ public class OptionParser } } - public ArrayList GetFloating() + public ArrayList getFloating() { return floating; } - public String GetOption(String arg) + public String getOption(String arg) { - return GetOption(arg, false); + return getOption(arg, false); } - public String GetOption(String option, boolean isCaseInsensitive) + public String getOption(String option, boolean isCaseInsensitive) { if(option == null) return null; diff --git a/src/utils/StringUtils.java b/src/utils/StringUtils.java index 5b490c4..04c3dec 100644 --- a/src/utils/StringUtils.java +++ b/src/utils/StringUtils.java @@ -2,7 +2,7 @@ package utils; public class StringUtils { - public static String UnEscape(String str) + public static String unEscape(String str) { str = str.replaceAll("\\\\b", "\b"); str = str.replaceAll("\\\\n", "\n"); @@ -15,7 +15,7 @@ public class StringUtils return str; } - public static String ReEscape(String str) + public static String reEscape(String str) { str = str.replaceAll("\\\b", "\\\\\\b"); str = str.replaceAll("\\\n", "\\\\\\n"); @@ -27,7 +27,7 @@ public class StringUtils } // Finds first whitespace in the string - public static int FindFirstWhitespace(String str) + public static int findFirstWhitespace(String str) { for (int i = 0; i < str.length(); ++i) { diff --git a/src/utils/io/DirectoryMonitor.java b/src/utils/io/DirectoryMonitor.java index 28f33f2..a27d7ac 100644 --- a/src/utils/io/DirectoryMonitor.java +++ b/src/utils/io/DirectoryMonitor.java @@ -20,16 +20,16 @@ public class DirectoryMonitor // Constructs a new file monitor and logs initialization public DirectoryMonitor(String directory) { - IOLog.Log("Reading directory files for montioring in: " + directory.toString()); + IOLog.log("Reading directory files for montioring in: " + directory.toString()); this.directory = directory; - this.last = Scrape(); + this.last = scrape(); - Print(last); + print(last); } // Scrape the target directory for all files and store them as custom objects in the list - private ArrayList Scrape() + private ArrayList scrape() { ArrayList files = new ArrayList(); @@ -39,13 +39,13 @@ public class DirectoryMonitor { paths.filter(Files::isRegularFile).forEach((path)-> { - files.add(new MonitoredFile(path, FileUtils.LastModified(path))); + files.add(new MonitoredFile(path, FileUtils.lastModified(path))); }); } } catch(Exception e) { - IOLog.Error(e.getMessage()); + IOLog.error(e.getMessage()); } return files; @@ -54,10 +54,10 @@ public class DirectoryMonitor // Update function - the first callback is called if a new item is added to the directory, // second is called if an item is updated, and third is called if an item is removed. @SuppressWarnings("unchecked") - public void Update(Consumer onAdd, Consumer onUpdate, Consumer onDelete) + public void update(Consumer onAdd, Consumer onUpdate, Consumer onDelete) { // Unparsed - ArrayList active = Scrape(); + ArrayList active = scrape(); ArrayList curr = (ArrayList)active.clone(); ArrayList prev = (ArrayList)last.clone(); @@ -125,19 +125,19 @@ public class DirectoryMonitor Collections.sort(last); if(last.size() == 0) - IOLog.Warn("There's nothing at all in a FileMonitor's target folder! Folder: " + directory); + IOLog.warn("There's nothing at all in a FileMonitor's target folder! Folder: " + directory); } // Returns the current list of files the monitor is tracking in the directory. - public List GetCurrentFiles() + public List getCurrentFiles() { return last; } // Prints out an arraylist of items from a directory by path - private void Print(ArrayList toPrint) + private void print(ArrayList toPrint) { for(int i = 0; i < toPrint.size(); ++i) - IOLog.Log(toPrint.get(i).path.toString()); + IOLog.log(toPrint.get(i).path.toString()); } } diff --git a/src/utils/io/FileMonitor.java b/src/utils/io/FileMonitor.java index 80de434..f634e45 100644 --- a/src/utils/io/FileMonitor.java +++ b/src/utils/io/FileMonitor.java @@ -11,12 +11,12 @@ public class FileMonitor // Constructs file monitor for a given file at a specific path. public FileMonitor(String path) { - Long last = FileUtils.LastModified(Paths.get(path)); + Long last = FileUtils.lastModified(Paths.get(path)); if(last == null) { file = null; - IOLog.Error("Couldn't find a readable file at " + path + "!"); + IOLog.error("Couldn't find a readable file at " + path + "!"); } else { @@ -26,24 +26,24 @@ public class FileMonitor // Looks at the file and sees if it has undergone any changes. // If so, the fileChanged function provided is called! - public void Update(Consumer fileChanged) + public void update(Consumer fileChanged) { if(file == null) { - IOLog.Error("Attempted to update a file that doesn't exist"); + IOLog.error("Attempted to update a file that doesn't exist"); return; } - Long last = FileUtils.LastModified(file.path); + Long last = FileUtils.lastModified(file.path); if(last == null) { - IOLog.Error("The file previously at " + file.path + " couldn't be read!"); + IOLog.error("The file previously at " + file.path + " couldn't be read!"); return; } if(last.longValue() != file.lastModified.longValue()) { - IOLog.Log("Most recently modified at " + last + ", stored version at " + file.lastModified); + IOLog.log("Most recently modified at " + last + ", stored version at " + file.lastModified); file = new MonitoredFile(file.path, last); fileChanged.accept(file); } diff --git a/src/utils/io/FileUtils.java b/src/utils/io/FileUtils.java index 21edfd6..493409b 100644 --- a/src/utils/io/FileUtils.java +++ b/src/utils/io/FileUtils.java @@ -14,7 +14,7 @@ import utils.LogFilter; public class FileUtils { - public static void CreateDirectoryIfDoesntExist(String directoryName) + public static void createDirectoryIfDoesntExist(String directoryName) { File directory = new File(directoryName); @@ -24,8 +24,8 @@ public class FileUtils } // Reads all lines from a file as a string - public static String ReadContent(File file) { return ReadContent(file.toPath()); } - public static String ReadContent(Path filePath) + public static String readContent(File file) { return readContent(file.toPath()); } + public static String readContent(Path filePath) { StringBuilder contentBuilder = new StringBuilder(); @@ -38,14 +38,14 @@ public class FileUtils } catch (IOException e) { - GlobalLog.Error(LogFilter.Util, e.getMessage()); + GlobalLog.error(LogFilter.Util, e.getMessage()); } return contentBuilder.toString(); } // Recursively acquires all files at and below the specified directory, returning them as an arraylist of paths. - public static ArrayList AcquireAllFiles(String startingDir) + public static ArrayList acquireAllFiles(String startingDir) { ArrayList items = new ArrayList(); @@ -59,14 +59,14 @@ public class FileUtils } catch (IOException e) { - GlobalLog.Error(LogFilter.Util, e.getMessage()); + GlobalLog.error(LogFilter.Util, e.getMessage()); } return items; } // Check when a file was last modified by path - public static Long LastModified(Path path) + public static Long lastModified(Path path) { File file = new File(path.toString()); @@ -76,7 +76,7 @@ public class FileUtils } else { - GlobalLog.Error(LogFilter.Util, "File doesn't exist at path: " + path); + GlobalLog.error(LogFilter.Util, "File doesn't exist at path: " + path); return null; } } diff --git a/src/utils/io/IOLog.java b/src/utils/io/IOLog.java index 5e994c3..5246de7 100644 --- a/src/utils/io/IOLog.java +++ b/src/utils/io/IOLog.java @@ -6,7 +6,7 @@ import utils.LogFilter; // Logging shim public class IOLog { - public static void Log(String s) { GlobalLog.Log(LogFilter.Util, s); } - public static void Warn(String s) { GlobalLog.Warn(LogFilter.Util, s); } - public static void Error(String s) { GlobalLog.Error(LogFilter.Util, s); } + public static void log(String s) { GlobalLog.log(LogFilter.Util, s); } + public static void warn(String s) { GlobalLog.warn(LogFilter.Util, s); } + public static void error(String s) { GlobalLog.error(LogFilter.Util, s); } } From 174c38887e2f1a958b010bf94895930fbe7c18e1 Mon Sep 17 00:00:00 2001 From: Matthew Cech Date: Wed, 19 Jun 2019 22:35:11 -0700 Subject: [PATCH 24/24] = Updated command formatting --- src/commands/CommandBlurry.java | 4 ++-- src/commands/CommandBoop.java | 12 ++++++------ src/commands/CommandHelpBuilder.java | 8 ++++---- src/commands/CommandMap.java | 10 +++++----- src/commands/CommandPerish.java | 4 ++-- src/commands/CommandShutdown.java | 2 -- src/commands/CommandStark.java | 4 ++-- 7 files changed, 21 insertions(+), 23 deletions(-) diff --git a/src/commands/CommandBlurry.java b/src/commands/CommandBlurry.java index c2a834b..221cc80 100644 --- a/src/commands/CommandBlurry.java +++ b/src/commands/CommandBlurry.java @@ -53,7 +53,7 @@ public class CommandBlurry extends Command return; } preProcessed = new File(filename); - ApplySnap(ImageIO.read(preProcessed), name); + applySnap(ImageIO.read(preProcessed), name); } catch (IOException e) { @@ -67,7 +67,7 @@ public class CommandBlurry extends Command ImageUtils.blockingFileDelete(postProcessed); } - private static void ApplySnap(BufferedImage image, String name) throws IOException + private static void applySnap(BufferedImage image, String name) throws IOException { BufferedImage blurred = ImageUtils.copyImage(image); // Iterate over each column left to right and touch up each pixel diff --git a/src/commands/CommandBoop.java b/src/commands/CommandBoop.java index d694277..fc4a1c3 100644 --- a/src/commands/CommandBoop.java +++ b/src/commands/CommandBoop.java @@ -19,13 +19,13 @@ public class CommandBoop extends Command public BoopTracker() { super("booptracker"); } - public void ApplyBoop() + public void applyBoop() { ++boops; markDirty(); } - public int HowMany() + public int howMany() { return boops; } @@ -68,14 +68,14 @@ public class CommandBoop extends Command { if(input.mentions == null) { - boopTracker.ApplyBoop(); - res.send(String.format(LocStrings.stub("BoopStandard"), user.name, boopTracker.HowMany())); + boopTracker.applyBoop(); + res.send(String.format(LocStrings.stub("BoopStandard"), user.name, boopTracker.howMany())); } else { if(input.mentions.length == 1) { - boopTracker.ApplyBoop(); + boopTracker.applyBoop(); res.send(String.format(LocStrings.stub("BoopPerson"), user.name, input.mentions[0].name)); return; } @@ -83,7 +83,7 @@ public class CommandBoop extends Command String booped = ""; for(int i = 0; i < input.mentions.length; i++) { - boopTracker.ApplyBoop(); + boopTracker.applyBoop(); if(i < input.mentions.length-1) booped += input.mentions[i].name + ", "; else diff --git a/src/commands/CommandHelpBuilder.java b/src/commands/CommandHelpBuilder.java index 109dc03..85c46f5 100644 --- a/src/commands/CommandHelpBuilder.java +++ b/src/commands/CommandHelpBuilder.java @@ -48,9 +48,9 @@ public class CommandHelpBuilder extends Command { // Format outstring and send it back for now String out = ""; - out += PopulateSection(KittyRole.Admin, commandsByRole, true) + "\n"; - out += PopulateSection(KittyRole.Mod, commandsByRole, true) + "\n"; - out += PopulateSection(KittyRole.General, commandsByRole, false) + "\n"; + out += populateSection(KittyRole.Admin, commandsByRole, true) + "\n"; + out += populateSection(KittyRole.Mod, commandsByRole, true) + "\n"; + out += populateSection(KittyRole.General, commandsByRole, false) + "\n"; // Write out file String filename = "buildhelp_out.txt"; @@ -73,7 +73,7 @@ public class CommandHelpBuilder extends Command { } // Generates the section for a specific role, optionally adding spacing after for another section - private String PopulateSection(KittyRole role, HashMap> commandsByRole, boolean delimitSection) + private String populateSection(KittyRole role, HashMap> commandsByRole, boolean delimitSection) { // Formatting variables final String headerStart = "

"; diff --git a/src/commands/CommandMap.java b/src/commands/CommandMap.java index f607229..0edf9de 100644 --- a/src/commands/CommandMap.java +++ b/src/commands/CommandMap.java @@ -52,11 +52,11 @@ public class CommandMap extends Command String widthStr = parser.getOption("-w", true); if(widthStr != null) - width = ValidateSize(Integer.parseInt(widthStr), MaxWidth); + width = validateSize(Integer.parseInt(widthStr), MaxWidth); String heightStr = parser.getOption("-h", true); if(heightStr != null) - height = ValidateSize(Integer.parseInt(heightStr), MaxHeight); + height = validateSize(Integer.parseInt(heightStr), MaxHeight); } catch(NumberFormatException e) { @@ -83,7 +83,7 @@ public class CommandMap extends Command // Response body creation body += "```\n"; - body += GenerateMap(width, height, randGenerator); + body += generateMap(width, height, randGenerator); body += "\n```"; // Send back the map @@ -91,7 +91,7 @@ public class CommandMap extends Command } // Verifies and appropriately caps input as necessary - int ValidateSize(int input, int max) + int validateSize(int input, int max) { if(input < 0) throw new NumberFormatException(); @@ -104,7 +104,7 @@ public class CommandMap extends Command // Does the map generation - String GenerateMap(int width, int height, Random gen) + String generateMap(int width, int height, Random gen) { String landscape[][] = new String[width][height]; int r1 = rand(gen); diff --git a/src/commands/CommandPerish.java b/src/commands/CommandPerish.java index 8da8ba6..d372510 100644 --- a/src/commands/CommandPerish.java +++ b/src/commands/CommandPerish.java @@ -59,7 +59,7 @@ public class CommandPerish extends Command return; } preProcessed = new File(filename); - ApplyTintEffect(ImageIO.read(preProcessed), name); + applyTintEffect(ImageIO.read(preProcessed), name); } catch (IOException e) { @@ -73,7 +73,7 @@ public class CommandPerish extends Command ImageUtils.blockingFileDelete(postProcessed); } - private static void ApplyTintEffect(BufferedImage image, String name) throws IOException + private static void applyTintEffect(BufferedImage image, String name) throws IOException { // Iterate over each column left to right and touch up each pixel for(int x = 0; x < image.getWidth(); ++x) diff --git a/src/commands/CommandShutdown.java b/src/commands/CommandShutdown.java index aec54ea..b6de2ea 100644 --- a/src/commands/CommandShutdown.java +++ b/src/commands/CommandShutdown.java @@ -41,8 +41,6 @@ public class CommandShutdown extends Command break; } - - if(isSafe) { // Force upkeep, this works so long as upkeep is on the main thread. diff --git a/src/commands/CommandStark.java b/src/commands/CommandStark.java index f33b076..9795b6e 100644 --- a/src/commands/CommandStark.java +++ b/src/commands/CommandStark.java @@ -53,7 +53,7 @@ public class CommandStark extends Command return; } preProcessed = new File(filename); - ApplySnap(ImageIO.read(preProcessed), name); + applySnap(ImageIO.read(preProcessed), name); } catch (IOException e) { @@ -67,7 +67,7 @@ public class CommandStark extends Command ImageUtils.blockingFileDelete(postProcessed); } - private static void ApplySnap(BufferedImage image, String name) throws IOException + private static void applySnap(BufferedImage image, String name) throws IOException { BufferedImage snap = ImageUtils.copyImage(image); // Iterate over each column left to right and touch up each pixel