diff --git a/src/main/java/netneutrality/db/DBController.java b/src/main/java/netneutrality/db/DBController.java index ef37578..6d156af 100644 --- a/src/main/java/netneutrality/db/DBController.java +++ b/src/main/java/netneutrality/db/DBController.java @@ -10,6 +10,8 @@ import java.util.concurrent.TimeUnit; import netneutrality.MusicBot; import netneutrality.ThreadManager; import org.reflections.Reflections; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * When creating a controller, all database actions must be executed in another thread using an executor. One is provided in the {@link ThreadManager} class @@ -22,7 +24,7 @@ public class DBController { */ private final static HashMap controllers = new HashMap<>(); - + private final static Logger logger = LoggerFactory.getLogger(DBController.class); private static MysqlDatabase database = new MysqlDatabase("netneutrality"); /** @@ -46,7 +48,7 @@ public class DBController { public static MysqlDatabase get() { if (database.isClosed()) { - MusicBot.LOGGER.info("Reconnecting to database.."); + logger.info("Reconnecting to database.."); database.reconnect(); } @@ -75,7 +77,7 @@ public class DBController { * Loads all the controllers which extends {@link AbstractController} */ private static void loadControllers() { - MusicBot.LOGGER.info("Loading databases controllers.."); + logger.info("Loading databases controllers.."); Reflections reflections = new Reflections("netneutrality.db.controllers"); Set> classes = reflections.getSubTypesOf(AbstractController.class); @@ -91,7 +93,7 @@ public class DBController { if (!controllers.containsKey(c.getControllerName())) { controllers.put(c.getControllerName(), c); - MusicBot.LOGGER.debug("Loaded controller: " + c.getControllerName()); + logger.debug("Loaded controller: " + c.getControllerName()); } } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | SecurityException e) { diff --git a/src/main/java/netneutrality/db/MysqlDatabase.java b/src/main/java/netneutrality/db/MysqlDatabase.java index 3648e27..23c7e54 100644 --- a/src/main/java/netneutrality/db/MysqlDatabase.java +++ b/src/main/java/netneutrality/db/MysqlDatabase.java @@ -17,9 +17,15 @@ import netneutrality.db.models.MRowModel; import netneutrality.db.models.MTableModel; import netneutrality.exceptions.UnimplementedParameterException; import netneutrality.handler.LogHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class MysqlDatabase { + private final static Logger logger = LoggerFactory.getLogger(MysqlDatabase.class); + private Connection connection; + private String dbName; + protected enum CommandType { SELECT("SELECT"), INSERT("INSERT"), UPDATE("UPDATE"), DELETE("DELETE"); @@ -34,16 +40,15 @@ public class MysqlDatabase { } } - private Connection connection; - private String dbName; + protected MysqlDatabase(String dbName) { this.dbName = dbName; try { - MusicBot.LOGGER.info("Connecting to database..."); + logger.info("Connecting to database..."); connection = new MysqlConnector(dbName, "root", "localhost", "").connect().getConnection(); } catch (SQLException e) { - MusicBot.LOGGER.error("Error connecting to database. Shutting down.."); + logger.error("Error connecting to database. Shutting down.."); MusicBot.shutdown(); System.exit(0); } @@ -57,14 +62,14 @@ public class MysqlDatabase { * @return {@link ResultSet} */ public ResultSet query(String query) { - MusicBot.LOGGER.debug("Query: " + query); + logger.debug("Query: " + query); Statement stmt; try { stmt = connection.createStatement(); return stmt.executeQuery(query); } catch (SQLException e) { - e.printStackTrace(); + logger.error(e.toString()); } return null; @@ -138,7 +143,7 @@ public class MysqlDatabase { * @return a ResultSet object, which can be converted to a model using {@link MysqlDatabase#convertToTableModel(ResultSet)} */ public ResultSet prepareAndExecute(String sql, Object... params) { - MusicBot.LOGGER.debug("Query: " + sql); + logger.debug("Query: " + sql); try { PreparedStatement query = connection.prepareStatement(sql); @@ -146,7 +151,7 @@ public class MysqlDatabase { ResultSet rs = query.executeQuery(); return rs; } catch (SQLException e) { - MusicBot.LOGGER.error(e.toString()); + logger.error(e.toString()); e.printStackTrace(); } @@ -212,7 +217,7 @@ public class MysqlDatabase { * @throws SQLException */ public void close() throws SQLException { - MusicBot.LOGGER.info("Closing database..."); + logger.info("Closing database..."); connection.close(); } @@ -222,10 +227,10 @@ public class MysqlDatabase { public void reconnect() { try { - System.out.println("Reconnecting to database..."); + logger.info("Reconnecting to database..."); connection = new MysqlConnector(dbName, "root", "localhost", "").connect().getConnection(); } catch (SQLException e) { - System.err.println("Error connecting to database. Shutting down.."); + logger.error("Error connecting to database. Shutting down.."); MusicBot.shutdown(); System.exit(0); } diff --git a/src/main/java/netneutrality/db/controllers/DBBlacklist.java b/src/main/java/netneutrality/db/controllers/DBBlacklist.java index 70ccbd8..c84fdda 100644 --- a/src/main/java/netneutrality/db/controllers/DBBlacklist.java +++ b/src/main/java/netneutrality/db/controllers/DBBlacklist.java @@ -13,9 +13,13 @@ import netneutrality.db.DBController; import netneutrality.db.MysqlDatabase; import netneutrality.db.models.MBlacklist; import netneutrality.db.models.MTableModel; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class DBBlacklist extends AbstractController { + private final static Logger logger = LoggerFactory.getLogger(DBBlacklist.class); + public DBBlacklist() { } @@ -45,10 +49,10 @@ public class DBBlacklist extends AbstractController { isAlreadyBlacklisted(word, serverId, blacklisted -> { if (blacklisted >= 1) { database.prepareAndExecuteAsync("DELETE FROM blacklist WHERE word = ? AND serverId = ?", word, serverId).async(); - MusicBot.LOGGER.info("blacklisted"); + logger.info("blacklisted"); success.accept(true); } else { - MusicBot.LOGGER.info("not blacklisted"); + logger.info("not blacklisted"); success.accept(false); } }); @@ -60,10 +64,10 @@ public class DBBlacklist extends AbstractController { isAlreadyBlacklisted(word, serverId, blacklisted -> { if (blacklisted >= 1) { database.prepareAndExecuteAsync("UPDATE blacklist SET isEnabled = 1 WHERE word = ? AND serverId = ?", word, serverId).async(); - MusicBot.LOGGER.info("enabled"); + logger.info("enabled"); success.accept(true); } else { - MusicBot.LOGGER.info("error enabling"); + logger.info("error enabling"); success.accept(false); } }); @@ -75,16 +79,17 @@ public class DBBlacklist extends AbstractController { isAlreadyBlacklisted(word, serverId, blacklisted -> { if (blacklisted >= 1) { database.prepareAndExecuteAsync("UPDATE blacklist SET isEnabled = 0 WHERE word = ? AND serverId = ?", word, serverId).async(); - MusicBot.LOGGER.info("disabled"); + logger.info("disabled"); success.accept(true); } else { - MusicBot.LOGGER.info("error disabled"); + logger.info("error disabled"); success.accept(false); } }); } + @Deprecated public void getBlacklistForWord(String word, String serverId, Consumer success) { ThreadManager.executor.submit(() -> { MBlacklist blacklisted = null; @@ -94,8 +99,7 @@ public class DBBlacklist extends AbstractController { MTableModel table = MysqlDatabase.convertToTableModel(rs); if (table.getNbRows() > 0) { - blacklisted = new MBlacklist((String) table.getRow(0).get(0), (Boolean) table.getRow(0).get(2), (String) table.getRow(0).get(3), - (String) table.getRow(0).get(1)); + blacklisted = new MBlacklist(table.getRow(0)); } } @@ -109,10 +113,14 @@ public class DBBlacklist extends AbstractController { database.prepareAndExecuteAsync("SELECT * FROM blacklist WHERE serverId = ? AND isEnabled = 1", serverId).async(model -> { ArrayList output = new ArrayList<>(); - if (model.getNbRows() != 0) { + + if (model.getNbRows() > 0) { + + for (int row = 0; row < model.getNbRows(); row++) { - output.add(new MBlacklist((String) model.getRow(row).get(0), (Boolean) model.getRow(row).get(2), (String) model.getRow(row).get(3), - (String) model.getRow(row).get(1))); + logger.debug("enter loop"); + MBlacklist bl = new MBlacklist(model.getRow(row)); + output.add(bl); } } @@ -121,6 +129,23 @@ public class DBBlacklist extends AbstractController { } + @Deprecated + public ArrayList getBlacklistFromServer(String serverId) { + + MTableModel model = database.prepareAndExecuteAsync("SELECT * FROM blacklist WHERE serverId = ? AND isEnabled = 1", serverId).blocking(); + ArrayList output = new ArrayList<>(); + + if (model.getNbRows() > 0) { + + for (int row = 0; row < model.getNbRows(); row++) { + MBlacklist bl = new MBlacklist(model.getRow(row)); + output.add(bl); + } + } + + return output; + } + @Deprecated private boolean isAlreadyBlacklisted(String word, String serverId) { AtomicBoolean result = new AtomicBoolean(); @@ -131,6 +156,7 @@ public class DBBlacklist extends AbstractController { } }); + return result.get(); } diff --git a/src/main/java/netneutrality/db/controllers/DBMessage.java b/src/main/java/netneutrality/db/controllers/DBMessage.java index 91c8faf..529d3d8 100644 --- a/src/main/java/netneutrality/db/controllers/DBMessage.java +++ b/src/main/java/netneutrality/db/controllers/DBMessage.java @@ -1,87 +1,101 @@ package netneutrality.db.controllers; import java.sql.SQLException; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.sql.ResultSet; -import netneutrality.ThreadManager; +import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.TextChannel; +import net.dv8tion.jda.api.entities.User; import netneutrality.db.AbstractController; import netneutrality.db.DBController; import netneutrality.db.MysqlDatabase; import netneutrality.db.models.MMessage; import netneutrality.db.models.MTableModel; import netneutrality.handler.LogHandler; - -import javax.swing.table.TableModel; +import netneutrality.utils.Settings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class DBMessage extends AbstractController { - - public DBMessage() { } - /** - * Returns an instance of {@link MysqlDatabase} with the database name as set in the {@link DBController} class - * - * @return {@link MysqlDatabase} - */ - public MysqlDatabase getDatabase() { - return database; - } - - public void log(String servername, String channelname, String username, String datesent, String messageId, String message) { - database.prepareAndExecuteAsync("INSERT INTO log_message VALUES(?,?,?,?,?,?,?)", servername, channelname, username, datesent, messageId, message, null).async(); + private final static Logger logger = LoggerFactory.getLogger(DBMessage.class); + public DBMessage() { + } - } - - public void logEdit(String messageId, String newMessage) { - database.prepareAndExecuteAsync("UPDATE log_message SET editedMessage = ? WHERE messageId = ?", newMessage, messageId).async(); + /** + * Returns an instance of {@link MysqlDatabase} with the database name as set in the {@link DBController} class + * + * @return {@link MysqlDatabase} + */ + public MysqlDatabase getDatabase() { + return database; + } - } - - public MMessage getMessage(String messageId) { - ResultSet rs = database.prepareAndExecute("SELECT * FROM log_message WHERE messageId = ?", messageId); - MTableModel table = MysqlDatabase.convertToTableModel(rs); - if (table.getNbRows() > 0) { - return new MMessage(table.getRowModel(0)); - } + public void log(Guild guild, TextChannel channel, User author, Message message) { + String servername = guild.getName(); + String channelname = channel.getName(); + String username = author.getName(); + String datesent = message.getTimeCreated().format(DateTimeFormatter.ofPattern(Settings.DATETIMEFORMAT)); + String messageid = message.getId(); + String msg = message.getContentRaw().trim(); + + database.prepareAndExecuteAsync("INSERT INTO log_message VALUES(?,?,?,?,?,?,?)", servername, channelname, username, datesent, messageid, msg, null).async(); + + } + + public void logEdit(String messageId, String newMessage) { + database.prepareAndExecuteAsync("UPDATE log_message SET editedMessage = ? WHERE messageId = ?", newMessage, messageId).async(); + + } + + public MMessage getMessage(String messageId) { + ResultSet rs = database.prepareAndExecute("SELECT * FROM log_message WHERE messageId = ?", messageId); + MTableModel table = MysqlDatabase.convertToTableModel(rs); + if (table.getNbRows() > 0) { + return new MMessage(table.getRowModel(0)); + } - return null; - } - - public ArrayList getMessagesFromUser(String username, String serverName, int max) { - ArrayList messages = new ArrayList<>(); + return null; + } - ResultSet rs = database.prepareAndExecute("SELECT * FROM log_message WHERE userName = ? AND serverName = ? ORDER BY dateSent DESC LIMIT ?", username, serverName, max); - MTableModel table = MysqlDatabase.convertToTableModel(rs); - if (table.getNbRows() > 0) { - for (int row = 0; row < max; row++) { - messages.add(new MMessage(table.getRowModel(row))); - } - } + public ArrayList getMessagesFromUser(String username, String serverName, int max) { + ArrayList messages = new ArrayList<>(); + + ResultSet rs = database.prepareAndExecute("SELECT * FROM log_message WHERE userName = ? AND serverName = ? ORDER BY dateSent DESC LIMIT ?", username, serverName, max); + MTableModel table = MysqlDatabase.convertToTableModel(rs); + if (table.getNbRows() > 0) { + for (int row = 0; row < max; row++) { + messages.add(new MMessage(table.getRowModel(row))); + } + } - return messages; - } - - public String getMessageString(String messageId) { - - try { - ResultSet rs = database.prepareAndExecute("SELECT message FROM log_message WHERE messageId = ?", messageId); - if (rs.next()) { - return rs.getString(1); - } + return messages; + } - } catch (SQLException e) { - LogHandler.log(e); - } + public String getMessageString(String messageId) { - return "No message found"; - } - + try { + ResultSet rs = database.prepareAndExecute("SELECT message FROM log_message WHERE messageId = ?", messageId); + if (rs.next()) { + return rs.getString(1); + } + + } catch (SQLException e) { + logger.error(e.getMessage()); + LogHandler.log(e); + } + + return "No message found"; + } - @Override - public String getControllerName() { - return "message"; - } + @Override + public String getControllerName() { + return "message"; + } } diff --git a/src/main/java/netneutrality/db/models/MBlacklist.java b/src/main/java/netneutrality/db/models/MBlacklist.java index 3dad482..8d6eb91 100644 --- a/src/main/java/netneutrality/db/models/MBlacklist.java +++ b/src/main/java/netneutrality/db/models/MBlacklist.java @@ -1,10 +1,12 @@ package netneutrality.db.models; +import java.util.List; + public class MBlacklist { - protected String word; - protected boolean enabled; - protected String creatorId; + protected String word = ""; + protected boolean enabled = false; + protected String creatorId= ""; protected String serverId; public MBlacklist(String word, boolean enabled, String creatorId, String serverId) { @@ -14,6 +16,13 @@ public class MBlacklist { this.serverId = serverId; } + public MBlacklist(List row) { + this.word = (String) row.get(0); + this.enabled = (Boolean) row.get(2); + this.creatorId = (String) row.get(3); + this.serverId = (String) row.get(1); + } + /** * @return String The blacklisted word */ diff --git a/src/main/java/netneutrality/db/models/MSellyOrder.java b/src/main/java/netneutrality/db/models/MSellyOrder.java index bfcc27c..e3db853 100644 --- a/src/main/java/netneutrality/db/models/MSellyOrder.java +++ b/src/main/java/netneutrality/db/models/MSellyOrder.java @@ -38,6 +38,8 @@ public class MSellyOrder { this.createdAt = createdAt; } + //TODO: Construct from JSONObject + public String getId() { return id; diff --git a/src/main/java/netneutrality/handler/NewCommandListener.java b/src/main/java/netneutrality/handler/NewCommandListener.java index fe304c8..df0ae95 100644 --- a/src/main/java/netneutrality/handler/NewCommandListener.java +++ b/src/main/java/netneutrality/handler/NewCommandListener.java @@ -1,7 +1,6 @@ package netneutrality.handler; - import net.dv8tion.jda.api.entities.ChannelType; import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; @@ -20,51 +19,44 @@ import java.time.format.DateTimeFormatter; public class NewCommandListener extends ListenerAdapter { - public NewCommandListener() { - CommandManager.init(); - } - - @Override - public void onMessageReceived(MessageReceivedEvent event) { - - if (event.getAuthor().isBot()) return; - if (event.isWebhookMessage()) return; - if (MessageRateLimit.check(event.getMember(), event.getMessage(), event.getChannel())) return; + public NewCommandListener() { + CommandManager.init(); + } - if (event.isFromType(ChannelType.TEXT)) { - ((DBMessage) DBController.get("message")).log(event.getGuild().getName(), event.getTextChannel().getName(), - event.getMember().getUser().getName(), - event.getMessage().getTimeCreated().format(DateTimeFormatter.ofPattern(Settings.DATETIMEFORMAT)), event.getMessage().getId(), - event.getMessage().getContentDisplay().trim()); - } + @Override + public void onMessageReceived(MessageReceivedEvent event) { - Message message = event.getMessage(); - String msg = message.getContentDisplay().trim(); - - if (msg.startsWith(Settings.PREFIX)) { - msg = msg.substring(1); - String cmd = msg.split(" ", 2)[0]; + if (event.getAuthor().isBot()) return; + if (event.isWebhookMessage()) return; + if (MessageRateLimit.check(event.getMember(), event.getMessage(), event.getChannel())) return; - if (CommandManager.commands.containsKey(cmd) || CommandManager.commandsAlias.containsKey(cmd)) { + if (event.isFromType(ChannelType.TEXT)) { + ((DBMessage) DBController.get("message")).log(event.getGuild(), event.getTextChannel(), event.getAuthor(), event.getMessage()); + } - AbstractCommand c = CommandManager.commands.containsKey(cmd) ? CommandManager.commands.get(cmd) : CommandManager.commandsAlias.get(cmd); + Message message = event.getMessage(); + String msg = message.getContentDisplay().trim(); - if (Visibility.check(event.getChannel(), c.getVisibility())) { - if (c.needAdmin() && c.getVisibility() != Visibility.PRIVATE) { - if (!UserFunction.isAdmin(event.getMember())) { - return; - } - } + if (msg.startsWith(Settings.PREFIX)) { + msg = msg.substring(1); + String cmd = msg.split(" ", 2)[0]; - if (cmd.equals("help")) { - ((HelpCommand) CommandManager.commands.get("help")).sendHelp(CommandManager.commands, CommandManager.commandsAlias, event.getAuthor(), event.getChannel()); - } else { - c.execute(event, msg.replaceFirst("(" + cmd + ")( )?", "")); - } - } - } - } else { - MessageFunction.checkBlacklist(event.getGuild().getId(), event.getMessage(), event.getTextChannel(), msg); - } - } + if (CommandManager.commands.containsKey(cmd) || CommandManager.commandsAlias.containsKey(cmd)) { + + AbstractCommand c = CommandManager.commands.containsKey(cmd) ? CommandManager.commands.get(cmd) : CommandManager.commandsAlias.get(cmd); + + if (Visibility.check(event.getChannel(), c.getVisibility())) { + if (c.needAdmin()) { + if (!UserFunction.isAdmin(event.getMember())) { + return; + } + } + + c.execute(event, msg.replaceFirst("(" + cmd + ")( )?", "")); + } + } + } else { + MessageFunction.checkBlacklist(event.getGuild().getId(), event.getMessage(), event.getTextChannel(), msg); + } + } } diff --git a/src/main/java/netneutrality/utils/MessageFunction.java b/src/main/java/netneutrality/utils/MessageFunction.java index 9be7812..0251baa 100644 --- a/src/main/java/netneutrality/utils/MessageFunction.java +++ b/src/main/java/netneutrality/utils/MessageFunction.java @@ -16,53 +16,62 @@ import net.dv8tion.jda.api.entities.*; import netneutrality.db.DBController; import netneutrality.db.controllers.DBBlacklist; import netneutrality.db.models.MBlacklist; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class MessageFunction { - public static Member getStartingMention(Message message) { - if (isStartingWithMention(message)) { - return message.getMentionedMembers().get(0); - } + private final static Logger logger = LoggerFactory.getLogger(MessageFunction.class); - return null; - - - } - - public static boolean isStartingWithMention(Message message) { - if (!message.isFromType(ChannelType.TEXT)) - return false; + public static Member getStartingMention(Message message) { + if (isStartingWithMention(message)) { + return message.getMentionedMembers().get(0); + } - List mentions= message.getMentionedMembers(); - - for (Member member : mentions) { - if (message.getContentDisplay().startsWith("@" + member.getUser().getName())) - return true; - } - - return false; - } + return null; - public static MessageEmbed buildAddingTrackMessage(AudioTrack track, Member user) { - EmbedBuilder message = new EmbedBuilder(); - message.setTitle("Adding track to queue.."); - message.setColor(Color.BLUE); - message.addField("Track title :", track.getInfo().title, false); - message.setFooter("Requested by " + user.getUser().getName(), user.getUser().getAvatarUrl()); - message.setTimestamp(OffsetDateTime.now()); - return message.build(); - } + } - public static void checkBlacklist(String guildId, Message message, TextChannel channel, String msg) { - try { - ((DBBlacklist) DBController.get("blacklist")).getBlacklistFromServer(guildId, mBlacklists -> { + public static boolean isStartingWithMention(Message message) { + if (!message.isFromType(ChannelType.TEXT)) + return false; + + List mentions = message.getMentionedMembers(); + + for (Member member : mentions) { + if (message.getContentDisplay().startsWith("@" + member.getUser().getName())) + return true; + } + + return false; + } + + public synchronized static MessageEmbed buildAddingTrackMessage(AudioTrack track, Member user) { + EmbedBuilder message = new EmbedBuilder(); + message.setTitle("Adding track to queue.."); + message.setColor(Color.BLUE); + message.addField("Track title :", track.getInfo().title, false); + message.setFooter("Requested by " + user.getUser().getName(), user.getUser().getAvatarUrl()); + message.setTimestamp(OffsetDateTime.now()); + + + return message.build(); + } + + public static void checkBlacklist(String guildId, Message message, TextChannel channel, String msg) { + try { + ((DBBlacklist) DBController.get("blacklist")).getBlacklistFromServer(guildId, mBlacklists -> { if (!mBlacklists.isEmpty()) { + logger.debug("Not Empty"); boolean found = false; for (MBlacklist aBlacklist : mBlacklists) { - if (msg.toLowerCase().contains(aBlacklist.getWord())) + logger.debug("TESTING WORD:" + aBlacklist.getWord()); + if (msg.toLowerCase().contains(aBlacklist.getWord())) { + found = true; + } } if (found) { @@ -71,8 +80,8 @@ public class MessageFunction { } } }); - } catch (RuntimeException ignored) { - } - } - + } catch (RuntimeException ignored) { + } + } + }