From 41c1d28bcc2b3cd4995f55001d28563a1b9d77ac Mon Sep 17 00:00:00 2001 From: Steven Tracey Date: Wed, 22 Jun 2022 00:19:46 -0400 Subject: [PATCH] Modules! --- .idea/inspectionProfiles/Project_Default.xml | 8 ++ .idea/misc.xml | 5 -- build.gradle | 26 ++++++- src/main/java/net/nevet5gi/buzzbot/Bot.java | 32 +++++++- src/main/java/net/nevet5gi/buzzbot/Group.java | 5 -- .../java/net/nevet5gi/buzzbot/Listener.java | 29 +++++-- src/main/java/net/nevet5gi/buzzbot/Test.java | 26 ++++++- .../net/nevet5gi/buzzbot/commands/BanCmd.java | 11 +-- .../net/nevet5gi/buzzbot/commands/BeeCmd.java | 2 +- .../nevet5gi/buzzbot/commands/HelpCmd.java | 17 ++++- .../nevet5gi/buzzbot/commands/PingCmd.java | 2 +- .../nevet5gi/buzzbot/commands/SetRoleCmd.java | 60 +++++++++++++++ .../nevet5gi/buzzbot/commands/TestCmd.java | 9 ++- .../nevet5gi/buzzbot/commands/UnbanCmd.java | 19 ++++- .../nevet5gi/buzzbot/commands/WarnCmd.java | 58 +++++++++----- .../commands/utils/CommandContext.java | 1 + .../commands/utils/CommandManager.java | 39 +++++++--- .../commands/utils/ICommandContext.java | 67 ++++++++++++++-- .../net/nevet5gi/buzzbot/database/SqlDB.java | 76 ++++++++++++------- .../buzzbot/functions/ProfanityFilter.java | 4 +- .../nevet5gi/buzzbot/modules/BuzzyModule.java | 12 +++ .../buzzbot/modules/ModuleLoader.java | 71 +++++++++++++++++ .../net/nevet5gi/buzzbot/objects/BanData.java | 17 +---- .../{UserData.java => DisciplineData.java} | 16 +++- .../net/nevet5gi/buzzbot/objects/Group.java | 37 +++++++++ .../nevet5gi/buzzbot/objects/GuildData.java | 36 +++++++++ .../nevet5gi/buzzbot/objects/ModRoles.java | 17 +++++ .../nevet5gi/buzzbot/objects/MuteData.java | 16 +--- .../nevet5gi/buzzbot/objects/WarnData.java | 36 +-------- .../net/nevet5gi/buzzbot/util/GuildUtils.java | 19 +++++ .../net/nevet5gi/buzzbot/util/JsonUtils.java | 6 +- 31 files changed, 611 insertions(+), 168 deletions(-) create mode 100644 .idea/inspectionProfiles/Project_Default.xml delete mode 100644 src/main/java/net/nevet5gi/buzzbot/Group.java create mode 100644 src/main/java/net/nevet5gi/buzzbot/commands/SetRoleCmd.java create mode 100644 src/main/java/net/nevet5gi/buzzbot/modules/BuzzyModule.java create mode 100644 src/main/java/net/nevet5gi/buzzbot/modules/ModuleLoader.java rename src/main/java/net/nevet5gi/buzzbot/objects/{UserData.java => DisciplineData.java} (81%) create mode 100644 src/main/java/net/nevet5gi/buzzbot/objects/Group.java create mode 100644 src/main/java/net/nevet5gi/buzzbot/objects/ModRoles.java create mode 100644 src/main/java/net/nevet5gi/buzzbot/util/GuildUtils.java diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..3153295 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 681fa6a..fe0b0da 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -7,9 +7,4 @@ - - - \ No newline at end of file diff --git a/build.gradle b/build.gradle index 9146015..0cbe586 100644 --- a/build.gradle +++ b/build.gradle @@ -1,13 +1,14 @@ plugins { id 'java' id 'application' + id 'maven-publish' id 'com.github.johnrengelman.shadow' version '5.2.0' } mainClassName = 'net.nevet5gi.buzzbot.Bot' group 'net.nevet5gi' -version '0.4.1' +version '0.5.0' sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 @@ -36,4 +37,25 @@ dependencies { //implementation 'com.github.Kaktushose:jda-commands:v.2.2.0' } -compileJava.options.encoding = 'UTF-8' \ No newline at end of file +compileJava.options.encoding = 'UTF-8' + +apply plugin: 'maven-publish' +publishing { + publications{ + publish(MavenPublication) { + artifact("nexus/BuzzBot-$version" + ".jar") { + extension 'jar' + } + } + } + repositories { + maven { + name 'nexus' + url "https://repo.nevets.tech/repository/maven-releases/" + credentials { + username System.getenv('nexusUser') + password System.getenv('nexusPass') + } + } + } +} \ No newline at end of file diff --git a/src/main/java/net/nevet5gi/buzzbot/Bot.java b/src/main/java/net/nevet5gi/buzzbot/Bot.java index 58ac84c..43be8ed 100644 --- a/src/main/java/net/nevet5gi/buzzbot/Bot.java +++ b/src/main/java/net/nevet5gi/buzzbot/Bot.java @@ -3,32 +3,56 @@ package net.nevet5gi.buzzbot; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.entities.Activity; +import net.dv8tion.jda.api.hooks.ListenerAdapter; import net.dv8tion.jda.api.utils.cache.CacheFlag; import net.nevet5gi.buzzbot.commands.utils.CommandManager; +import net.nevet5gi.buzzbot.modules.BuzzyModule; +import net.nevet5gi.buzzbot.modules.ModuleLoader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.security.auth.login.LoginException; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; import java.util.EnumSet; public class Bot { + //TODO Make shutdown sequence public static JDA jda; private static final Logger LOGGER = LoggerFactory.getLogger(Bot.class); + public static final ArrayList PLUGINS = new ArrayList<>(); + private static ArrayList modules; public static void main(String[] args) { Config.loadConfig(); + try { + modules = ModuleLoader.loadModules(); + } catch (IOException | ClassNotFoundException | NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException e) { + System.out.println("Have fun with this stack trace ;)"); + e.printStackTrace(); + modules = new ArrayList<>(); + } try { - jda = JDABuilder.createDefault(Config.getConfig().getString("bot.token")) + JDABuilder builder = JDABuilder.createDefault(Config.getConfig().getString("bot.token")) .disableCache(EnumSet.of( CacheFlag.CLIENT_STATUS, CacheFlag.ACTIVITY, CacheFlag.EMOTE )) - .enableCache(CacheFlag.VOICE_STATE) - .addEventListeners(new Listener()) - .build(); + .enableCache(CacheFlag.VOICE_STATE); + + for (ListenerAdapter listener : PLUGINS) { + builder.addEventListeners(listener); + } + + jda = builder.build(); + CommandManager.registerSlashCommands(); + for (BuzzyModule module : modules) { + module.onEnable(jda); + } getActivity(); LOGGER.info("BuzzBot finished loading!"); } catch (LoginException e) { diff --git a/src/main/java/net/nevet5gi/buzzbot/Group.java b/src/main/java/net/nevet5gi/buzzbot/Group.java deleted file mode 100644 index 8babc49..0000000 --- a/src/main/java/net/nevet5gi/buzzbot/Group.java +++ /dev/null @@ -1,5 +0,0 @@ -package net.nevet5gi.buzzbot; - -public class Group { - -} diff --git a/src/main/java/net/nevet5gi/buzzbot/Listener.java b/src/main/java/net/nevet5gi/buzzbot/Listener.java index ee3d65a..ef954c4 100644 --- a/src/main/java/net/nevet5gi/buzzbot/Listener.java +++ b/src/main/java/net/nevet5gi/buzzbot/Listener.java @@ -2,6 +2,7 @@ package net.nevet5gi.buzzbot; import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.events.ReadyEvent; +import net.dv8tion.jda.api.events.guild.GuildJoinEvent; import net.dv8tion.jda.api.events.interaction.SlashCommandEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageUpdateEvent; @@ -9,6 +10,7 @@ import net.dv8tion.jda.api.hooks.ListenerAdapter; import net.nevet5gi.buzzbot.commands.utils.CommandManager; import net.nevet5gi.buzzbot.database.SqlDB; import net.nevet5gi.buzzbot.functions.ProfanityFilter; +import net.nevet5gi.buzzbot.objects.GuildData; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,6 +31,19 @@ public class Listener extends ListenerAdapter { LOGGER.info("BuzzBot is ready: " + event.getJDA().getSelfUser().getAsTag()); } + @Override + public void onGuildJoin(@Nonnull GuildJoinEvent event) { + GuildData guild = new GuildData(); + guild.setName(event.getGuild().getName()); + guild.setId(event.getGuild().getIdLong()); + guild.setGroup("master"); + guild.setProfanityLevel(0); + + SqlDB sql = new SqlDB(); + sql.addGuild(guild); + sql.close(); + } + @Override public void onGuildMessageReceived(@Nonnull GuildMessageReceivedEvent event) { User user = event.getAuthor(); @@ -41,17 +56,16 @@ public class Listener extends ListenerAdapter { if (profanityFilter.containsProfanity(raw, "strong")) { SqlDB sql = new SqlDB(); int profanityLevel = sql.getGuildData(event.getGuild().getIdLong()).getProfanityLevel(); + sql.close(); switch (profanityLevel) { - case 1: + case 1 -> { if (profanityFilter.containsProfanity(raw, "mild")) profanityFilter.handle(event); - break; - case 2: + } + case 2 -> { if (profanityFilter.containsProfanity(raw, "moderate")) profanityFilter.handle(event); - break; - case 3: - profanityFilter.handle(event); - break; + } + case 3 -> profanityFilter.handle(event); } } @@ -67,6 +81,7 @@ public class Listener extends ListenerAdapter { if (profanityFilter.containsProfanity(raw, "strong")) { SqlDB sql = new SqlDB(); int profanityLevel = sql.getGuildData(event.getGuild().getIdLong()).getProfanityLevel(); + sql.close(); switch (profanityLevel) { case 1: diff --git a/src/main/java/net/nevet5gi/buzzbot/Test.java b/src/main/java/net/nevet5gi/buzzbot/Test.java index 0575e80..49a8e97 100644 --- a/src/main/java/net/nevet5gi/buzzbot/Test.java +++ b/src/main/java/net/nevet5gi/buzzbot/Test.java @@ -4,6 +4,7 @@ import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.utils.cache.CacheFlag; import net.nevet5gi.buzzbot.database.SqlDB; +import net.nevet5gi.buzzbot.modules.ModuleLoader; import net.nevet5gi.buzzbot.objects.BanData; import javax.security.auth.login.LoginException; @@ -18,10 +19,26 @@ public class Test { public static void main(String[] args) { Config.loadConfig(); - initJda(); + //initJda(); - jda.retrieveUserById(712116155388526693L).queue(user -> { System.out.println(Integer.parseInt(user.getDiscriminator())); }); + ModuleLoader.getModules(); +// String role = "helper_id"; +// String roleId = "234098234"; +// String guildId = "34958735345345345"; +// +// String sql = "UPDATE guild_settings SET " + role + " = " + roleId + " WHERE guild_id = " + guildId; +// +// System.out.println(sql); + + //GuildData guild = new GuildData(); + //guild.setName("Certified Tater"); + //guild.setId(948704397569958038L); + //guild.setGroup("developer"); + //guild.setProfanityLevel(0); + + //SqlDB sql = new SqlDB(); + //sql.addGuild(guild); //sqlTest(); } @@ -45,14 +62,15 @@ public class Test { private static void sqlTest() { SqlDB db = new SqlDB(); - BanData ban = new BanData(972924565361695745L, "nevetS", Date.valueOf(LocalDate.now()), Time.valueOf(LocalTime.now()), true, 0, "Reason", "test3", 865368792980914186L, "DevHQ", 824071914673668138L); + BanData ban = new BanData(972924565361695745L, "nevetS", Date.valueOf(LocalDate.now()), Time.valueOf(LocalTime.now()), "reason", true, 0, "test3", 865368792980914186L, "DevHQ", 824071914673668138L); db.insertBan(ban, "masterbanlist"); + db.close(); SqlDB db2 = new SqlDB(); BanData qban = db2.queryBan(972924565361695745L, "masterbanlist"); + db2.close(); System.out.println(qban.getUserName()); System.out.println(qban.getDate()); - System.out.println(qban.getBanReason()); } } diff --git a/src/main/java/net/nevet5gi/buzzbot/commands/BanCmd.java b/src/main/java/net/nevet5gi/buzzbot/commands/BanCmd.java index bbdbe8e..fbc48e2 100644 --- a/src/main/java/net/nevet5gi/buzzbot/commands/BanCmd.java +++ b/src/main/java/net/nevet5gi/buzzbot/commands/BanCmd.java @@ -61,12 +61,12 @@ public class BanCmd implements ICommand { sb.append(" "); } } - ban.setBanReason(sb.toString().trim()); + ban.setReason(sb.toString().trim()); if (ban.getBanLength() == 0) { - ctx.getChannel().sendMessage("<@" + ctx.getMessage().getAuthor().getId() + "> permanently banned <@" + ban.getUserId() + ">. Reason: " + ban.getBanReason()).queue(); + ctx.getChannel().sendMessage("<@" + ctx.getMessage().getAuthor().getId() + "> permanently banned <@" + ban.getUserId() + ">. Reason: " + ban.getReason()).queue(); } else { - ctx.getChannel().sendMessage("<@" + ctx.getMessage().getAuthor().getId() + "> banned <@" + ban.getUserId() + "> for " + ban.getBanLength() + " hours. Reason: " + ban.getBanReason()).queue(); + ctx.getChannel().sendMessage("<@" + ctx.getMessage().getAuthor().getId() + "> banned <@" + ban.getUserId() + "> for " + ban.getBanLength() + " hours. Reason: " + ban.getReason()).queue(); } Bot.jda.retrieveUserById(ban.getUserId()).queue(user -> { ban.setUserName(user.getName()); }); @@ -75,8 +75,9 @@ public class BanCmd implements ICommand { ban.setServerId(ctx.getGuild().getIdLong()); ban.setServerName(ctx.getGuild().getName()); - //SqlDB db = new SqlDB(); - //db.insertBan(ban, "master_ban_record"); + SqlDB sql = new SqlDB(); + sql.insertBan(ban, "master_ban_record"); + sql.close(); //ctx.getEvent().getGuild().ban(cmdf, 1 , "").submit(); //ctx.getMessage().reply("yes ban"); diff --git a/src/main/java/net/nevet5gi/buzzbot/commands/BeeCmd.java b/src/main/java/net/nevet5gi/buzzbot/commands/BeeCmd.java index b9dfc29..2216ec7 100644 --- a/src/main/java/net/nevet5gi/buzzbot/commands/BeeCmd.java +++ b/src/main/java/net/nevet5gi/buzzbot/commands/BeeCmd.java @@ -62,7 +62,7 @@ public class BeeCmd implements ICommand, ISlashCommand { try { getHttpConnection(); } catch (IOException | InterruptedException e) { e.printStackTrace(); } EmbedBuilder eb = new EmbedBuilder(); eb.setImage(url.replace("\"","")); - ctx.getSlashEvent().getHook().sendMessageEmbeds(eb.build()).queue(); + ctx.getHook().sendMessageEmbeds(eb.build()).queue(); } @Override diff --git a/src/main/java/net/nevet5gi/buzzbot/commands/HelpCmd.java b/src/main/java/net/nevet5gi/buzzbot/commands/HelpCmd.java index c5dea17..2c812e2 100644 --- a/src/main/java/net/nevet5gi/buzzbot/commands/HelpCmd.java +++ b/src/main/java/net/nevet5gi/buzzbot/commands/HelpCmd.java @@ -2,13 +2,16 @@ package net.nevet5gi.buzzbot.commands; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.entities.TextChannel; +import net.dv8tion.jda.api.interactions.commands.Command; import net.dv8tion.jda.api.interactions.commands.OptionMapping; import net.dv8tion.jda.api.interactions.commands.OptionType; import net.dv8tion.jda.api.interactions.commands.build.CommandData; +import net.dv8tion.jda.api.interactions.commands.build.OptionData; import net.nevet5gi.buzzbot.Config; import net.nevet5gi.buzzbot.commands.utils.*; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; import java.util.List; public class HelpCmd implements ICommand, ISlashCommand { @@ -106,9 +109,21 @@ public class HelpCmd implements ICommand, ISlashCommand { @Override public @NotNull CommandData getCommandData() { + List choices = new ArrayList<>(); + + for (ICommand cmd : manager.getCommands()) { + choices.add(new Command.Choice(cmd.getName(), cmd.getName())); + } + + for (ISlashCommand cmd : manager.getSlashCommands()) { + choices.add(new Command.Choice(cmd.getName(), cmd.getName())); + } + + OptionData option = new OptionData(OptionType.STRING, "command", "Gives info on specified command", false); + option.addChoices(choices); return new CommandData(this.getName(), this.getDescription()) - .addOption(OptionType.STRING, "command", "Gives info on this command", false); + .addOptions(option); } @Override diff --git a/src/main/java/net/nevet5gi/buzzbot/commands/PingCmd.java b/src/main/java/net/nevet5gi/buzzbot/commands/PingCmd.java index b06fa7e..0e3c871 100644 --- a/src/main/java/net/nevet5gi/buzzbot/commands/PingCmd.java +++ b/src/main/java/net/nevet5gi/buzzbot/commands/PingCmd.java @@ -29,7 +29,7 @@ public class PingCmd implements ICommand, ISlashCommand { @Override public void handleSlash(CommandContext ctx) { JDA jda = Bot.jda; - jda.getRestPing().queue(ping -> ctx.getSlashEvent().getHook().sendMessageFormat("Rest API Ping: %sms\nWebSocket Ping: %sms", ping, jda.getGatewayPing()).queue()); + jda.getRestPing().queue(ping -> ctx.getHook().sendMessageFormat("Rest API Ping: %sms\nWebSocket Ping: %sms", ping, jda.getGatewayPing()).queue()); } @Override diff --git a/src/main/java/net/nevet5gi/buzzbot/commands/SetRoleCmd.java b/src/main/java/net/nevet5gi/buzzbot/commands/SetRoleCmd.java new file mode 100644 index 0000000..8fe6c25 --- /dev/null +++ b/src/main/java/net/nevet5gi/buzzbot/commands/SetRoleCmd.java @@ -0,0 +1,60 @@ +package net.nevet5gi.buzzbot.commands; + +import net.dv8tion.jda.api.interactions.commands.OptionType; +import net.dv8tion.jda.api.interactions.commands.build.CommandData; +import net.dv8tion.jda.api.interactions.commands.build.OptionData; +import net.nevet5gi.buzzbot.commands.utils.CommandContext; +import net.nevet5gi.buzzbot.commands.utils.ISlashCommand; +import net.nevet5gi.buzzbot.database.SqlDB; +import net.nevet5gi.buzzbot.objects.ModRoles; + +import java.util.ArrayList; +import java.util.List; + +public class SetRoleCmd implements ISlashCommand { + @Override + public String getName() { + return "setrole"; + } + + @Override + public int getPermissionLevel() { + return 4; + } + + @Override + public String getHelp() { + return "Sets the role id for the moderation roles"; + } + + @Override + public void handleSlash(CommandContext ctx) { + SqlDB sql = new SqlDB(); + sql.updateGuildRole(ctx.getGuild().getIdLong(), ctx.getSlashEvent().getOption("role").getAsString(), ctx.getSlashEvent().getOption("guild_role").getAsRole().getIdLong()); + sql.close(); + ctx.getHook().sendMessage("Assigned role <@&" + ctx.getSlashEvent().getOption("guild_role").getAsRole().getId() + "> to " + ctx.getSlashEvent().getOption("role").getAsString()).queue(); + } + + @Override + public String getDescription() { + return this.getHelp(); + } + + @Override + public CommandData getCommandData() { + List options = new ArrayList<>(); + + OptionData role = new OptionData(OptionType.STRING, "role", "Role assigned to moderation roles", true); + role.addChoice("helper", ModRoles.HELPER.getRole()); + role.addChoice("moderator", ModRoles.MODERATOR.getRole()); + role.addChoice("administrator", ModRoles.ADMINISTRATOR.getRole()); + role.addChoice("owner", ModRoles.OWNER.getRole()); + options.add(role); + + OptionData guildRole = new OptionData(OptionType.ROLE, "guild_role", "Mentioned role to assign", true); + options.add(guildRole); + + return new CommandData(this.getName(), this.getDescription()) + .addOptions(options); + } +} diff --git a/src/main/java/net/nevet5gi/buzzbot/commands/TestCmd.java b/src/main/java/net/nevet5gi/buzzbot/commands/TestCmd.java index 58a002e..190134f 100644 --- a/src/main/java/net/nevet5gi/buzzbot/commands/TestCmd.java +++ b/src/main/java/net/nevet5gi/buzzbot/commands/TestCmd.java @@ -18,22 +18,23 @@ public class TestCmd implements ICommand, ISlashCommand { long number = ctx.getSlashEvent().getOption("number").getAsLong(); IMentionable member = ctx.getSlashEvent().getOption("mention").getAsMentionable(); boolean testBoolean = ctx.getSlashEvent().getOption("boolean").getAsBoolean(); + String commandString = ctx.getSlashEvent().getCommandString(); - String content = "number: " + number + ", mention: " + member.getAsMention() + ", boolean: " + testBoolean; + String content = "number: " + number + ", mention: " + member.getAsMention() + ", boolean: " + testBoolean + ", command string: " + commandString; - ctx.getSlashEvent().getHook().sendMessage(content).queue(); + ctx.getHook().sendMessage(content).queue(); } @Override public String getDescription() { - return "Checks the piung between bot and API"; + return "Checks the ping between bot and API"; } @Override public CommandData getCommandData() { return new CommandData(this.getName(), this.getDescription()) .addOption(OptionType.INTEGER, "number", "test number", true) - .addOption(OptionType.MENTIONABLE, "mention", "mentioned member or role", true) + .addOption(OptionType.USER, "mention", "mentioned member or role", true) .addOption(OptionType.BOOLEAN, "boolean", "test boolean", true); } diff --git a/src/main/java/net/nevet5gi/buzzbot/commands/UnbanCmd.java b/src/main/java/net/nevet5gi/buzzbot/commands/UnbanCmd.java index 0749a9e..dd0ac4c 100644 --- a/src/main/java/net/nevet5gi/buzzbot/commands/UnbanCmd.java +++ b/src/main/java/net/nevet5gi/buzzbot/commands/UnbanCmd.java @@ -2,6 +2,10 @@ package net.nevet5gi.buzzbot.commands; import net.nevet5gi.buzzbot.commands.utils.CommandContext; import net.nevet5gi.buzzbot.commands.utils.ICommand; +import net.nevet5gi.buzzbot.database.SqlDB; +import net.nevet5gi.buzzbot.util.GuildUtils; + +import java.util.List; public class UnbanCmd implements ICommand { @Override @@ -9,7 +13,20 @@ public class UnbanCmd implements ICommand { // Somehow keep track of bans // Make sure a user can only be unbanned from the guild they were banned from - ctx.getMessage().reply("This command doesn't work yet").queue(); + List args = ctx.getArgs(); + + long userId; + if (args.get(0).contains("<@")) { + userId = Long.parseLong(args.get(0).replace("<","").replace("@","").replace("&","").replace(">","")); + } else { + userId = Long.parseLong(args.get(0)); + } + + SqlDB sql = new SqlDB(); + sql.queryBan(userId, GuildUtils.getTable(ctx.getGuild())); + sql.close(); + + ctx.getGuild().getIdLong(); } @Override diff --git a/src/main/java/net/nevet5gi/buzzbot/commands/WarnCmd.java b/src/main/java/net/nevet5gi/buzzbot/commands/WarnCmd.java index 5296e22..1362817 100644 --- a/src/main/java/net/nevet5gi/buzzbot/commands/WarnCmd.java +++ b/src/main/java/net/nevet5gi/buzzbot/commands/WarnCmd.java @@ -1,19 +1,51 @@ package net.nevet5gi.buzzbot.commands; -import net.dv8tion.jda.api.interactions.commands.build.CommandData; +import net.nevet5gi.buzzbot.Bot; import net.nevet5gi.buzzbot.commands.utils.CommandContext; import net.nevet5gi.buzzbot.commands.utils.ICommand; -import net.nevet5gi.buzzbot.commands.utils.ISlashCommand; +import net.nevet5gi.buzzbot.database.SqlDB; +import net.nevet5gi.buzzbot.objects.WarnData; -public class WarnCmd implements ICommand, ISlashCommand { +import java.util.List; + +public class WarnCmd implements ICommand { @Override public void handle(CommandContext ctx) { - ctx.getMessage().reply("This command has not been implemented yet").queue(); - } + List args = ctx.getArgs(); - @Override - public void handleSlash(CommandContext ctx) { - ctx.getSlashEvent().getHook().sendMessage("This command has not been implemented yet").queue(); + if (args.size() < 2) { + ctx.getChannel().sendMessage("Not enough arguments, please try again").queue(); + return; + } + + WarnData warn = new WarnData(); + + if (args.get(0).contains("<@")) { + warn.setUserId(Long.parseLong(args.get(0).replace("<","").replace("@","").replace("&","").replace(">",""))); + } else { + warn.setUserId(Long.parseLong(args.get(0))); + } + + StringBuilder sb = new StringBuilder(); + if (args.size() >= 1) { + for (int i = 1; i < args.size(); i++) { + sb.append(args.get(i)); + sb.append(" "); + } + } + warn.setReason(sb.toString().trim()); + + ctx.getChannel().sendMessage("<@" + ctx.getMessage().getAuthor().getId() + "> warned <@" + warn.getUserId() + "> for reason: " + warn.getReason()).queue(); + + Bot.jda.retrieveUserById(warn.getUserId()).queue(user -> { warn.setUserName(user.getName()); }); + warn.setModId(ctx.getMessage().getAuthor().getIdLong()); + warn.setModName(ctx.getMessage().getAuthor().getName()); + warn.setServerId(ctx.getGuild().getIdLong()); + warn.setServerName(ctx.getGuild().getName()); + + SqlDB sql = new SqlDB(); + sql.insertWarn(warn, "master_warn_record"); + sql.close(); } @Override @@ -26,16 +58,6 @@ public class WarnCmd implements ICommand, ISlashCommand { return 2; } - @Override - public String getDescription() { - return "Warns specified user"; - } - - @Override - public CommandData getCommandData() { - return new CommandData(this.getName(), this.getDescription()); - } - @Override public String getHelp() { return "Warns the specified user"; diff --git a/src/main/java/net/nevet5gi/buzzbot/commands/utils/CommandContext.java b/src/main/java/net/nevet5gi/buzzbot/commands/utils/CommandContext.java index 39d0799..138abe7 100644 --- a/src/main/java/net/nevet5gi/buzzbot/commands/utils/CommandContext.java +++ b/src/main/java/net/nevet5gi/buzzbot/commands/utils/CommandContext.java @@ -25,6 +25,7 @@ public class CommandContext implements ICommandContext { return this.event; } + @Override public SlashCommandEvent getSlashEvent() { return this.slashEvent; } diff --git a/src/main/java/net/nevet5gi/buzzbot/commands/utils/CommandManager.java b/src/main/java/net/nevet5gi/buzzbot/commands/utils/CommandManager.java index 63d4373..56a1466 100644 --- a/src/main/java/net/nevet5gi/buzzbot/commands/utils/CommandManager.java +++ b/src/main/java/net/nevet5gi/buzzbot/commands/utils/CommandManager.java @@ -1,5 +1,6 @@ package net.nevet5gi.buzzbot.commands.utils; +import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Role; import net.dv8tion.jda.api.events.interaction.SlashCommandEvent; @@ -8,6 +9,8 @@ import net.dv8tion.jda.api.interactions.commands.build.CommandData; import net.nevet5gi.buzzbot.Bot; import net.nevet5gi.buzzbot.Config; import net.nevet5gi.buzzbot.commands.*; +import net.nevet5gi.buzzbot.database.SqlDB; +import net.nevet5gi.buzzbot.objects.GuildData; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,6 +32,7 @@ public class CommandManager { addCommand(new HelpCmd(this)); addCommand(new MuteCmd()); addCommand(new PingCmd()); + addCommand(new SetRoleCmd()); addCommand(new TestCmd()); addCommand(new UnbanCmd()); addCommand(new UnmuteCmd()); @@ -66,6 +70,10 @@ public class CommandManager { return commands; } + public List getSlashCommands() { + return slashList; + } + @Nullable public ICommand getCommand(String search) { String searchLower = search.toLowerCase(); @@ -79,10 +87,8 @@ public class CommandManager { return null; } - public boolean hasPermission(Member member, ICmdGeneric cmd) { - //TODO Make this get roles from db + public boolean hasPermission(Member member, ICmdGeneric cmd, GuildData guild) { List roles = member.getRoles(); - int permLevel = 0; for (Role role : roles) { @@ -99,6 +105,12 @@ public class CommandManager { case "owner": if (permLevel < 4) permLevel = 4; } + + if (role.getIdLong() == guild.getHelperId() && permLevel < 1) permLevel = 1; + if (role.getIdLong() == guild.getModeratorId() && permLevel < 2) permLevel = 2; + if (role.getIdLong() == guild.getAdministratorId() && permLevel < 3) permLevel = 3; + if (role.getIdLong() == guild.getOwnerId() && permLevel < 4) permLevel = 4; + if (member.isOwner() && permLevel < 4) permLevel = 4; } return permLevel >= cmd.getPermissionLevel(); @@ -125,7 +137,11 @@ public class CommandManager { String invoke = split[0].toLowerCase(); ICommand cmd = getCommand(invoke); - if (!hasPermission(event.getMember(), cmd)) { + SqlDB sql = new SqlDB(); + GuildData guild = sql.getGuildData(event.getGuild().getIdLong()); + sql.close(); + + if (!hasPermission(event.getMember(), cmd, guild)) { event.getMessage().reply("You do not have permission to use this command.").queue(); return; } @@ -144,13 +160,18 @@ public class CommandManager { String invoke = event.getName(); ISlashCommand cmd = getSlashCommand(invoke); - if (!hasPermission(event.getMember(), cmd)) { - event.getHook().sendMessage("You do not have permission to use this command.").queue(); - return; - } - if (cmd != null) { event.deferReply().queue(); + + SqlDB sql = new SqlDB(); + GuildData guild = sql.getGuildData(event.getGuild().getIdLong()); + sql.close(); + + if (!hasPermission(event.getMember(), cmd, guild)) { + event.getHook().sendMessage("You do not have permission to use this command.").queue(); + return; + } + List args = new ArrayList<>(); CommandContext ctx = new CommandContext(event, args); diff --git a/src/main/java/net/nevet5gi/buzzbot/commands/utils/ICommandContext.java b/src/main/java/net/nevet5gi/buzzbot/commands/utils/ICommandContext.java index d5dbb75..d67f3d1 100644 --- a/src/main/java/net/nevet5gi/buzzbot/commands/utils/ICommandContext.java +++ b/src/main/java/net/nevet5gi/buzzbot/commands/utils/ICommandContext.java @@ -2,7 +2,9 @@ package net.nevet5gi.buzzbot.commands.utils; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.entities.*; +import net.dv8tion.jda.api.events.interaction.SlashCommandEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; +import net.dv8tion.jda.api.interactions.InteractionHook; import net.dv8tion.jda.api.sharding.ShardManager; public interface ICommandContext { @@ -13,7 +15,12 @@ public interface ICommandContext { * @return the {@link net.dv8tion.jda.api.entities.Guild} for this command/event */ default Guild getGuild() { - return this.getEvent().getGuild(); + if (this.getEvent() == null) { + return this.getSlashEvent().getGuild(); + } else if (this.getSlashEvent() == null) { + return this.getEvent().getGuild(); + } + return null; } /** @@ -23,13 +30,25 @@ public interface ICommandContext { */ GuildMessageReceivedEvent getEvent(); + /** + * Returns the {@link net.dv8tion.jda.api.events.interaction.SlashCommandEvent interaction event} that was received for this instance + * + * @returns the {@link net.dv8tion.jda.api.events.interaction.SlashCommandEvent interaction event} that was received for this instance + */ + SlashCommandEvent getSlashEvent(); + /** * Returns the {@link net.dv8tion.jda.api.entities.TextChannel channel} that the message for this event was send in * * @return the {@link net.dv8tion.jda.api.entities.TextChannel channel} that the message for this event was send in */ default TextChannel getChannel() { - return this.getEvent().getChannel(); + if (this.getEvent() == null) { + return this.getSlashEvent().getTextChannel(); + } else if (this.getSlashEvent() == null) { + return this.getEvent().getChannel(); + } + return null; } /** @@ -38,7 +57,19 @@ public interface ICommandContext { * @return the {@link net.dv8tion.jda.api.entities.Message message} that triggered this event */ default Message getMessage() { - return this.getEvent().getMessage(); + if (this.getEvent() == null) { + return null; + } else if (this.getSlashEvent() == null) { + return this.getEvent().getMessage(); + } + return null; + } + + default String getCommandString() { + if (this.getEvent() == null) { + return this.getSlashEvent().getCommandString(); + } + return null; } /** @@ -47,7 +78,12 @@ public interface ICommandContext { * @return the {@link net.dv8tion.jda.api.entities.User author} of the message as user */ default User getAuthor() { - return this.getEvent().getAuthor(); + if (this.getEvent() == null) { + return this.getSlashEvent().getUser(); + } else if (this.getSlashEvent() == null) { + return this.getEvent().getAuthor(); + } + return null; } /** * Returns the {@link net.dv8tion.jda.api.entities.Member author} of the message as member @@ -55,7 +91,21 @@ public interface ICommandContext { * @return the {@link net.dv8tion.jda.api.entities.Member author} of the message as member */ default Member getMember() { - return this.getEvent().getMember(); + if (this.getEvent() == null) { + return this.getSlashEvent().getMember(); + } else if (this.getSlashEvent() == null) { + return this.getEvent().getMember(); + } + return null; + } + + /** + * Returns the {@link net.dv8tion.jda.api.interactions.InteractionHook interaction hook} of the slash command + * + * @return the {@link net.dv8tion.jda.api.interactions.InteractionHook interaction hook} of the slash command + */ + default InteractionHook getHook() { + return this.getSlashEvent().getHook(); } /** @@ -64,7 +114,12 @@ public interface ICommandContext { * @return the current {@link net.dv8tion.jda.api.JDA jda} instance */ default JDA getJDA() { - return this.getEvent().getJDA(); + if (this.getEvent() == null) { + return this.getSlashEvent().getJDA(); + } else if (this.getSlashEvent() == null) { + return this.getEvent().getJDA(); + } + return null; } /** diff --git a/src/main/java/net/nevet5gi/buzzbot/database/SqlDB.java b/src/main/java/net/nevet5gi/buzzbot/database/SqlDB.java index 3cf4c21..9ec9230 100644 --- a/src/main/java/net/nevet5gi/buzzbot/database/SqlDB.java +++ b/src/main/java/net/nevet5gi/buzzbot/database/SqlDB.java @@ -1,12 +1,10 @@ package net.nevet5gi.buzzbot.database; import net.nevet5gi.buzzbot.Config; -import net.nevet5gi.buzzbot.objects.BanData; -import net.nevet5gi.buzzbot.objects.GuildData; -import net.nevet5gi.buzzbot.objects.MuteData; -import net.nevet5gi.buzzbot.objects.WarnData; +import net.nevet5gi.buzzbot.objects.*; import java.sql.*; +import java.util.ArrayList; public class SqlDB { private Connection connect; @@ -25,12 +23,13 @@ public class SqlDB { public void insertBan(BanData ban, String table) { try { - statement.executeUpdate("INSERT INTO " + table + " VALUES (default, " + ban.getUserId() + ", '" + ban.getUserName() + "', '" + ban.getDate() + "', '" + ban.getTime() + "', " + ban.getBanType() + ", " + ban.getBanLength() + ", '" + ban.getBanReason() + "', '" + ban.getModName() + "', " + ban.getModId() + ", '" + ban.getServerName() + "', " + ban.getServerId() + ", 1)"); + statement.executeUpdate("INSERT INTO master_ban_record VALUES (default, " + ban.getUserId() + ", '" + ban.getUserName() + "', '" + ban.getDate() + "', '" + ban.getTime() + "', " + ban.getBanType() + ", " + ban.getBanLength() + ", '" + ban.getReason() + "', '" + ban.getModName() + "', " + ban.getModId() + ", '" + ban.getServerName() + "', " + ban.getServerId() + ", 1)"); + if (!table.equalsIgnoreCase("master_ban_record")) { + statement.executeUpdate("INSERT INTO " + table + " VALUES (default, " + ban.getUserId() + ", '" + ban.getUserName() + "', '" + ban.getDate() + "', '" + ban.getTime() + "', " + ban.getBanType() + ", " + ban.getBanLength() + ", '" + ban.getReason() + "', '" + ban.getModName() + "', " + ban.getModId() + ", '" + ban.getServerName() + "', " + ban.getServerId() + ", 1)"); + } } catch (SQLException e) { e.printStackTrace(); } - - close(); } public void insertUnban(long userId, String table) { @@ -39,22 +38,24 @@ public class SqlDB { public void insertMute(MuteData mute, String table) { try { - statement.executeUpdate("INSERT INTO " + table + " VALUES (default, " + mute.getUserId() + ", '" + mute.getUserName() + "', '" + mute.getDate() + "', '" + mute.getTime() + "', " + mute.getMuteLength() + ", '" + mute.getMuteReason() + "', '" + mute.getModName() + "', " + mute.getModId() + ", '" + mute.getServerName() + "', " + mute.getServerId() + ")"); + statement.executeUpdate("INSERT INTO master_mute_record VALUES (default, " + mute.getUserId() + ", '" + mute.getUserName() + "', '" + mute.getDate() + "', '" + mute.getTime() + "', " + mute.getMuteLength() + ", '" + mute.getReason() + "', '" + mute.getModName() + "', " + mute.getModId() + ", '" + mute.getServerName() + "', " + mute.getServerId() + ")"); + if (!table.equalsIgnoreCase("master_mute_record")) { + statement.executeUpdate("INSERT INTO " + table + " VALUES (default, " + mute.getUserId() + ", '" + mute.getUserName() + "', '" + mute.getDate() + "', '" + mute.getTime() + "', " + mute.getMuteLength() + ", '" + mute.getReason() + "', '" + mute.getModName() + "', " + mute.getModId() + ", '" + mute.getServerName() + "', " + mute.getServerId() + ")"); + } } catch (SQLException e) { e.printStackTrace(); } - - close(); } public void insertWarn(WarnData warn, String table) { try { - statement.executeUpdate("INSERT INTO " + table + " VALUES (default, " + warn.getUserId() + ", '" + warn.getUserName() + "', '" + warn.getDate() + "', '" + warn.getTime() + "', " + warn.getBanType() + ", " + warn.getBanLength() + ", '" + warn.getBanReason() + "', '" + warn.getModName() + "', " + warn.getModId() + ", '" + warn.getServerName() + "', " + warn.getServerId() + ")"); + statement.executeUpdate("INSERT INTO master_warn_record VALUES (default, " + warn.getUserId() + ", '" + warn.getUserName() + "', '" + warn.getDate() + "', '" + warn.getTime() + "', '" + warn.getReason() + "', '" + warn.getModName() + "', " + warn.getModId() + ", '" + warn.getServerName() + "', " + warn.getServerId() + ")"); + if (!table.equalsIgnoreCase("master_warn_record")){ + statement.executeUpdate("INSERT INTO " + table + " VALUES (default, " + warn.getUserId() + ", '" + warn.getUserName() + "', '" + warn.getDate() + "', '" + warn.getTime() + "', '" + warn.getReason() + "', '" + warn.getModName() + "', " + warn.getModId() + ", '" + warn.getServerName() + "', " + warn.getServerId() + ")"); + } } catch (SQLException e) { e.printStackTrace(); } - - close(); } public BanData queryBan(long userId, String table) { @@ -68,9 +69,9 @@ public class SqlDB { ban.setUserName(resultSet.getString("user_name")); ban.setDate(resultSet.getDate("ban_date")); ban.setTime(resultSet.getTime("ban_time")); + ban.setReason(resultSet.getString("ban_reason")); ban.setBanType(resultSet.getBoolean("ban_type")); ban.setBanLength(resultSet.getInt("ban_length")); - ban.setBanReason(resultSet.getString("ban_reason")); ban.setModName(resultSet.getString("mod_name")); ban.setModId(resultSet.getLong("mod_id")); ban.setServerName(resultSet.getString("server_name")); @@ -80,8 +81,6 @@ public class SqlDB { e.printStackTrace(); return null; } - - close(); return ban; } @@ -99,8 +98,6 @@ public class SqlDB { } catch (SQLException e) { throw new RuntimeException(e); } - - close(); return mute; } @@ -117,19 +114,15 @@ public class SqlDB { } catch (SQLException e) { e.printStackTrace(); } - - close(); return warn; } public void addGuild(GuildData guild) { try { - statement.executeUpdate("INSERT INTO guild_settings VALUES ('" + guild.getName() + "', " + guild.getId() + ", '" + guild.getGroup() + "', " + guild.getProfanityLevel() + ")"); + statement.executeUpdate("INSERT INTO guild_settings VALUES ('" + guild.getName() + "', " + guild.getId() + ", '" + guild.getGroup() + "', " + guild.getProfanityLevel() + ", 0, 0, 0, 0)"); } catch (SQLException e) { e.printStackTrace(); } - - close(); } public GuildData getGuildData(long guildId) { @@ -143,16 +136,47 @@ public class SqlDB { guild.setId(resultSet.getLong("guild_id")); guild.setGroup(resultSet.getString("guild_group")); guild.setProfanityLevel(resultSet.getInt("profanity_level")); + guild.setHelperId(resultSet.getLong("helper_id")); + guild.setModeratorId(resultSet.getLong("moderator_id")); + guild.setAdministratorId(resultSet.getLong("administrator_id")); + guild.setOwnerId(resultSet.getLong("owner_id")); } } catch (SQLException e) { e.printStackTrace(); } - - close(); return guild; } - private void close() { + public void updateGuildRole(long guildId, String role, long roleId) { + String sql = "UPDATE guild_settings SET " + role + " = " + roleId + " WHERE guild_id = " + guildId; + try { + statement.executeUpdate(sql); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + public void addGroup(Group group) { + //TODO Make this function + } + + public ArrayList getGroups() { + String sql = ""; + ArrayList groups = new ArrayList<>(); + + try { + resultSet = statement.executeQuery(sql); + + while (resultSet.next()) { + + } + } catch (SQLException e) { + e.printStackTrace(); + } + return groups; + } + + public void close() { try { if (resultSet != null) { resultSet.close(); diff --git a/src/main/java/net/nevet5gi/buzzbot/functions/ProfanityFilter.java b/src/main/java/net/nevet5gi/buzzbot/functions/ProfanityFilter.java index b298cdf..808d309 100644 --- a/src/main/java/net/nevet5gi/buzzbot/functions/ProfanityFilter.java +++ b/src/main/java/net/nevet5gi/buzzbot/functions/ProfanityFilter.java @@ -25,12 +25,12 @@ public class ProfanityFilter { public void handle(GuildMessageReceivedEvent event) { event.getMessage().delete().queue(); - event.getChannel().sendMessage("No swearing please :)").queue(); + event.getChannel().sendMessage("Hey <@" + event.getAuthor().getId() + ">, no swearing!").queue(); } public void handleEdit(GuildMessageUpdateEvent event) { event.getMessage().delete().queue(); - event.getChannel().sendMessage("Nice try ;)").queue(); + event.getChannel().sendMessage("Hey <@" + event.getAuthor().getId() + ">, no swearing!").queue(); } public void buildDictionaries() { diff --git a/src/main/java/net/nevet5gi/buzzbot/modules/BuzzyModule.java b/src/main/java/net/nevet5gi/buzzbot/modules/BuzzyModule.java new file mode 100644 index 0000000..043ffdb --- /dev/null +++ b/src/main/java/net/nevet5gi/buzzbot/modules/BuzzyModule.java @@ -0,0 +1,12 @@ +package net.nevet5gi.buzzbot.modules; + +import net.dv8tion.jda.api.JDA; + +public interface BuzzyModule { + + default void onPreEnable() {} + + void onEnable(JDA jda); + + void onDisable(); +} diff --git a/src/main/java/net/nevet5gi/buzzbot/modules/ModuleLoader.java b/src/main/java/net/nevet5gi/buzzbot/modules/ModuleLoader.java new file mode 100644 index 0000000..c5cd0a7 --- /dev/null +++ b/src/main/java/net/nevet5gi/buzzbot/modules/ModuleLoader.java @@ -0,0 +1,71 @@ +package net.nevet5gi.buzzbot.modules; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +import java.lang.reflect.InvocationTargetException; +import java.net.URL; +import java.net.URLClassLoader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.jar.Attributes; +import java.util.jar.JarInputStream; +import java.util.jar.Manifest; + +public class ModuleLoader { + private static final Logger LOGGER = LoggerFactory.getLogger(ModuleLoader.class); + + public static ArrayList getModules() { + File modulesPath = new File("./modules/"); + if (!modulesPath.exists()) { + modulesPath.mkdirs(); + } + + ArrayList modules = new ArrayList<>(); + try { + Files.walk(Paths.get("./modules/")) + .filter(Files::isRegularFile) + .forEach(modules::add); + + for (Path path : modules) { + System.out.println("Module path: " + path.toString()); + } + } catch (IOException e) { + System.out.println("Unable to get module list"); + e.printStackTrace(); + } + + return modules; + } + + public static ArrayList loadModules() throws IOException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { + ArrayList modulePaths = getModules(); + + ArrayList modules = new ArrayList<>(); + for (Path module : modulePaths) { + JarInputStream jarStream = new JarInputStream(new FileInputStream(String.valueOf(module))); + Manifest mf = jarStream.getManifest(); + Attributes attributes = mf.getMainAttributes(); + String mainClassString = attributes.getValue("Main-Class"); + if (mainClassString == null) { + LOGGER.error("Unable to get Main Class from module " + module.toString()); + } + String[] packages = mainClassString.split("\\."); + String className = packages[packages.length - 1]; + + File file = module.toFile(); + URL[] urls = {file.toURI().toURL()}; + + URLClassLoader urlClassLoader = URLClassLoader.newInstance(urls); + + Class mainClass = (Class) Class.forName(className, true, urlClassLoader); + BuzzyModule newModule = mainClass.getDeclaredConstructor().newInstance(); + newModule.onPreEnable(); + modules.add(newModule); + } + return modules; + } +} \ No newline at end of file diff --git a/src/main/java/net/nevet5gi/buzzbot/objects/BanData.java b/src/main/java/net/nevet5gi/buzzbot/objects/BanData.java index 4d2cc81..bf66b1e 100644 --- a/src/main/java/net/nevet5gi/buzzbot/objects/BanData.java +++ b/src/main/java/net/nevet5gi/buzzbot/objects/BanData.java @@ -3,18 +3,15 @@ package net.nevet5gi.buzzbot.objects; import java.sql.Date; import java.sql.Time; -public class BanData extends UserData { +public class BanData extends DisciplineData { private boolean banType; private int banLength; - private String banReason; - public BanData() {} - public BanData(long userId, String userName, Date date, Time time, boolean banType, int banLength, String banReason, String modName, long modId, String serverName, long serverId) { - super(userId, userName, date, time, modName, modId, serverName, serverId); + public BanData(long userId, String userName, Date date, Time time, String reason, boolean banType, int banLength, String modName, long modId, String serverName, long serverId) { + super(userId, userName, date, time, reason, modName, modId, serverName, serverId); this.banType = banType; this.banLength = banLength; - this.banReason = banReason; } public void setBanType(boolean banType) { @@ -32,12 +29,4 @@ public class BanData extends UserData { public int getBanLength() { return banLength; } - - public void setBanReason(String banReason) { - this.banReason = banReason; - } - - public String getBanReason() { - return banReason; - } } diff --git a/src/main/java/net/nevet5gi/buzzbot/objects/UserData.java b/src/main/java/net/nevet5gi/buzzbot/objects/DisciplineData.java similarity index 81% rename from src/main/java/net/nevet5gi/buzzbot/objects/UserData.java rename to src/main/java/net/nevet5gi/buzzbot/objects/DisciplineData.java index 24b9cb9..02565e6 100644 --- a/src/main/java/net/nevet5gi/buzzbot/objects/UserData.java +++ b/src/main/java/net/nevet5gi/buzzbot/objects/DisciplineData.java @@ -5,23 +5,25 @@ import java.sql.Time; import java.time.LocalDate; import java.time.LocalTime; -public class UserData { +public class DisciplineData { private long userId; private String userName; private Date date = Date.valueOf(LocalDate.now()); private Time time = Time.valueOf(LocalTime.now()); + private String reason; private String modName; private long modId; private String serverName; private long serverId; - public UserData() {} + public DisciplineData() {} - public UserData(long userId, String userName, Date date, Time time, String modName, long modId, String serverName, long serverId) { + public DisciplineData(long userId, String userName, Date date, Time time, String reason, String modName, long modId, String serverName, long serverId) { this.setUserId(userId); this.setUserName(userName); this.setDate(date); this.setTime(time); + this.setReason(reason); this.setModName(modName); this.setModId(modId); this.setServerName(serverName); @@ -60,6 +62,14 @@ public class UserData { return time; } + public void setReason(String reason) { + this.reason = reason; + } + + public String getReason() { + return reason; + } + public void setModName(String modName) { this.modName = modName; } diff --git a/src/main/java/net/nevet5gi/buzzbot/objects/Group.java b/src/main/java/net/nevet5gi/buzzbot/objects/Group.java new file mode 100644 index 0000000..5ff6b3c --- /dev/null +++ b/src/main/java/net/nevet5gi/buzzbot/objects/Group.java @@ -0,0 +1,37 @@ +package net.nevet5gi.buzzbot.objects; + +import java.util.List; + +public class Group { + private String name; + private String tablePrefix; + private List members; + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setTablePrefix(String tablePrefix) { + this.tablePrefix = tablePrefix; + } + + public String getTablePrefix() { + return tablePrefix; + } + + public void setMembers(List members) { + this.members = members; + } + + public void addMember(String member) { + this.members.add(member); + } + + public List getMembers() { + return members; + } +} diff --git a/src/main/java/net/nevet5gi/buzzbot/objects/GuildData.java b/src/main/java/net/nevet5gi/buzzbot/objects/GuildData.java index cf80943..33d37f0 100644 --- a/src/main/java/net/nevet5gi/buzzbot/objects/GuildData.java +++ b/src/main/java/net/nevet5gi/buzzbot/objects/GuildData.java @@ -5,6 +5,10 @@ public class GuildData { private long id; private String group; private int profanityLevel; + private long helperId; + private long moderatorId; + private long administratorId; + private long ownerId; public void setName(String name) { this.name = name; @@ -37,4 +41,36 @@ public class GuildData { public int getProfanityLevel() { return profanityLevel; } + + public void setHelperId(long helperId) { + this.helperId = helperId; + } + + public long getHelperId() { + return helperId; + } + + public void setModeratorId(long moderatorId) { + this.moderatorId = moderatorId; + } + + public long getModeratorId() { + return moderatorId; + } + + public void setAdministratorId(long administratorId) { + this.administratorId = administratorId; + } + + public long getAdministratorId() { + return administratorId; + } + + public void setOwnerId(long ownerId) { + this.ownerId = ownerId; + } + + public long getOwnerId() { + return ownerId; + } } diff --git a/src/main/java/net/nevet5gi/buzzbot/objects/ModRoles.java b/src/main/java/net/nevet5gi/buzzbot/objects/ModRoles.java new file mode 100644 index 0000000..e96e905 --- /dev/null +++ b/src/main/java/net/nevet5gi/buzzbot/objects/ModRoles.java @@ -0,0 +1,17 @@ +package net.nevet5gi.buzzbot.objects; + +public enum ModRoles { + HELPER("helper_id"), + MODERATOR("moderator_id"), + ADMINISTRATOR("administrator_id"), + OWNER("owner_id"); + + private final String role; + + ModRoles(String role) { + this.role = role; + } + public String getRole() { + return this.role; + } +} diff --git a/src/main/java/net/nevet5gi/buzzbot/objects/MuteData.java b/src/main/java/net/nevet5gi/buzzbot/objects/MuteData.java index 59e0d8e..9c1b684 100644 --- a/src/main/java/net/nevet5gi/buzzbot/objects/MuteData.java +++ b/src/main/java/net/nevet5gi/buzzbot/objects/MuteData.java @@ -3,16 +3,14 @@ package net.nevet5gi.buzzbot.objects; import java.sql.Date; import java.sql.Time; -public class MuteData extends UserData { +public class MuteData extends DisciplineData { private int muteLength; - private String muteReason; public MuteData() {} - public MuteData(long userId, String userName, Date date, Time time, int muteLength, String muteReason, String modName, long modId, String serverName, long serverId) { - super(userId, userName, date, time, modName, modId, serverName, serverId); + public MuteData(long userId, String userName, Date date, Time time, String reason, int muteLength, String modName, long modId, String serverName, long serverId) { + super(userId, userName, date, time, reason, modName, modId, serverName, serverId); this.muteLength = muteLength; - this.muteReason = muteReason; } public void setMuteLength(int muteLength) { @@ -22,12 +20,4 @@ public class MuteData extends UserData { public int getMuteLength() { return muteLength; } - - public void setMuteReason(String muteReason) { - this.muteReason = muteReason; - } - - public String getMuteReason() { - return muteReason; - } } diff --git a/src/main/java/net/nevet5gi/buzzbot/objects/WarnData.java b/src/main/java/net/nevet5gi/buzzbot/objects/WarnData.java index be01603..be865c6 100644 --- a/src/main/java/net/nevet5gi/buzzbot/objects/WarnData.java +++ b/src/main/java/net/nevet5gi/buzzbot/objects/WarnData.java @@ -3,41 +3,11 @@ package net.nevet5gi.buzzbot.objects; import java.sql.Date; import java.sql.Time; -public class WarnData extends UserData { - private boolean banType; - private int banLength; - private String banReason; +public class WarnData extends DisciplineData { public WarnData() {} - public WarnData(long userId, String userName, Date date, Time time, boolean banType, int banLength, String banReason, String modName, long modId, String serverName, long serverId) { - super(userId, userName, date, time, modName, modId, serverName, serverId); - this.banType = banType; - this.banLength = banLength; - this.banReason = banReason; - } - - public void setBanType(boolean banType) { - this.banType = banType; - } - - public boolean getBanType() { - return banType; - } - - public void setBanLength(int banLength) { - this.banLength = banLength; - } - - public int getBanLength() { - return banLength; - } - - public void setBanReason(String banReason) { - this.banReason = banReason; - } - - public String getBanReason() { - return banReason; + public WarnData(long userId, String userName, Date date, Time time, String reason, String modName, long modId, String serverName, long serverId) { + super(userId, userName, date, time, reason, modName, modId, serverName, serverId); } } diff --git a/src/main/java/net/nevet5gi/buzzbot/util/GuildUtils.java b/src/main/java/net/nevet5gi/buzzbot/util/GuildUtils.java new file mode 100644 index 0000000..554b52b --- /dev/null +++ b/src/main/java/net/nevet5gi/buzzbot/util/GuildUtils.java @@ -0,0 +1,19 @@ +package net.nevet5gi.buzzbot.util; + +import net.dv8tion.jda.api.entities.Guild; +import net.nevet5gi.buzzbot.database.SqlDB; + +public class GuildUtils { + + public static void loadGroups() { + SqlDB sql = new SqlDB(); + + sql.close(); + } + + public static String getTable(Guild guild) { + guild.getIdLong(); + return null; + } + +} \ No newline at end of file diff --git a/src/main/java/net/nevet5gi/buzzbot/util/JsonUtils.java b/src/main/java/net/nevet5gi/buzzbot/util/JsonUtils.java index e97ad3c..0b83f2c 100644 --- a/src/main/java/net/nevet5gi/buzzbot/util/JsonUtils.java +++ b/src/main/java/net/nevet5gi/buzzbot/util/JsonUtils.java @@ -1,14 +1,12 @@ package net.nevet5gi.buzzbot.util; import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import net.nevet5gi.buzzbot.objects.UserData; +import net.nevet5gi.buzzbot.objects.DisciplineData; import java.io.*; import java.lang.reflect.Type; -import java.util.ArrayList; -public class JsonUtils { +public class JsonUtils { T object; // public void createJson(T object) {