diff --git a/build.gradle b/build.gradle index bd78fb0..771a601 100644 --- a/build.gradle +++ b/build.gradle @@ -38,4 +38,4 @@ compileJava.options.encoding = 'UTF-8' compileJava.options.fork = true // Change this if you are getting errors building -compileJava.options.forkOptions.executable = 'C:\\Program Files\\Java\\jdk1.8.0_131\\bin\\javac.exe' \ No newline at end of file +compileJava.options.forkOptions.executable = 'C:\\Program Files\\Java\\jdk1.8.0_144\\bin\\javac.exe' \ No newline at end of file diff --git a/src/main/java/me/savvy/rixa/Rixa.java b/src/main/java/me/savvy/rixa/Rixa.java index a8a4ef1..d5f7156 100644 --- a/src/main/java/me/savvy/rixa/Rixa.java +++ b/src/main/java/me/savvy/rixa/Rixa.java @@ -19,6 +19,7 @@ import me.savvy.rixa.commands.mod.DeleteMessagesCommand; import me.savvy.rixa.commands.mod.MuteCommand; import me.savvy.rixa.commands.mod.PurgeMessagesCommand; import me.savvy.rixa.commands.mod.RaidModeCommand; +import me.savvy.rixa.commands.owner.OwnerCommand; import me.savvy.rixa.data.database.sql.other.DatabaseTables; import me.savvy.rixa.data.filemanager.ConfigManager; import me.savvy.rixa.data.filemanager.LanguageManager; @@ -27,6 +28,7 @@ import me.savvy.rixa.events.MemberEvent; import me.savvy.rixa.events.MessageEvent; import me.savvy.rixa.events.Shutdown; import me.savvy.rixa.events.VoiceChannel; +import me.savvy.rixa.guild.RixaGuild; import me.savvy.rixa.guild.management.Guilds; import me.savvy.rixa.modules.reactions.handlers.React; import me.savvy.rixa.modules.reactions.handlers.ReactionManager; @@ -75,10 +77,6 @@ public class Rixa { @Setter private ScheduledExecutorService executorService; - private static ChatterBotFactory factory; - private static ChatterBotSession chatBotSession; - private static ChatterBot chatBot; - // String search = event.getMessage().getContent().substring(event.getMessage().getContent().indexOf(" ") + 1); public static void main(String[] args) { instance = new Rixa(); @@ -142,15 +140,8 @@ public class Rixa { new BatchMoveCommand(), new MuteCommand(), new MusicCommand(), new ConfigCommand(), new UrbanDictionaryCommand(), new YoutubeCommand(), new AddRoleCommand(), new RemoveRoleCommand(), new LevelsCommand(), - new LeaderboardCommand(), new RaidModeCommand()); + new LeaderboardCommand(), new RaidModeCommand(), new OwnerCommand()); register(new HelpReaction(), new ConfigReaction(), new LeaderboardReaction()); - try { - factory = new ChatterBotFactory(); - chatBot = factory.create(ChatterBotType.PANDORABOTS, "b0dafd24ee35a477"); - chatBotSession = chatBot.createSession(); - } catch (Exception e) { - e.printStackTrace(); - } } private static void register(CommandExec... commandExecs) { @@ -165,10 +156,6 @@ public class Rixa { } } - public static ChatterBotSession getChatBotSession() { - return chatBotSession; - } - public Logger getLogger() { return Logger.getLogger("Rixa"); } @@ -179,7 +166,7 @@ public class Rixa { public void close() { try { - Guilds.getGuilds().values().parallelStream().forEach((rixaGuild) -> rixaGuild.save()); + Guilds.getGuilds().values().parallelStream().forEach(RixaGuild::save); Thread.sleep(1200); database.close(); Thread.sleep(200); diff --git a/src/main/java/me/savvy/rixa/commands/admin/AddRoleCommand.java b/src/main/java/me/savvy/rixa/commands/admin/AddRoleCommand.java index 0cfc5b4..0ce8040 100644 --- a/src/main/java/me/savvy/rixa/commands/admin/AddRoleCommand.java +++ b/src/main/java/me/savvy/rixa/commands/admin/AddRoleCommand.java @@ -40,9 +40,9 @@ public class AddRoleCommand implements CommandExec { } try { List roles = event.getMessage().getMentionedRoles(); - User user = event.getMessage().getMentionedUsers().get(0); - event.getGuild().getController().addRolesToMember(event.getGuild().getMember(user), roles).queue(); - new MessageBuilder("Successfully given " + user.getAsMention() + " `" + roles.size() + "` role(s)").setColor(event.getMember().getColor()).queue(event.getChannel()); + int users = event.getMessage().getMentionedUsers().size(); + event.getMessage().getMentionedUsers().forEach(user -> event.getGuild().getController().addRolesToMember(event.getGuild().getMember(user), roles).queue()); + new MessageBuilder("Successfully given " + users + " `" + roles.size() + "` role(s)").setColor(event.getMember().getColor()).queue(event.getChannel()); } catch (PermissionException ex) { new MessageBuilder(event.getMember().getAsMention() + ", sorry I do not have permission for this!").setColor(event.getMember().getColor()).queue(event.getChannel()); } diff --git a/src/main/java/me/savvy/rixa/commands/admin/RemoveRoleCommand.java b/src/main/java/me/savvy/rixa/commands/admin/RemoveRoleCommand.java index 354b421..4ed3875 100644 --- a/src/main/java/me/savvy/rixa/commands/admin/RemoveRoleCommand.java +++ b/src/main/java/me/savvy/rixa/commands/admin/RemoveRoleCommand.java @@ -40,9 +40,9 @@ public class RemoveRoleCommand implements CommandExec { } try { List roles = event.getMessage().getMentionedRoles(); - User user = event.getMessage().getMentionedUsers().get(0); - event.getGuild().getController().removeRolesFromMember(event.getGuild().getMember(user), roles).queue(); - new MessageBuilder("Successfully removed `" + roles.size() + "` role(s) from " + user.getAsMention() + "!").setColor(event.getMember().getColor()).queue(event.getChannel()); + int users = event.getMessage().getMentionedUsers().size(); + event.getMessage().getMentionedUsers().forEach(user -> event.getGuild().getController().removeRolesFromMember(event.getGuild().getMember(user), roles).queue()); + new MessageBuilder("Successfully removed `" + roles.size() + "` role(s) from " + users + " user(s)!").setColor(event.getMember().getColor()).queue(event.getChannel()); } catch (PermissionException ex) { new MessageBuilder(event.getMember().getAsMention() + ", sorry I do not have permission for this!").setColor(event.getMember().getColor()).queue(event.getChannel()); } diff --git a/src/main/java/me/savvy/rixa/commands/owner/OwnerCommand.java b/src/main/java/me/savvy/rixa/commands/owner/OwnerCommand.java new file mode 100644 index 0000000..684145c --- /dev/null +++ b/src/main/java/me/savvy/rixa/commands/owner/OwnerCommand.java @@ -0,0 +1,29 @@ +package me.savvy.rixa.commands.owner; + +import me.savvy.rixa.Rixa; +import me.savvy.rixa.commands.handlers.Command; +import me.savvy.rixa.commands.handlers.CommandExec; +import me.savvy.rixa.commands.handlers.CommandType; +import me.savvy.rixa.utils.MessageBuilder; +import net.dv8tion.jda.core.entities.ChannelType; +import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; + +public class OwnerCommand implements CommandExec { + + @Override + @Command(mainCommand = "shutdown", + description = "Shutdown Rixa instance, save all data.", + channelType = ChannelType.TEXT, + showInHelp = false, + type = CommandType.BOT_OWNER) + public void execute(GuildMessageReceivedEvent event) { + if (!Rixa.getConfig().getJsonObject().getJSONArray("botAdmins").toList().contains(event.getMember().getUser().getId())) { + new MessageBuilder(event.getMember().getAsMention() + ", you do not have permission for this command.") + .setColor(event.getMember().getColor()).queue(event.getChannel()); + return; + } + Rixa.getInstance().close(); + Rixa.getInstance().exit(); + + } +} diff --git a/src/main/java/me/savvy/rixa/events/MessageEvent.java b/src/main/java/me/savvy/rixa/events/MessageEvent.java index 03401d2..77e2359 100644 --- a/src/main/java/me/savvy/rixa/events/MessageEvent.java +++ b/src/main/java/me/savvy/rixa/events/MessageEvent.java @@ -6,6 +6,7 @@ import me.savvy.rixa.commands.handlers.CommandHandler; import me.savvy.rixa.commands.handlers.CommandRegistrar; import me.savvy.rixa.guild.RixaGuild; import me.savvy.rixa.guild.management.Guilds; +import me.savvy.rixa.modules.conversations.ConversationModule; import me.savvy.rixa.modules.levels.LevelsModule; import me.savvy.rixa.modules.reactions.handlers.ReactRegistrar; import me.savvy.rixa.modules.reactions.handlers.ReactionManager; @@ -43,13 +44,15 @@ public class MessageEvent { if (event.getGuild() == null) return; if (event.getAuthor().isBot()) return; + RixaGuild rixaGuild = Guilds.getGuild(event.getGuild()); + if (event.getMessage().getContent().startsWith ("@" + event.getGuild().getSelfMember().getEffectiveName())) { try { String s = event.getMessage().getContent().replace ("@" + event.getGuild().getSelfMember().getEffectiveName() + " ", ""); if (s.isEmpty()) return; - s = Rixa.getChatBotSession().think(s); + s = ((ConversationModule) rixaGuild.getModule("Conversations")).getChatBotSession().think(s); if (s.isEmpty()) return; event.getChannel().sendMessage(s).queue(); return; @@ -57,15 +60,12 @@ public class MessageEvent { ex.printStackTrace(); } } - - - RixaGuild rixaGuild = Guilds.getGuild(event.getGuild()); String prefix = rixaGuild .getGuildSettings() .getPrefix(); //checkMessage(event.getMessage()); if (!event.getMessage().getContent().startsWith(prefix)) { - if (!(((LevelsModule) rixaGuild.getModule("Levels")).isEnabled())) { + if (!(rixaGuild.getModule("Levels").isEnabled())) { return; } /*if(!event.getAuthor().getId().equalsIgnoreCase("202944101333729280") && diff --git a/src/main/java/me/savvy/rixa/guild/RixaGuild.java b/src/main/java/me/savvy/rixa/guild/RixaGuild.java index 1db53fb..5d85deb 100644 --- a/src/main/java/me/savvy/rixa/guild/RixaGuild.java +++ b/src/main/java/me/savvy/rixa/guild/RixaGuild.java @@ -11,6 +11,7 @@ import me.savvy.rixa.enums.Result; import me.savvy.rixa.guild.management.GuildSettings; import me.savvy.rixa.guild.management.Guilds; import me.savvy.rixa.modules.RixaModule; +import me.savvy.rixa.modules.conversations.ConversationModule; import me.savvy.rixa.modules.levels.LevelsModule; import me.savvy.rixa.modules.music.MusicModule; import net.dv8tion.jda.core.entities.Guild; @@ -45,8 +46,9 @@ public class RixaGuild { this.guild = guild; this.modules = new HashMap<>(); this.db = Rixa.getDatabase(); - modules.put("Music", new MusicModule()); - modules.put("Levels", new LevelsModule()); + modules.put("Music", new MusicModule(this)); + modules.put("Levels", new LevelsModule(this)); + modules.put("Conversations", new ConversationModule(this)); load(); } diff --git a/src/main/java/me/savvy/rixa/guild/management/GuildSettings.java b/src/main/java/me/savvy/rixa/guild/management/GuildSettings.java index 00c1046..5bd6d3f 100644 --- a/src/main/java/me/savvy/rixa/guild/management/GuildSettings.java +++ b/src/main/java/me/savvy/rixa/guild/management/GuildSettings.java @@ -60,6 +60,7 @@ public class GuildSettings { if (!optional.isPresent()) return; if (!(optional.get() instanceof ResultSet)) return; ResultSet set = (ResultSet) optional.get(); + if (set.next()) { this.prefix = (set.getString("prefix")); this.defaultRole = (set.getString("defaultRole")); this.joinMessage = (set.getString("joinMessage")); @@ -73,14 +74,17 @@ public class GuildSettings { if (!set.getString("farewell").equalsIgnoreCase("default_value")) { quitMessageChannel = guild.getTextChannelById(set.getString("farewell")); } + } query = new Query("SELECT * FROM `core` WHERE `guild_id` = ?"); query.setString(guild.getId()); optional = Rixa.getDatabase().send(query); if (!optional.isPresent()) return; if (!(optional.get() instanceof ResultSet)) return; set = (ResultSet) optional.get(); - this.description = (set.getString("description")); - this.enlisted = (set.getBoolean("enlisted")); + if (set.next()) { + this.description = (set.getString("description")); + this.enlisted = (set.getBoolean("enlisted")); + } this.raidMode = false; } diff --git a/src/main/java/me/savvy/rixa/modules/RixaModule.java b/src/main/java/me/savvy/rixa/modules/RixaModule.java index 1e0074d..f5f5f13 100644 --- a/src/main/java/me/savvy/rixa/modules/RixaModule.java +++ b/src/main/java/me/savvy/rixa/modules/RixaModule.java @@ -1,7 +1,5 @@ package me.savvy.rixa.modules; -import me.savvy.rixa.guild.RixaGuild; - /** * Created by Timber on 5/23/2017. */ @@ -13,7 +11,7 @@ public interface RixaModule { boolean isEnabled(); - void load(RixaGuild guild); + void load(); void save(); } diff --git a/src/main/java/me/savvy/rixa/modules/conversations/ConversationModule.java b/src/main/java/me/savvy/rixa/modules/conversations/ConversationModule.java new file mode 100644 index 0000000..fa897d5 --- /dev/null +++ b/src/main/java/me/savvy/rixa/modules/conversations/ConversationModule.java @@ -0,0 +1,50 @@ +package me.savvy.rixa.modules.conversations; + +import com.google.code.chatterbotapi.*; +import me.savvy.rixa.guild.RixaGuild; +import me.savvy.rixa.modules.RixaModule; + +public class ConversationModule implements RixaModule { + + private final RixaGuild rixaGuild; + private ChatterBotFactory factory; + private ChatterBotSession chatBotSession; + private ChatterBot chatBot; + + public ConversationModule(RixaGuild rixaGuild) { + this.rixaGuild = rixaGuild; + load(); + } + @Override + public String getName() { + return "ConversationModule"; + } + + @Override + public String getDescription() { + return "Conversation API - PandoraBots"; + } + + @Override + public boolean isEnabled() { + return true; + } + + @Override + public void load() { + try { + factory = new ChatterBotFactory(); + chatBot = factory.create(ChatterBotType.PANDORABOTS, "b0dafd24ee35a477"); + chatBotSession = chatBot.createSession(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void save() {} + + public ChatterBotSession getChatBotSession() { + return chatBotSession; + } +} diff --git a/src/main/java/me/savvy/rixa/modules/economy/Economy.java b/src/main/java/me/savvy/rixa/modules/economy/Economy.java index b893f99..7918468 100644 --- a/src/main/java/me/savvy/rixa/modules/economy/Economy.java +++ b/src/main/java/me/savvy/rixa/modules/economy/Economy.java @@ -10,6 +10,9 @@ import java.util.Map; public class Economy implements RixaModule { + public Economy(RixaGuild rixaGuild) { + this.rixaGuild = rixaGuild; + } @Getter private RixaGuild rixaGuild; @Getter @@ -33,9 +36,7 @@ public class Economy implements RixaModule { } @Override - public void load(RixaGuild rixaGuild) { - this.rixaGuild = rixaGuild; - } + public void load() { } @Override public void save() { @@ -44,6 +45,6 @@ public class Economy implements RixaModule { public void setEnabled(boolean enabled) { this.enabled = enabled; - DatabaseUtils.update("modules", "levels", "guild_id", enabled, rixaGuild.getGuild().getId()); + DatabaseUtils.update("modules", "x", "guild_id", enabled, rixaGuild.getGuild().getId()); } } \ No newline at end of file diff --git a/src/main/java/me/savvy/rixa/modules/levels/LevelsModule.java b/src/main/java/me/savvy/rixa/modules/levels/LevelsModule.java index d104deb..1af8586 100644 --- a/src/main/java/me/savvy/rixa/modules/levels/LevelsModule.java +++ b/src/main/java/me/savvy/rixa/modules/levels/LevelsModule.java @@ -13,6 +13,7 @@ import me.savvy.rixa.utils.DatabaseUtils; import me.savvy.rixa.utils.MessageBuilder; import net.dv8tion.jda.core.entities.Member; +import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.*; @@ -30,12 +31,42 @@ public class LevelsModule implements RixaModule { @Setter private boolean enabled; + public LevelsModule(RixaGuild rixaGuild) { + this.rixaGuild = rixaGuild; + load(); + } + + @Override + public void load() { + try { + Query query = new Query("SELECT * FROM `modules` WHERE `guild_id`=?;"); + query.setString(rixaGuild.getGuild().getId()); + Optional o = Rixa.getDatabase().send(query); + if (!o.isPresent()) return; + else if (!(o.get() instanceof ResultSet)) return; + ResultSet set = (ResultSet) o.get(); + if (set.next()) { + setEnabled(set.getBoolean("levels")); + } else { + Update update = new Update("INSERT INTO `modules` (`guild_id`) VALUES (?);"); + update.setString(rixaGuild.getGuild().getId()); + Rixa.getDatabase().send(update); + setEnabled(true); + } + set.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + private List leaderboard(Member member) { Database db = Rixa.getDatabase(); ResultSet rs = null; try { - rs = db.getConnection().get().prepareStatement(String.format("SELECT * FROM `levels` WHERE `guild_id` = '%s' ORDER BY `experience` DESC;", member.getGuild().getId())).executeQuery(); + PreparedStatement ps = db.getConnection().get().prepareStatement("SELECT * FROM `levels` WHERE `guild_id` = ? ORDER BY `experience` DESC;"); + ps.setString(1, member.getGuild().getId()); + rs = ps.executeQuery(); } catch (SQLException e) { e.printStackTrace(); } @@ -98,30 +129,6 @@ public class LevelsModule implements RixaModule { return "Rixa levels module."; } - @Override - public void load(RixaGuild rixaGuild) { - try { - this.rixaGuild = rixaGuild; - Query query = new Query("SELECT * FROM `modules` WHERE `guild_id`=?;"); - query.setString(rixaGuild.getGuild().getId()); - Optional o = Rixa.getDatabase().send(query); - if (!o.isPresent()) return; - else if (!(o.get() instanceof ResultSet)) return; - ResultSet set = (ResultSet) o.get(); - if (set.next()) { - setEnabled(set.getBoolean("levels")); - } else { - Update update = new Update("INSERT INTO `modules` (`guild_id`) VALUES (?);"); - update.setString(rixaGuild.getGuild().getId()); - Rixa.getDatabase().send(update); - setEnabled(true); - } - set.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - } - @Override public void save() { DatabaseUtils.update("modules", "levels", "guild_id", enabled, rixaGuild.getGuild().getId()); diff --git a/src/main/java/me/savvy/rixa/modules/music/MusicModule.java b/src/main/java/me/savvy/rixa/modules/music/MusicModule.java index 3828c4c..a12e315 100644 --- a/src/main/java/me/savvy/rixa/modules/music/MusicModule.java +++ b/src/main/java/me/savvy/rixa/modules/music/MusicModule.java @@ -20,6 +20,9 @@ import java.util.Optional; */ public class MusicModule implements RixaModule { + public MusicModule(RixaGuild rixaGuild) { + this.guild = rixaGuild.getGuild(); + } private Database db; @Getter @Setter @@ -31,9 +34,8 @@ public class MusicModule implements RixaModule { private Guild guild; @Override - public void load(RixaGuild rixaGuild) { + public void load() { try { - this.guild = rixaGuild.getGuild(); this.enabled = false; this.musicRole = "default_value"; db = Rixa.getDatabase(); diff --git a/src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java b/src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java index 2814907..b3be95f 100644 --- a/src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java +++ b/src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java @@ -62,7 +62,7 @@ public class TwitterModule implements RixaModule { } @Override - public void load(RixaGuild guild) { } + public void load() { } @Override public void save() { } diff --git a/src/main/java/me/savvy/rixa/utils/DatabaseUtils.java b/src/main/java/me/savvy/rixa/utils/DatabaseUtils.java index aababce..d62f97e 100644 --- a/src/main/java/me/savvy/rixa/utils/DatabaseUtils.java +++ b/src/main/java/me/savvy/rixa/utils/DatabaseUtils.java @@ -13,6 +13,7 @@ import java.util.Optional; public class DatabaseUtils { public static Result update(String table, String setting, String key, Object placeholder, Object placeholder2) { + Update update = new Update("UPDATE `" + table + "` SET `" + setting + "` = ? WHERE `" + key + "` = ?;"); update.setObject(placeholder); update.setObject(placeholder2);