From c1c7b1f89128d24b459fdc4a56c99f53dfc923ce Mon Sep 17 00:00:00 2001 From: Alex Stewart Date: Thu, 18 Apr 2019 22:13:49 -0700 Subject: [PATCH] +Added Fetch command Added Fetch command Refactored AddGuildRole and AllowedGuildRole to be standard Added GuildRoleRemove --- commands.config | 4 ++ locCommands.config | 6 +- locStrings.config | 38 +++++++---- src/commands/CommandFetch.java | 57 ++++++++++++++++ ...uildRole.java => CommandGuildRoleAdd.java} | 12 ++-- ...Role.java => CommandGuildRoleAllowed.java} | 10 +-- src/commands/CommandGuildRoleRemove.java | 40 +++++++++++ src/core/ObjectBuilderFactory.java | 66 ++++++------------- src/dataStructures/KittyGuild.java | 4 +- src/utils/AdminControl.java | 13 ++++ 10 files changed, 180 insertions(+), 70 deletions(-) create mode 100644 src/commands/CommandFetch.java rename src/commands/{CommandAddGuildRole.java => CommandGuildRoleAdd.java} (63%) rename src/commands/{CommandAllowedGuildRole.java => CommandGuildRoleAllowed.java} (66%) create mode 100644 src/commands/CommandGuildRoleRemove.java diff --git a/commands.config b/commands.config index 56f8bd9..257a7e9 100644 --- a/commands.config +++ b/commands.config @@ -35,3 +35,7 @@ invite=1 shutdown=1 addguildrole=1 allowedguildrole=1 +guildroleremove=1 +guildroleadd=1 +guildroleallowed=1 +fetch=1 diff --git a/locCommands.config b/locCommands.config index dbb7feb..93af80c 100644 --- a/locCommands.config +++ b/locCommands.config @@ -4,6 +4,7 @@ boop= tony, stark, dontfeelgood, dontfeelsogood= yeet= role= +guildroleremove= ping= rating= roll= @@ -12,13 +13,12 @@ choose= poll= rpstart= bet= -addguildrole= perish, thenperish= teey= stats= -allowedguildrole= beans= eightball, 8ball= +guildroleadd= vote= results= wolfram= @@ -32,8 +32,10 @@ rpend= rpg= tweet= java, jdoodle= +guildroleallowed= help= buildHelp= +fetch= invite= shutdown= diff --git a/locStrings.config b/locStrings.config index cc2fd23..377156f 100644 --- a/locStrings.config +++ b/locStrings.config @@ -13,6 +13,11 @@ HelpDisplay=You can get help with a specific command by typing `!help command`!\ RollError=Didn't work ;3; RollInfo=Based on input of xdy where x is number of dice and y is faces kitty will roll that amount of dice, display the individual rolls and total +[CommandGuildRoleAllowed] +GuildRoleAllowedInfo= +GuildRoleAllowedSuccess=Added %s to the allowed roles! +GuildRoleAllowedDuplicate=Can't add the same role twice! + [CommandStats] StatsInfo=Displays the actively running KittyBot application information @@ -20,6 +25,12 @@ StatsInfo=Displays the actively running KittyBot application information TweetInfo=Kitty will tweet to her personal twitter account TweetError=Tweet command failed! +[CommandGuildRoleAdd] +GuildRoleAddSuccess=Added %s to %s +GuildRoleAddFailure=Failed to add %s to %s +GuildRoleAddNotAllowed=You are not allowed to add %s! +GuildRoleAddInfo=Add a role to yourself! + [CommandRole] RoleInfo=Will show the current role you have, Admins can change others roles with input of 'role x @y' with x being blacklist, general, mod, or admin. Blacklist will not allow the user to interact with kitty anymore, general mod and admin will give the user access to those commands. RoleStandardResponse=Your role is @@ -49,11 +60,6 @@ StarkInfo=Snaps your icon or the icon of a friend you mentioned [CommandYeet] YeetInfo=Yeet yourself or yeet a friend with @! -[CommandAllowedGuildRole] -AllowedGuildRoleInfo= -AllowedGuildRoleDuplicate=Can't add the same role twice! -AllowedGuildRoleSuccess=Added %s to the allowed roles! - [CommandPollVote] PollVoteNotValidNumber=That's not a vaild number! PollVoteInfo=Vote in a poll with the choice number, won't work if no poll is running, you can't change your vote once you have cast it! Be careful! @@ -126,6 +132,16 @@ BoopInfo=Kitty will react with a counter BoopStandard=Woah! %s booped me! That's %s total! BoopMultiple=%s booped several others - %s! +[CommandFetch] +FetchError=That no picture! +FetchEat=Me eat now *monch %s* +FetchInfo=Throw a custom emote and me bring it back! +FetchCatchRun=*Catches and runs away with %s* +FetchRunAway=*Runs away and doesn't return for a long time* +FetchBringBack=Me gots it! %s +FetchBringBackWrong=Me gots it! %s +FetchStare=*Stares at %s* + [CommandInfo] InfoResponse=I'm made by `Rin#8904` and `Reverie Wisp#3703`!\nYou can find more info about me along with a Patreon link to support us and GitHub link for filing bugs https://www.rinsnowmew.com/bot/ InfoInfo=Provides author info and a link to Kitty's website @@ -166,17 +182,17 @@ EightBallYes10=Signs point to yes. [CommandInvite] InviteInfo=Provides a direct invite link for KittyBot +[CommandGuildRoleRemove] +GuildRoleRemoveNotAllowed=You're not allowed to add %s +GuildRoleRemoveFailure=Couldn't remove %s from %s +GuildRoleRemoveSuccess=Removed %s from %s! +GuildRoleRemoveInfo= + [CommandWolfram] WolframError=Something went wrong! WolframInfo=Will query wolframalpha with your question and give a full image output of the answer WolframNoArgs=You need to provide some arguments! -[CommandAddGuildRole] -AddGuildRoleInfo=Add a role to yourself! -AddGuildRoleNotAllowed=You are not allowed to add %s! -AddGuildRoleSuccess=Added %s to %s -AddGuildRoleFailure=Failed to add %s to %s - [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) MapSeed=Seed diff --git a/src/commands/CommandFetch.java b/src/commands/CommandFetch.java new file mode 100644 index 0000000..569c3c4 --- /dev/null +++ b/src/commands/CommandFetch.java @@ -0,0 +1,57 @@ +package commands; + +import core.Command; +import core.LocStrings; +import dataStructures.KittyChannel; +import dataStructures.KittyGuild; +import dataStructures.KittyRating; +import dataStructures.KittyRole; +import dataStructures.KittyUser; +import dataStructures.Response; +import dataStructures.UserInput; + +public class CommandFetch extends Command +{ + public CommandFetch(KittyRole level, KittyRating rating) { super(level, rating); } + + @Override + public String HelpText() { return LocStrings.Stub("FetchInfo"); } + + @Override + public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + { + String emote = input.args.split(" ")[0]; + if(emote.startsWith("<") && emote.endsWith(">")) + { + int num = (int)(Math.random() * 6) + 1; + switch(num) + { + case 1: + res.Call(String.format(LocStrings.Stub("FetchBringBack"), emote)); + break; + case 2: + 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))); + break; + case 4: + res.Call(String.format(LocStrings.Stub("FetchEat"), emote)); + break; + case 5: + res.Call(String.format(LocStrings.Stub("FetchCatchRun"), emote)); + break; + case 6: + res.Call(String.format(LocStrings.Stub("FetchStare"), user.name)); + break; + default: + res.Call("" + num); + } + } + else + { + res.Call(String.format(LocStrings.Stub("FetchError"))); + System.out.println(emote); + } + } +} \ No newline at end of file diff --git a/src/commands/CommandAddGuildRole.java b/src/commands/CommandGuildRoleAdd.java similarity index 63% rename from src/commands/CommandAddGuildRole.java rename to src/commands/CommandGuildRoleAdd.java index 3c20873..a459094 100644 --- a/src/commands/CommandAddGuildRole.java +++ b/src/commands/CommandGuildRoleAdd.java @@ -10,12 +10,12 @@ import dataStructures.KittyUser; import dataStructures.Response; import dataStructures.UserInput; -public class CommandAddGuildRole extends Command +public class CommandGuildRoleAdd extends Command { - public CommandAddGuildRole(KittyRole level, KittyRating rating) { super(level, rating); } + public CommandGuildRoleAdd(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("AddGuildRoleInfo"); }; + public String HelpText() { return LocStrings.Stub("GuildRoleAddInfo"); }; @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -25,16 +25,16 @@ public class CommandAddGuildRole extends Command { if(guild.control.addRole(user.discordID, role)) { - res.Call(String.format(LocStrings.Stub("AddGuildRoleSuccess"), role, user.name)); + res.Call(String.format(LocStrings.Stub("GuildRoleAddSuccess"), role, user.name)); } else { - res.Call(String.format(LocStrings.Stub("AddGuildRoleFailure"), role, user.name)); + res.Call(String.format(LocStrings.Stub("GuildRoleAddFailure"), role, user.name)); } } else { - res.Call(String.format(LocStrings.Stub("AddGuildRoleNotAllowed"), role)); + res.Call(String.format(LocStrings.Stub("GuildRoleAddNotAllowed"), role)); } } } \ No newline at end of file diff --git a/src/commands/CommandAllowedGuildRole.java b/src/commands/CommandGuildRoleAllowed.java similarity index 66% rename from src/commands/CommandAllowedGuildRole.java rename to src/commands/CommandGuildRoleAllowed.java index f71697e..3fbacb5 100644 --- a/src/commands/CommandAllowedGuildRole.java +++ b/src/commands/CommandGuildRoleAllowed.java @@ -10,12 +10,12 @@ import dataStructures.KittyUser; import dataStructures.Response; import dataStructures.UserInput; -public class CommandAllowedGuildRole extends Command +public class CommandGuildRoleAllowed extends Command { - public CommandAllowedGuildRole(KittyRole level, KittyRating rating) { super(level, rating); } + public CommandGuildRoleAllowed(KittyRole level, KittyRating rating) { super(level, rating); } @Override - public String HelpText() { return LocStrings.Stub("AllowedGuildRoleInfo"); } + public String HelpText() { return LocStrings.Stub("GuildRoleAllowedInfo"); } @Override public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) @@ -27,12 +27,12 @@ public class CommandAllowedGuildRole extends Command role = roles[i].trim(); if(guild.allowedRole.contains(role)) { - res.Call(LocStrings.Stub("AllowedGuildRoleDuplicate")); + res.Call(LocStrings.Stub("GuildRoleAllowedDuplicate")); } else { guild.allowedRole.add(role); - res.Call(String.format(LocStrings.Stub("AllowedGuildRoleSuccess"), role)); + res.Call(String.format(LocStrings.Stub("GuildRoleAllowedSuccess"), role)); } } } diff --git a/src/commands/CommandGuildRoleRemove.java b/src/commands/CommandGuildRoleRemove.java new file mode 100644 index 0000000..5535538 --- /dev/null +++ b/src/commands/CommandGuildRoleRemove.java @@ -0,0 +1,40 @@ +package commands; + +import core.Command; +import core.LocStrings; +import dataStructures.KittyChannel; +import dataStructures.KittyGuild; +import dataStructures.KittyRating; +import dataStructures.KittyRole; +import dataStructures.KittyUser; +import dataStructures.Response; +import dataStructures.UserInput; + +public class CommandGuildRoleRemove extends Command +{ + public CommandGuildRoleRemove(KittyRole level, KittyRating rating) { super(level, rating); } + + @Override + public String HelpText() { return LocStrings.Stub("GuildRoleRemoveInfo"); }; + + @Override + public void OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res) + { + String role = input.args.split(" ")[0]; + if(guild.allowedRole.contains(role)) + { + if(guild.control.removeRole(user.discordID, role)) + { + res.Call(String.format(LocStrings.Stub("GuildRoleRemoveSuccess"), role, user.name)); + } + else + { + res.Call(String.format(LocStrings.Stub("GuildRoleRemoveFailure"), role, user.name)); + } + } + else + { + res.Call(String.format(LocStrings.Stub("GuildRoleRemoveNotAllowed"), role)); + } + } +} \ No newline at end of file diff --git a/src/core/ObjectBuilderFactory.java b/src/core/ObjectBuilderFactory.java index a186f28..e4f806d 100644 --- a/src/core/ObjectBuilderFactory.java +++ b/src/core/ObjectBuilderFactory.java @@ -1,50 +1,13 @@ package core; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.concurrent.Semaphore; -import commands.CommandAddGuildRole; -import commands.CommandAllowedGuildRole; -import commands.CommandBeansShow; -import commands.CommandBetBeans; -import commands.CommandBlurry; -import commands.CommandBoop; -import commands.CommandChangeIndicator; -import commands.CommandChoose; -import commands.CommandColiru; -import commands.CommandDoWork; -import commands.CommandEightBall; -import commands.CommandGiveBeans; -import commands.CommandHelp; -import commands.CommandHelpBuilder; -import commands.CommandInfo; -import commands.CommandInvite; -import commands.CommandJDoodle; -import commands.CommandMap; -import commands.CommandPerish; -import commands.CommandPing; -import commands.CommandPollManage; -import commands.CommandPollResults; -import commands.CommandPollShow; -import commands.CommandPollVote; -import commands.CommandRPEnd; -import commands.CommandRPG; -import commands.CommandRPStart; -import commands.CommandRating; -import commands.CommandRole; -import commands.CommandRoll; -import commands.CommandShutdown; -import commands.CommandStark; -import commands.CommandStats; -import commands.CommandTeey; -import commands.CommandTweet; -import commands.CommandWolfram; -import commands.CommandYeet; -import dataStructures.KittyChannel; -import dataStructures.KittyGuild; -import dataStructures.KittyRating; -import dataStructures.KittyRole; -import dataStructures.KittyUser; +import commands.*; +import dataStructures.*; +import net.dv8tion.jda.core.entities.Emote; import net.dv8tion.jda.core.entities.Member; import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; import utils.AdminControl; @@ -136,6 +99,17 @@ public class ObjectBuilderFactory // look up the guild. String uid = event.getGuild().getId(); + List emotes = event.getGuild().getEmotes(); + ArrayList emotesString = new ArrayList(); + String emote; + String emoteFix; + for(int i = 0; i < emotes.size(); i++) + { + emote = emotes.get(i).toString(); + emoteFix = "<:" + emote.substring(2, emote.indexOf("(")); + 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; @@ -149,7 +123,7 @@ public class ObjectBuilderFactory else { // Construct a new guild with defaults - guild = new KittyGuild(uid, new AdminControl(event.getGuild())); + guild = new KittyGuild(uid, new AdminControl(event.getGuild()), emotesString); DatabaseManager.instance.Register(guild); guildCache.put(uid, guild); } @@ -363,13 +337,15 @@ public class ObjectBuilderFactory 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("allowedguildrole"), new CommandAllowedGuildRole(KittyRole.Admin, KittyRating.Safe)); + manager.Register(LocCommands.Stub("guildroleallowed"), new CommandGuildRoleAllowed(KittyRole.Admin, 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("addguildrole"), new CommandAddGuildRole(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)); diff --git a/src/dataStructures/KittyGuild.java b/src/dataStructures/KittyGuild.java index 4a9ad22..92b7770 100644 --- a/src/dataStructures/KittyGuild.java +++ b/src/dataStructures/KittyGuild.java @@ -14,19 +14,21 @@ public class KittyGuild extends DatabaseTrackedObject public String poll; public ArrayList hasVoted = new ArrayList(); public ArrayList allowedRole = new ArrayList(); + public ArrayList emoji = new ArrayList(); public ArrayList choices = new ArrayList(); public AdminControl control; private String commandIndicator; // Default content for a guild - public KittyGuild(String uniqueID, AdminControl adminControl) + public KittyGuild(String uniqueID, AdminControl adminControl, ArrayList emoji) { super(uniqueID); control = adminControl; this.uniqueID = uniqueID; this.contentRating = KittyRating.Safe; this.polling = false; + this.emoji = emoji; SetCommandIndicator("!"); } diff --git a/src/utils/AdminControl.java b/src/utils/AdminControl.java index 7124f75..bc919d2 100644 --- a/src/utils/AdminControl.java +++ b/src/utils/AdminControl.java @@ -26,4 +26,17 @@ public class AdminControl } return true; } + + public boolean removeRole(String memberID, String roleName) + { + try + { + guildCon.removeRolesFromMember(guild.getMemberById(memberID), guild.getRolesByName(roleName, true)).complete(); + } + catch(Exception e) + { + return false; + } + return true; + } }