Improved logging and refactored code

This commit is contained in:
anthorob committed 2021-09-10 19:13:23 -04:00
1 parent c92fab3a3c
commit b019852c62
8 files changed
+228 -169

No files matched your search

@@ -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<String, AbstractController> 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<Class<? extends AbstractController>> 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) {
@@ -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);
}
@@ -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<MBlacklist> 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<MBlacklist> 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<MBlacklist> getBlacklistFromServer(String serverId) {
MTableModel model = database.prepareAndExecuteAsync("SELECT * FROM blacklist WHERE serverId = ? AND isEnabled = 1", serverId).blocking();
ArrayList<MBlacklist> 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();
}
@@ -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<MMessage> getMessagesFromUser(String username, String serverName, int max) {
ArrayList<MMessage> 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<MMessage> getMessagesFromUser(String username, String serverName, int max) {
ArrayList<MMessage> 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";
}
}
@@ -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<Object> 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
*/
@@ -38,6 +38,8 @@ public class MSellyOrder {
this.createdAt = createdAt;
}
//TODO: Construct from JSONObject
public String getId() {
return id;
@@ -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);
}
}
}
@@ -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<Member> 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<Member> 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) {
}
}
}