diff --git a/src/main/java/moe/oko/Kiafumi/Kiafumi.java b/src/main/java/moe/oko/Kiafumi/Kiafumi.java index 7cb32db..394d9fb 100644 --- a/src/main/java/moe/oko/Kiafumi/Kiafumi.java +++ b/src/main/java/moe/oko/Kiafumi/Kiafumi.java @@ -2,6 +2,7 @@ package moe.oko.Kiafumi; import moe.oko.Kiafumi.listener.MainListener; import moe.oko.Kiafumi.model.KiafumiDB; +import moe.oko.Kiafumi.model.ServerManager; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; @@ -43,6 +44,8 @@ public class Kiafumi { public KiafumiDB database; + public ServerManager serverManager; + /** * Main Class function, makes the classes work or some shit. * @param args - Arguments for program start. @@ -111,6 +114,8 @@ public class Kiafumi { //Initializes database and loads credentials. database = config.createDb(); + serverManager = new ServerManager(); + //Makes our JDA instance. startDiscord(); } @@ -161,4 +166,7 @@ public class Kiafumi { //Gets the active database. public KiafumiDB getDatabase() { return database; } + + //Gets active ServerManager + public ServerManager getServerManager() { return serverManager; } } diff --git a/src/main/java/moe/oko/Kiafumi/listener/MainListener.java b/src/main/java/moe/oko/Kiafumi/listener/MainListener.java index 0db6624..a811ce4 100644 --- a/src/main/java/moe/oko/Kiafumi/listener/MainListener.java +++ b/src/main/java/moe/oko/Kiafumi/listener/MainListener.java @@ -20,7 +20,7 @@ public class MainListener extends ListenerAdapter { public void onGuildJoin(GuildJoinEvent event) { //Automatically create our default information for the server if we don't have it already. info("Joined a new guild, NAME: " + event.getGuild().getName() + " ID: " + event.getGuild().getId()); - Kiafumi.instance.getDatabase().createServerInformation(event.getGuild()); + Kiafumi.instance.getServerManager().createNewDefaultServer(event.getGuild()); } } diff --git a/src/main/java/moe/oko/Kiafumi/model/KiafumiDB.java b/src/main/java/moe/oko/Kiafumi/model/KiafumiDB.java index 9bf603b..dbc9628 100644 --- a/src/main/java/moe/oko/Kiafumi/model/KiafumiDB.java +++ b/src/main/java/moe/oko/Kiafumi/model/KiafumiDB.java @@ -1,9 +1,10 @@ package moe.oko.Kiafumi.model; -import com.mysql.cj.xdevapi.Type; import net.dv8tion.jda.api.entities.Guild; import java.sql.*; +import java.util.ArrayList; +import java.util.List; import static moe.oko.Kiafumi.Kiafumi.error; import static moe.oko.Kiafumi.Kiafumi.info; @@ -18,9 +19,10 @@ public class KiafumiDB { //The prepared statement strings private final String CREATE_SERVERINFO_TABLE = "CREATE TABLE IF NOT EXISTS `serverInfo`" + - "(`id` LONGTEXT NOT NULL,`welcomeEnabled` TINYINT NOT NULL,`welcomeChannel` LONGTEXT NULL);"; - private final String INSERT_SERVERINFO_DEFAULT = "INSERT INTO serverInfo(id,welcomeEnabled,welcomeChannel) values (?,?,?)"; + "(`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 (?,?,?,?,?)"; private final String SERVERINFO_EXISTS = "select * from serverInfo where id = ?"; + private final String SERVER_INFO_LOAD = "select * from serverInfo"; /** * KiafumiDB Config Constructor @@ -76,6 +78,8 @@ public class KiafumiDB { ps.setString(1, guild.getId()); ps.setInt(2, 0); //default is false. ps.setNull(3, Types.LONGVARCHAR); + ps.setNull(4, Types.LONGVARCHAR); + ps.setInt(5, 0); //Falseeeee ps.execute(); return true; } catch (Exception ex) { @@ -84,4 +88,40 @@ public class KiafumiDB { return false; } } + + public List loadServerInformation() { + List 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; + } + } } diff --git a/src/main/java/moe/oko/Kiafumi/model/Server.java b/src/main/java/moe/oko/Kiafumi/model/Server.java index 89fc329..48e7794 100644 --- a/src/main/java/moe/oko/Kiafumi/model/Server.java +++ b/src/main/java/moe/oko/Kiafumi/model/Server.java @@ -1,5 +1,7 @@ package moe.oko.Kiafumi.model; +import javax.annotation.Nullable; + /** * Server Class * Used for in-memory data storage. Loaded from Database later. @@ -8,4 +10,35 @@ public class Server { private String id; private boolean welcomeEnabled; private String welcomeChannel; + private String joinRole; + private boolean serverProtected; + + public Server(String id) { + this.id = id; + this.welcomeEnabled = false; + this.welcomeChannel = null; + this.joinRole = null; + this.serverProtected = false; + } + + /** + * Database Constructor + * @param id - id of the server + * @param welcomeEnabled - is welcome enabled for the server + * @param welcomeChannel - channel for welcome messages, if enabled + * @param serverProtected - is the server under protection rules. (/archive, /stop, etc.) + */ + public Server(String id, boolean welcomeEnabled, @Nullable String welcomeChannel, @Nullable String joinRole, boolean serverProtected) { + this.id = id; + this.welcomeEnabled = welcomeEnabled; + this.welcomeChannel = welcomeChannel; + this.joinRole = joinRole; + this.serverProtected = serverProtected; + } + + @Override + public String toString() { + return "Server{id=" + this.id + ",welcomeEnabled=" + welcomeEnabled + ",welcomeChannel="+welcomeChannel+ + ",joinrole=" + joinRole +",serverProtected="+serverProtected+"}"; + } } diff --git a/src/main/java/moe/oko/Kiafumi/model/ServerManager.java b/src/main/java/moe/oko/Kiafumi/model/ServerManager.java new file mode 100644 index 0000000..a6c0040 --- /dev/null +++ b/src/main/java/moe/oko/Kiafumi/model/ServerManager.java @@ -0,0 +1,40 @@ +package moe.oko.Kiafumi.model; + +import moe.oko.Kiafumi.Kiafumi; +import net.dv8tion.jda.api.entities.Guild; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static moe.oko.Kiafumi.Kiafumi.error; +import static moe.oko.Kiafumi.Kiafumi.info; + +public class ServerManager { + private HashMap servers = new HashMap<>(); + + public ServerManager() { + List loadedServers = Kiafumi.instance.database.loadServerInformation(); + if(loadedServers == null) { + error("Failed to load servers properly. Null val on database."); + return; + } + servers = loadedServers; + } + + public Server getOrCreateServer(String id) { + + } + + public boolean createNewDefaultServer(Guild guild) { + info("Started default server creation for " + guild.getId()); + Server server = new Server(guild.getId()); + if(Kiafumi.instance.getDatabase().createServerInformation(guild)) { + info("New defaults persistent for " + server); + return true; + } else { + error("Failed to create new defaults for " + guild.getId()); + return false; + } + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index c0f2aaa..7052421 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -28,8 +28,8 @@ discord: main: #Currently, unimplemented, maybe in the future if performance becomes and issue. sharded: false - #Activity Type (STREAMING|PLAYING|WATCHING|COMPETING|DEFAULT|CUSTOM_STATUS) - activityType: "CUSTOM_STATUS" + #Activity Type (STREAMING|PLAYING|WATCHING|COMPETING|DEFAULT) + activityType: "PLAYING" #Activity Message activityMsg: "+help - gaaaaay" #Status type (ONLINE|IDLE|DO_NOT_DISTURB|INVISIBLE)