diff --git a/src/main/java/io/rixa/bot/Rixa.java b/src/main/java/io/rixa/bot/Rixa.java index 8659686..bdb3c31 100644 --- a/src/main/java/io/rixa/bot/Rixa.java +++ b/src/main/java/io/rixa/bot/Rixa.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import io.rixa.bot.commands.CommandHandler; import io.rixa.bot.data.config.Configuration; +import io.rixa.bot.data.storage.DatabaseAdapter; import io.rixa.bot.utils.FileUtils; import lombok.Getter; import net.dv8tion.jda.core.AccountType; @@ -84,6 +85,7 @@ public class Rixa { logger.severe("Could not properly load configuration file!."); e.printStackTrace(); } + DatabaseAdapter.getInstance().check(); } public static Rixa getInstance() { diff --git a/src/main/java/io/rixa/bot/data/DataStorage.java b/src/main/java/io/rixa/bot/data/DataStorage.java deleted file mode 100644 index 503d602..0000000 --- a/src/main/java/io/rixa/bot/data/DataStorage.java +++ /dev/null @@ -1,4 +0,0 @@ -package io.rixa.bot.data; - -public interface DataStorage { -} diff --git a/src/main/java/io/rixa/bot/data/config/Configuration.java b/src/main/java/io/rixa/bot/data/config/Configuration.java index f2cabc3..dd9a267 100644 --- a/src/main/java/io/rixa/bot/data/config/Configuration.java +++ b/src/main/java/io/rixa/bot/data/config/Configuration.java @@ -14,4 +14,8 @@ public class Configuration { @Getter @Setter private int shards; public Configuration() {} + + public boolean isBotAdmin(String s) { + return botAdmins.contains(s); + } } diff --git a/src/main/java/io/rixa/bot/data/storage/DatabaseAdapter.java b/src/main/java/io/rixa/bot/data/storage/DatabaseAdapter.java new file mode 100644 index 0000000..ea0704c --- /dev/null +++ b/src/main/java/io/rixa/bot/data/storage/DatabaseAdapter.java @@ -0,0 +1,46 @@ +package io.rixa.bot.data.storage; + +import io.rixa.bot.Rixa; +import io.rixa.bot.data.config.Configuration; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +public class DatabaseAdapter { + + private static DatabaseAdapter instance; + private Rixa rixaInstance; + private JdbcTemplate jdbcTemplate; + private DatabaseAdapter() { + instance = this; + rixaInstance = Rixa.getInstance(); + } + + public void check() { + if (jdbcTemplate != null) { + return; + } + Configuration config = rixaInstance.getConfiguration(); + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("com.mysql.jdbc.Driver"); + dataSource.setUrl( + String.format("jdbc:mysql://%s:%s/%s", config.getSqlCredentials().get("hostName"), + config.getSqlCredentials().get("port"), config.getSqlCredentials().get("databaseName"))); + dataSource.setUsername(config.getSqlCredentials().get("userName")); + dataSource.setPassword(config.getSqlCredentials().get("password")); + jdbcTemplate = new JdbcTemplate(dataSource); + } + + public JdbcTemplate get() { + check(); + return jdbcTemplate; + } + + public boolean exists(String table, String key, String value) { + int amount = get().queryForObject(String.format("SELECT COUNT(*) FROM `%s` WHERE `%s` = ?", table, key), new Object[] { value }, Integer.class); + return amount > 0; + } + + public static DatabaseAdapter getInstance() { + return ( (instance == null) ? instance = new DatabaseAdapter() : instance ); + } +} diff --git a/src/main/java/io/rixa/bot/data/storage/MySQLStorage.java b/src/main/java/io/rixa/bot/data/storage/MySQLStorage.java deleted file mode 100644 index 6799508..0000000 --- a/src/main/java/io/rixa/bot/data/storage/MySQLStorage.java +++ /dev/null @@ -1,6 +0,0 @@ -package io.rixa.bot.data.storage; - -import io.rixa.bot.data.DataStorage; - -public class MySQLStorage implements DataStorage { -} diff --git a/src/main/java/io/rixa/bot/events/ReadyListener.java b/src/main/java/io/rixa/bot/events/ReadyListener.java new file mode 100644 index 0000000..2ed6f31 --- /dev/null +++ b/src/main/java/io/rixa/bot/events/ReadyListener.java @@ -0,0 +1,13 @@ +package io.rixa.bot.events; + +import io.rixa.bot.guild.manager.GuildManager; +import net.dv8tion.jda.core.events.ReadyEvent; +import net.dv8tion.jda.core.hooks.SubscribeEvent; + +public class ReadyListener { + + @SubscribeEvent + public void onReady(ReadyEvent event) { + event.getJDA().getGuilds().forEach(guild -> GuildManager.getInstance().addGuild(guild)); + } +} diff --git a/src/main/java/io/rixa/bot/guild/RixaGuild.java b/src/main/java/io/rixa/bot/guild/RixaGuild.java index f0f2fa1..a85105a 100644 --- a/src/main/java/io/rixa/bot/guild/RixaGuild.java +++ b/src/main/java/io/rixa/bot/guild/RixaGuild.java @@ -3,19 +3,27 @@ package io.rixa.bot.guild; import io.rixa.bot.guild.manager.IGuild; import io.rixa.bot.guild.modules.RixaModule; import lombok.Getter; +import lombok.Setter; import net.dv8tion.jda.core.entities.Guild; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; public class RixaGuild implements IGuild { - @Getter private final String id; @Getter private final Map modules; + @Getter @Setter private List keywords; + @Getter @Setter private String description; + @Getter private final String id; + @Getter private Guild guild; public RixaGuild(Guild guild) { + this.guild = guild; id = guild.getId(); modules = new HashMap<>(); + keywords = new ArrayList<>(); load(); } diff --git a/src/main/java/io/rixa/bot/guild/manager/GuildManager.java b/src/main/java/io/rixa/bot/guild/manager/GuildManager.java index dc144a2..d28a203 100644 --- a/src/main/java/io/rixa/bot/guild/manager/GuildManager.java +++ b/src/main/java/io/rixa/bot/guild/manager/GuildManager.java @@ -1,4 +1,37 @@ package io.rixa.bot.guild.manager; +import io.rixa.bot.data.storage.DatabaseAdapter; +import io.rixa.bot.guild.RixaGuild; +import net.dv8tion.jda.core.entities.Guild; + +import java.util.HashMap; +import java.util.Map; + public class GuildManager { + + private Map rixaGuildMap = new HashMap<>(); + + private GuildManager() { + instance = this; + } + private static GuildManager instance; + + public static GuildManager getInstance() { + return (instance == null) ? new GuildManager() : instance; + } + + public void addGuild(Guild guild) { + if (!(DatabaseAdapter.getInstance().exists("core", "guild_id", guild.getId()))) { + insert(guild); + } + RixaGuild rixaGuild = (RixaGuild) DatabaseAdapter.getInstance().get().queryForObject( + "SELECT * FROM `core` WHERE `guild_name` = ?", new Object[] { guild.getId() }, new GuildMapper()); + rixaGuildMap.put(guild.getId(), rixaGuild); + } + + private void insert(Guild guild) { + DatabaseAdapter.getInstance().get().update + ("INSERT INTO `core` (`guild_id`, `guild_name`, `description`, `keywords`) VALUES (?, ?, ?, ?)", + guild.getId(), guild.getName(), "Description not set.", "No Keywords Found."); + } } diff --git a/src/main/java/io/rixa/bot/guild/manager/GuildMapper.java b/src/main/java/io/rixa/bot/guild/manager/GuildMapper.java index 1356f6c..1fe5212 100644 --- a/src/main/java/io/rixa/bot/guild/manager/GuildMapper.java +++ b/src/main/java/io/rixa/bot/guild/manager/GuildMapper.java @@ -5,12 +5,17 @@ import org.springframework.jdbc.core.RowMapper; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Arrays; +import java.util.List; -public class GuildMapper implements RowMapper { +public class GuildMapper implements RowMapper { @Override - public RixaGuild mapRow(ResultSet resultSet, int i) throws SQLException { - RixaGuild guild = new RixaGuild(null); + public IGuild mapRow(ResultSet resultSet, int i) throws SQLException { + IGuild guild = new RixaGuild(null); + guild.setDescription(resultSet.getString("description")); + List keywords = Arrays.asList((String[])resultSet.getArray("keywords").getArray()); + guild.setKeywords(keywords); // Register guild; return guild; } diff --git a/src/main/java/io/rixa/bot/guild/manager/IGuild.java b/src/main/java/io/rixa/bot/guild/manager/IGuild.java index 93f24c5..9d41392 100644 --- a/src/main/java/io/rixa/bot/guild/manager/IGuild.java +++ b/src/main/java/io/rixa/bot/guild/manager/IGuild.java @@ -2,6 +2,8 @@ package io.rixa.bot.guild.manager; import io.rixa.bot.guild.modules.RixaModule; +import java.util.List; + public interface IGuild { String getId(); @@ -10,4 +12,6 @@ public interface IGuild { RixaModule getModule(String id); RixaModule registerModule(String id, RixaModule module); boolean isRegistered(String id); + void setDescription(String description); + void setKeywords(List keywords); }