From d4f6a52d4456ec613d6852561cf85cbcf2189a11 Mon Sep 17 00:00:00 2001 From: Savvy Date: Mon, 2 Oct 2017 17:21:48 -0400 Subject: [PATCH] Added Color Command, added JDA Version to Info Command, added shutdown message to shutdown command, fixed permissions bug (again) --- src/main/java/me/savvy/rixa/Rixa.java | 2 +- .../rixa/commands/general/ColorCommand.java | 77 +++++++++++++++++++ .../rixa/commands/general/InfoCommand.java | 2 + .../rixa/commands/owner/OwnerCommand.java | 2 +- .../rixa/data/database/sql/SQLBuilder.java | 4 +- .../java/me/savvy/rixa/guild/RixaGuild.java | 23 +++--- .../me/savvy/rixa/guild/user/UserData.java | 4 +- .../conversations/ConversationModule.java | 7 +- .../rixa/modules/twitter/TwitterModule.java | 2 +- .../java/me/savvy/rixa/old/RixaColor.java | 45 +++++++++++ .../me/savvy/rixa/utils/DatabaseUtils.java | 7 +- .../me/savvy/rixa/utils/MessageBuilder.java | 4 +- src/main/java/me/savvy/rixa/utils/Utils.java | 33 ++++++++ 13 files changed, 180 insertions(+), 32 deletions(-) create mode 100644 src/main/java/me/savvy/rixa/commands/general/ColorCommand.java create mode 100644 src/main/java/me/savvy/rixa/old/RixaColor.java diff --git a/src/main/java/me/savvy/rixa/Rixa.java b/src/main/java/me/savvy/rixa/Rixa.java index 57d1478..7070a73 100644 --- a/src/main/java/me/savvy/rixa/Rixa.java +++ b/src/main/java/me/savvy/rixa/Rixa.java @@ -136,7 +136,7 @@ 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 OwnerCommand()); + new LeaderboardCommand(), new RaidModeCommand(), new OwnerCommand(), new ColorCommand()); register(new HelpReaction(), new ConfigReaction(), new LeaderboardReaction()); } diff --git a/src/main/java/me/savvy/rixa/commands/general/ColorCommand.java b/src/main/java/me/savvy/rixa/commands/general/ColorCommand.java new file mode 100644 index 0000000..14f74b8 --- /dev/null +++ b/src/main/java/me/savvy/rixa/commands/general/ColorCommand.java @@ -0,0 +1,77 @@ +package me.savvy.rixa.commands.general; + +import me.savvy.rixa.commands.handlers.Command; +import me.savvy.rixa.commands.handlers.CommandExec; +import me.savvy.rixa.guild.RixaGuild; +import me.savvy.rixa.guild.management.Guilds; +import me.savvy.rixa.old.RixaColor; +import me.savvy.rixa.utils.MessageBuilder; +import net.dv8tion.jda.core.entities.ChannelType; +import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; + +import java.awt.*; +import java.io.File; + +public class ColorCommand implements CommandExec { + + @Override + @Command(mainCommand = "color", + description = "View a HEX/RGB Color!", + channelType = ChannelType.TEXT) + public void execute(GuildMessageReceivedEvent event) { + RixaGuild rixaGuild = Guilds.getGuild(event.getGuild()); + String message = event.getMessage().getContent(); + message = message.replace(rixaGuild.getGuildSettings().getPrefix() + "color ", ""); + RixaColor rixaColor = RixaColor.getInstance(); + Color color = null; + if (message.startsWith("#")) { + try { + color = Color.decode(message); + } catch (NumberFormatException ex) { + new MessageBuilder(message + " is not a number! Example: `" + + rixaGuild.getGuildSettings().getPrefix() + "color #212121`").setColor(event.getMember().getColor()).queue(event.getChannel()); + return; + } + } else { + String[] args = message.split(" "); + if (args.length != 3) { + new MessageBuilder(message + " is not a number! Example: `" + + rixaGuild.getGuildSettings().getPrefix() + "color 6 2 9`").setColor(event.getMember().getColor()).queue(event.getChannel()); + return; + } + int r = 0, g = 0, b = 0; + for(int i = 0; i < args.length; i++) { + Integer x; + try { + x = Integer.parseInt(args[i]); + } catch (NumberFormatException ex) { + new MessageBuilder(args[i] + " is not a number! Example: `" + + rixaGuild.getGuildSettings().getPrefix() + "color 6 2 9`").setColor(event.getMember().getColor()).queue(event.getChannel()); + return; + } + switch (i) { + case 0: + r = x; + break; + case 1: + g = x; + break; + case 2: + b = x; + } + } + try { + color = new Color(r, g, b); + } catch (IllegalArgumentException ex) { + new MessageBuilder(ex.getMessage()).setColor(event.getMember().getColor()).queue(event.getChannel()); + return; + } + } + + File file = rixaColor.coverIMG(color); + String hex = String.format("#%02x%02x%02x", color.getRed(), color.getGreen(), color.getBlue()); + net.dv8tion.jda.core.MessageBuilder msg = new net.dv8tion.jda.core.MessageBuilder(); + msg.setEmbed(new MessageBuilder("Hex: " + hex + ", RGB: " + color.getRed() + ", " + color.getGreen() + ", " + color.getBlue()).getBuilder().build()); + event.getChannel().sendFile(file, msg.build()).queue(); + } +} diff --git a/src/main/java/me/savvy/rixa/commands/general/InfoCommand.java b/src/main/java/me/savvy/rixa/commands/general/InfoCommand.java index 27071f7..b657506 100644 --- a/src/main/java/me/savvy/rixa/commands/general/InfoCommand.java +++ b/src/main/java/me/savvy/rixa/commands/general/InfoCommand.java @@ -6,6 +6,7 @@ import me.savvy.rixa.commands.handlers.CommandExec; import me.savvy.rixa.commands.handlers.CommandType; import net.dv8tion.jda.core.EmbedBuilder; import net.dv8tion.jda.core.JDA; +import net.dv8tion.jda.core.JDAInfo; import net.dv8tion.jda.core.entities.ChannelType; import net.dv8tion.jda.core.entities.Member; import net.dv8tion.jda.core.entities.MessageEmbed; @@ -57,6 +58,7 @@ public class InfoCommand implements CommandExec { .addField("Bot Uptime ", "Uptime: " + day + " days " + hours + " hours " + minute + " minutes " + second + " seconds.", true) .addField("Total Guilds", String.valueOf(guildCount), true) .addField("Total Users", String.valueOf(userCount), true) + .addField("JDA Version", JDAInfo.VERSION, true) .addField("Rixa Developer", botOwner.getName() + "#" + botOwner.getDiscriminator(), true) .setFooter("Requested by " + event.getAuthor().getName() + "#" + event.getAuthor().getDiscriminator(), event.getAuthor().getAvatarUrl()); event.getChannel().sendMessage(messageEmbed.build()).queue(); diff --git a/src/main/java/me/savvy/rixa/commands/owner/OwnerCommand.java b/src/main/java/me/savvy/rixa/commands/owner/OwnerCommand.java index c235987..ece98a3 100644 --- a/src/main/java/me/savvy/rixa/commands/owner/OwnerCommand.java +++ b/src/main/java/me/savvy/rixa/commands/owner/OwnerCommand.java @@ -7,7 +7,6 @@ import me.savvy.rixa.commands.handlers.CommandType; import me.savvy.rixa.guild.RixaGuild; import me.savvy.rixa.guild.management.Guilds; import me.savvy.rixa.utils.MessageBuilder; -import net.dv8tion.jda.core.JDA; import net.dv8tion.jda.core.entities.ChannelType; import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; @@ -27,6 +26,7 @@ public class OwnerCommand implements CommandExec { } try { + new MessageBuilder("Shutting down...").queue(event.getChannel()); for (RixaGuild rixaGuild : Guilds.getGuilds().values()) { Thread.sleep(50); rixaGuild.save(); diff --git a/src/main/java/me/savvy/rixa/data/database/sql/SQLBuilder.java b/src/main/java/me/savvy/rixa/data/database/sql/SQLBuilder.java index 6ccc762..f3ce210 100644 --- a/src/main/java/me/savvy/rixa/data/database/sql/SQLBuilder.java +++ b/src/main/java/me/savvy/rixa/data/database/sql/SQLBuilder.java @@ -61,8 +61,8 @@ public class SQLBuilder { } - public Connection getConnection() { - if (connection == null) { + public Connection getConnection() throws SQLException { + if (connection == null || connection.isClosed()) { connect(); } return connection; diff --git a/src/main/java/me/savvy/rixa/guild/RixaGuild.java b/src/main/java/me/savvy/rixa/guild/RixaGuild.java index e3d609e..4b17314 100644 --- a/src/main/java/me/savvy/rixa/guild/RixaGuild.java +++ b/src/main/java/me/savvy/rixa/guild/RixaGuild.java @@ -50,7 +50,7 @@ public class RixaGuild { load(); } - public void load() { + private void load() { if (!(checkExists())) { try { PreparedStatement ps = db.getPreparedStatement("INSERT INTO `core` (`guild_id`, `guild_name`, `description`, `keywords`) VALUES (?, ?, 'Description not set.', 'No Keywords Found.')\""); @@ -105,9 +105,8 @@ public class RixaGuild { boolean b = false; try { - PreparedStatement ps = db.getPreparedStatement("SELECT ? FROM `permissions` WHERE `role_id` = ?"); - ps.setString(1, permission.toString().toUpperCase()); - ps.setString(2, role.getId()); + PreparedStatement ps = db.getPreparedStatement("SELECT `" + permission.toString().toUpperCase() + "` FROM `permissions` WHERE `role_id` = ?"); + ps.setString(1, role.getId()); ResultSet set = ps.executeQuery(); if (set.next()) { b = set.getBoolean(permission.toString().toUpperCase()); @@ -135,11 +134,10 @@ public class RixaGuild { } } try { - PreparedStatement ps = db.getPreparedStatement("UPDATE `permissions` SET ? = ? WHERE `guild_id` = ? AND `role_id` = ?;"); - ps.setString(1, permission.toString().toUpperCase()); - ps.setBoolean(2, value); - ps.setString(3, guild.getId()); - ps.setString(4, role.getId()); + PreparedStatement ps = db.getPreparedStatement("UPDATE `permissions` SET `" + permission.toString().toUpperCase() + "` = ? WHERE `guild_id` = ? AND `role_id` = ?;"); + ps.setBoolean(1, value); + ps.setString(2, guild.getId()); + ps.setString(3, role.getId()); db.executeUpdate(ps); } catch (SQLException ex) { ex.printStackTrace(); @@ -148,10 +146,9 @@ public class RixaGuild { private boolean permissionExists(Role role) { try { - PreparedStatement query = db.getPreparedStatement("SELECT ? FROM `permissions` WHERE `guild_id` = ? AND `role_id` = ?"); - query.setString(1, RixaPermission.values()[0].toString().toUpperCase()); - query.setString(2, guild.getId()); - query.setString(3, role.getId()); + PreparedStatement query = db.getPreparedStatement("SELECT `" + RixaPermission.values()[0].toString().toUpperCase() + "` FROM `permissions` WHERE `guild_id` = ? AND `role_id` = ?"); + query.setString(1, guild.getId()); + query.setString(2, role.getId()); ResultSet set = query.executeQuery(); boolean b = set.next(); query.close(); diff --git a/src/main/java/me/savvy/rixa/guild/user/UserData.java b/src/main/java/me/savvy/rixa/guild/user/UserData.java index c1f04e8..a936de0 100644 --- a/src/main/java/me/savvy/rixa/guild/user/UserData.java +++ b/src/main/java/me/savvy/rixa/guild/user/UserData.java @@ -131,7 +131,7 @@ public class UserData { statement.setString(1, guild.getId()); statement.setString(2, user.getId()); statement.setInt(3, 0); - statement.executeUpdate(); + Rixa.getDatabase().executeUpdate(statement); } catch (SQLException ex) { ex.printStackTrace(); } @@ -145,7 +145,7 @@ public class UserData { ps.setInt(1, experience); ps.setString(2, guild.getId()); ps.setString(3, user.getId()); - ps.executeUpdate(); + Rixa.getDatabase().executeUpdate(ps); } catch (SQLException e) { e.printStackTrace(); } diff --git a/src/main/java/me/savvy/rixa/modules/conversations/ConversationModule.java b/src/main/java/me/savvy/rixa/modules/conversations/ConversationModule.java index 00ceeba..27082b2 100644 --- a/src/main/java/me/savvy/rixa/modules/conversations/ConversationModule.java +++ b/src/main/java/me/savvy/rixa/modules/conversations/ConversationModule.java @@ -35,17 +35,12 @@ public class ConversationModule implements RixaModule { return "Conversation API - PandoraBots"; } - @Override - public boolean isEnabled() { - return enabled; - } - @Override public void load() { try { PreparedStatement ps = Rixa.getDatabase().getPreparedStatement("SELECT `conversations` FROM `modules` WHERE `guild_id` = ?"); ps.setString(1, rixaGuild.getGuild().getId()); - this.enabled = Rixa.getDatabase().getBoolean(ps, "enabled"); + this.enabled = Rixa.getDatabase().getBoolean(ps, "conversations"); factory = new ChatterBotFactory(); chatBot = factory.create(ChatterBotType.PANDORABOTS, "b0dafd24ee35a477"); chatBotSession = chatBot.createSession(); 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 b3be95f..edad78d 100644 --- a/src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java +++ b/src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java @@ -15,7 +15,7 @@ import twitter4j.conf.ConfigurationBuilder; */ public class TwitterModule implements RixaModule { - @Getter private boolean enabled; + @Getter @Setter private boolean enabled; @Getter private final TwitterStream twitterStream; @Getter diff --git a/src/main/java/me/savvy/rixa/old/RixaColor.java b/src/main/java/me/savvy/rixa/old/RixaColor.java new file mode 100644 index 0000000..df32f68 --- /dev/null +++ b/src/main/java/me/savvy/rixa/old/RixaColor.java @@ -0,0 +1,45 @@ +package me.savvy.rixa.old; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +public class RixaColor { + + private static RixaColor instance; + private File file; + + public RixaColor() { + instance = this; + this.file = new File("Rixa/color.jpg"); + } + + public File coverIMG(Color color) { + int rgb = color.getRGB(); + try { + BufferedImage img = null; + try { + img = ImageIO.read(file); + } catch (IOException ex) { + return null; + } + + for (int i = 0; i < 100; i++) { + for (int j = 0; j < 100; j++) { + img.setRGB(i, j, rgb); + } + } + + File outputfile = new File("Rixa/color.jpg"); + ImageIO.write(img, "jpg", outputfile); + return outputfile; + } catch (Exception ignored) {} + return null; + } + + public static RixaColor getInstance() { + return (instance == null ? new RixaColor() : instance); + } +} diff --git a/src/main/java/me/savvy/rixa/utils/DatabaseUtils.java b/src/main/java/me/savvy/rixa/utils/DatabaseUtils.java index 6f023ff..95af234 100644 --- a/src/main/java/me/savvy/rixa/utils/DatabaseUtils.java +++ b/src/main/java/me/savvy/rixa/utils/DatabaseUtils.java @@ -13,10 +13,9 @@ public class DatabaseUtils { public static Result update(String table, String setting, String key, Object placeholder, Object placeholder2) { PreparedStatement statement = null; try { - statement = Rixa.getDatabase().getPreparedStatement("UPDATE `" + table + "` SET ? = ? WHERE `" + key + "` = ?;"); - statement.setString(1, setting); - statement.setObject(2, placeholder); - statement.setObject(3, placeholder2); + statement = Rixa.getDatabase().getPreparedStatement("UPDATE `" + table + "` SET `" + setting + "` = ? WHERE `" + key + "` = ?;"); + statement.setObject(1, placeholder); + statement.setObject(2, placeholder2); statement.executeUpdate(); statement.close(); } catch (SQLException e) { diff --git a/src/main/java/me/savvy/rixa/utils/MessageBuilder.java b/src/main/java/me/savvy/rixa/utils/MessageBuilder.java index efc5bc1..d59f050 100644 --- a/src/main/java/me/savvy/rixa/utils/MessageBuilder.java +++ b/src/main/java/me/savvy/rixa/utils/MessageBuilder.java @@ -60,8 +60,8 @@ public class MessageBuilder { channel.sendMessage(builder.build()).queue(); } - public void complete(TextChannel channel) { - channel.sendMessage(builder.build()).complete(); + public Message complete(TextChannel channel) { + return channel.sendMessage(builder.build()).complete(); } public void send(User member) { diff --git a/src/main/java/me/savvy/rixa/utils/Utils.java b/src/main/java/me/savvy/rixa/utils/Utils.java index 7aadeca..b12398a 100644 --- a/src/main/java/me/savvy/rixa/utils/Utils.java +++ b/src/main/java/me/savvy/rixa/utils/Utils.java @@ -1,5 +1,12 @@ package me.savvy.rixa.utils; +import net.dv8tion.jda.core.entities.Guild; +import net.dv8tion.jda.core.entities.Member; +import net.dv8tion.jda.core.entities.Role; + +import java.util.ArrayList; +import java.util.List; + /** * Created by Timber on 5/23/2017. */ @@ -13,4 +20,30 @@ public class Utils { return false; } } + + public static List memberSearch(Guild guild, String string, boolean bots) { + List members = new ArrayList<>(); + String finalString = string.toLowerCase(); + for (Member member : guild.getMembers()) { + if ((member.getUser().getName().toLowerCase() + "#" + member.getUser().getDiscriminator()).contains(finalString) + || (member.getEffectiveName().toLowerCase().contains(finalString)) + || finalString.contains(member.getUser().getId())) { + + if (!bots && member.getUser().isBot()) continue; + members.add(member); + } + } + + return members; + } + + public static List roleSearch(Guild guild, String string) { + List roles = new ArrayList<>(); + guild.getRoles().forEach(role -> { + if (role.getName().toLowerCase().contains(string.toLowerCase()) + || string.contains(role.getId())) + roles.add(role); + }); + return roles; + } }