2022-03-24 04:10:50 +00:00
|
|
|
package moe.oko.Kiafumi.model;
|
|
|
|
|
|
|
|
import net.dv8tion.jda.api.entities.Guild;
|
|
|
|
|
|
|
|
import java.sql.*;
|
2022-03-26 05:04:24 +00:00
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
2022-03-24 04:10:50 +00:00
|
|
|
|
|
|
|
import static moe.oko.Kiafumi.Kiafumi.error;
|
|
|
|
import static moe.oko.Kiafumi.Kiafumi.info;
|
|
|
|
|
2022-03-24 04:28:51 +00:00
|
|
|
/**
|
|
|
|
* Kiafumi DB Class
|
|
|
|
* Basically our helpful MySQL functions that pertain to data persistence.
|
|
|
|
*/
|
2022-03-24 04:10:50 +00:00
|
|
|
public class KiafumiDB {
|
2022-03-24 04:28:51 +00:00
|
|
|
//Our actual MySQL Connection, this is created on class construction.
|
2022-03-24 04:10:50 +00:00
|
|
|
private Connection connection;
|
|
|
|
|
2022-03-24 04:28:51 +00:00
|
|
|
//The prepared statement strings
|
2022-03-24 04:10:50 +00:00
|
|
|
private final String CREATE_SERVERINFO_TABLE = "CREATE TABLE IF NOT EXISTS `serverInfo`" +
|
2022-03-26 05:04:24 +00:00
|
|
|
"(`id` LONGTEXT NOT NULL,`welcomeEnabled` TINYINT NOT NULL,`welcomeChannel` LONGTEXT NULL, joinRole LONGTEXT NULL, `serverProtected` TINYINT NOT NULL);";
|
|
|
|
private final String INSERT_SERVERINFO_DEFAULT = "INSERT INTO serverInfo(id,welcomeEnabled,welcomeChannel, joinRole, serverProtected) values (?,?,?,?,?)";
|
2022-03-24 04:10:50 +00:00
|
|
|
private final String SERVERINFO_EXISTS = "select * from serverInfo where id = ?";
|
2022-03-26 05:04:24 +00:00
|
|
|
private final String SERVER_INFO_LOAD = "select * from serverInfo";
|
2022-03-24 04:10:50 +00:00
|
|
|
|
2022-03-24 04:28:51 +00:00
|
|
|
/**
|
|
|
|
* KiafumiDB Config Constructor
|
|
|
|
* @param username - username to access database
|
|
|
|
* @param password - password to access database
|
|
|
|
* @param host - host for server
|
|
|
|
* @param port - port for server (3306 is default)
|
|
|
|
* @param db - database name
|
|
|
|
*/
|
2022-03-24 04:10:50 +00:00
|
|
|
public KiafumiDB(String username, String password, String host, int port, String db) {
|
|
|
|
try {
|
|
|
|
connection = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + db, username, password);
|
|
|
|
} catch (Exception ex) {
|
|
|
|
error("Failed to initialize the MySQL instance. Contact a developer.");
|
|
|
|
ex.printStackTrace();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
initializeTables();
|
|
|
|
}
|
|
|
|
|
2022-03-24 04:28:51 +00:00
|
|
|
/**
|
|
|
|
* Table initialization function, ran on every startup.
|
|
|
|
*/
|
2022-03-24 04:10:50 +00:00
|
|
|
private void initializeTables() {
|
|
|
|
try {
|
|
|
|
connection.prepareStatement(CREATE_SERVERINFO_TABLE).execute();
|
|
|
|
} catch (Exception ex) {
|
|
|
|
ex.printStackTrace();
|
|
|
|
error("Failed to initialize SQL tables. They may need to be created manually.");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-03-24 04:28:51 +00:00
|
|
|
/**
|
|
|
|
* Creates the default server information when the bot joins a discord.
|
|
|
|
* @param guild - the guild that the bot joined
|
|
|
|
* @return whether the function succeeded.
|
|
|
|
*/
|
2022-03-24 04:10:50 +00:00
|
|
|
public boolean createServerInformation(Guild guild) {
|
|
|
|
try {
|
|
|
|
PreparedStatement prep = connection.prepareStatement(SERVERINFO_EXISTS);
|
|
|
|
prep.setInt(1, (int) guild.getIdLong());
|
|
|
|
ResultSet rsCheck = prep.executeQuery();
|
|
|
|
while (rsCheck.next()) {
|
|
|
|
//Server already exists, no need to initialize a section for it.
|
|
|
|
if(rsCheck.getInt(1) != 0) {
|
|
|
|
info("Server already existed. Skipping initialization.");
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//Proceed with making defaults.
|
|
|
|
PreparedStatement ps = connection.prepareStatement(INSERT_SERVERINFO_DEFAULT);
|
|
|
|
ps.setString(1, guild.getId());
|
|
|
|
ps.setInt(2, 0); //default is false.
|
|
|
|
ps.setNull(3, Types.LONGVARCHAR);
|
2022-03-26 05:04:24 +00:00
|
|
|
ps.setNull(4, Types.LONGVARCHAR);
|
|
|
|
ps.setInt(5, 0); //Falseeeee
|
2022-03-24 04:10:50 +00:00
|
|
|
ps.execute();
|
|
|
|
return true;
|
|
|
|
} catch (Exception ex) {
|
|
|
|
error("Failed to create default server info for guild " + guild.getId());
|
|
|
|
ex.printStackTrace();
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2022-03-26 05:04:24 +00:00
|
|
|
|
2022-03-28 05:42:03 +00:00
|
|
|
/**
|
|
|
|
* Loads all the server information from MySQL into memory.
|
|
|
|
* @return - a list of all servers loaded from MySQL.
|
|
|
|
*/
|
2022-03-26 05:04:24 +00:00
|
|
|
public List<Server> loadServerInformation() {
|
|
|
|
List<Server> servers = new ArrayList<>();
|
|
|
|
try {
|
|
|
|
PreparedStatement ps = connection.prepareStatement(SERVER_INFO_LOAD);
|
|
|
|
ResultSet rs = ps.executeQuery();
|
|
|
|
while(rs.next()) {
|
|
|
|
info("Starting new load for server: " + rs.getString(1));
|
|
|
|
String id = rs.getString(1);
|
|
|
|
boolean welcomeEnabled = false;
|
|
|
|
switch(rs.getInt(2)) {
|
|
|
|
case 0:
|
|
|
|
welcomeEnabled = false;
|
|
|
|
case 1:
|
|
|
|
welcomeEnabled = true;
|
|
|
|
}
|
|
|
|
String welcomeChannel = rs.getString(3);
|
|
|
|
String joinRole = rs.getString(4);
|
|
|
|
boolean protectionEnabled = false;
|
|
|
|
switch(rs.getInt(5)) {
|
|
|
|
case 0:
|
|
|
|
protectionEnabled = false;
|
|
|
|
case 1:
|
|
|
|
protectionEnabled = true;
|
|
|
|
}
|
|
|
|
Server server = new Server(id, welcomeEnabled, welcomeChannel, joinRole, protectionEnabled);
|
|
|
|
info("Loaded: " + server);
|
|
|
|
servers.add(server);
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
} catch (Exception ex) {
|
|
|
|
ex.printStackTrace();
|
|
|
|
error("Failed to load server information, check stack.");
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
2022-03-24 04:10:50 +00:00
|
|
|
}
|