commit 4c67eff7eea3001fd35099b542fe1545421ae99d Author: Savvy Date: Fri Nov 10 08:12:28 2017 -0500 Initial Commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..acb08a7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,82 @@ +# Created by https://www.gitignore.io/api/maven,intellij+iml + +### Intellij+iml ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/dictionaries + +# Sensitive or high-churn files: +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.xml +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml + +# Gradle: +.idea/**/gradle.xml +.idea/**/libraries + +# CMake +cmake-build-debug/ + +# Mongo Explorer plugin: +.idea/**/mongoSettings.xml + +## File-based project format: +*.iws + +## Plugin-specific files: + +# IntelliJ +/out/ + +#dependencies +/jars/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Ruby plugin and RubyMine +/.rakeTasks + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +### Intellij+iml Patch ### +# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 + +*.iml +modules.xml +.idea/misc.xml +*.ipr + +### Maven ### +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties + +# Avoid ignoring Maven wrapper jar file (.jar files are usually ignored) +!/.mvn/wrapper/maven-wrapper.jar + +# End of https://www.gitignore.io/api/maven,intellij+iml \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..255ed86 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..7bf9718 --- /dev/null +++ b/pom.xml @@ -0,0 +1,112 @@ + + + 4.0.0 + + io.rixa + Rixa + 3.0-SNAPSHOT + + + + jcenter + jcenter-bintray + http://jcenter.bintray.com + + + + + + net.dv8tion + JDA + LATEST + + + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml + 2.3.0 + + + com.fasterxml.jackson.core + jackson-databind + 2.2.3 + + + org.apache.commons + commons-lang3 + 3.4 + + + org.projectlombok + lombok + 1.16.18 + + + + + ${project.name}-Build-${project.version}-SNAPSHOT + + + src/main/resources + true + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + UTF-8 + + + + org.apache.maven.plugins + maven-shade-plugin + 2.4.3 + + + package + + shade + + + true + + + commons-logging:commons-logging + + ** + + + + + + + + + false + + + + org.apache.maven.plugins + maven-jar-plugin + 3.0.2 + + + maven-surefire-plugin + 2.19.1 + + false + false + + **/*.java + + + + + + \ No newline at end of file diff --git a/src/main/java/io/rixa/Rixa.java b/src/main/java/io/rixa/Rixa.java new file mode 100644 index 0000000..4454e82 --- /dev/null +++ b/src/main/java/io/rixa/Rixa.java @@ -0,0 +1,52 @@ +package io.rixa; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import io.rixa.data.config.Configuration; +import io.rixa.utils.FileUtils; +import lombok.Getter; + +import java.io.File; +import java.io.IOException; +import java.util.logging.Logger; + +public class Rixa { + + private static Rixa instance; + @Getter private Configuration configuration; + @Getter private ObjectMapper objectMapper; + @Getter private File defaultPath; + @Getter private Logger logger; + + private Rixa() { + instance = this; + logger = Logger.getLogger(Rixa.class.getCanonicalName()); + objectMapper = new ObjectMapper(new YAMLFactory()); + defaultPath = new File("Rixa"); + defaultPath.mkdirs(); + loadConfiguration(); + registerCommands(); + } + + private void registerCommands() {} + + private void loadConfiguration() { + try { + FileUtils.saveResource("config.yml", false); + File file = new File(defaultPath.getPath() + "/config.yml"); + configuration = objectMapper.readValue(file, Configuration.class); + logger.info("Configuration successfully loaded."); + } catch (IOException e) { + logger.severe("Could not properly load configuration file!."); + e.printStackTrace(); + } + } + + public static Rixa getInstance() { + return (instance == null) ? new Rixa() : instance; + } + + public static void main(String[] args) { + Rixa.getInstance(); + } +} diff --git a/src/main/java/io/rixa/commands/Command.java b/src/main/java/io/rixa/commands/Command.java new file mode 100644 index 0000000..e8c20ae --- /dev/null +++ b/src/main/java/io/rixa/commands/Command.java @@ -0,0 +1,36 @@ +package io.rixa.commands; + +import lombok.Getter; +import lombok.Setter; +import net.dv8tion.jda.core.entities.User; +import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; + +import java.util.Collections; +import java.util.List; + +public abstract class Command { + + @Getter @Setter private String command, description; + @Getter @Setter private RixaPermission permission; + @Getter @Setter private List aliases; + public Command(String command) { + this(command, RixaPermission.NONE, "Undefined", Collections.emptyList()); + } + + public Command(String command, RixaPermission rixaPermission) { + this(command, rixaPermission, "Undefined", Collections.emptyList()); + } + + public Command(String command, RixaPermission rixaPermission, String description) { + this(command, rixaPermission, description, Collections.emptyList()); + } + + public Command(String command, RixaPermission rixaPermission, String description, List aliases) { + setCommand(command); + setPermission(rixaPermission); + setDescription(description); + setAliases(aliases); + } + + public abstract boolean execute(GuildMessageReceivedEvent event); +} diff --git a/src/main/java/io/rixa/commands/RixaPermission.java b/src/main/java/io/rixa/commands/RixaPermission.java new file mode 100644 index 0000000..278d3fa --- /dev/null +++ b/src/main/java/io/rixa/commands/RixaPermission.java @@ -0,0 +1,5 @@ +package io.rixa.commands; + +public enum RixaPermission { + NONE; +} diff --git a/src/main/java/io/rixa/commands/cmds/HelpCommand.java b/src/main/java/io/rixa/commands/cmds/HelpCommand.java new file mode 100644 index 0000000..a282f91 --- /dev/null +++ b/src/main/java/io/rixa/commands/cmds/HelpCommand.java @@ -0,0 +1,17 @@ +package io.rixa.commands.cmds; + +import io.rixa.commands.Command; +import io.rixa.commands.RixaPermission; +import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; + +public class HelpCommand extends Command { + + public HelpCommand(String command, RixaPermission rixaPermission, String description) { + super(command, rixaPermission, description); + } + + @Override + public boolean execute(GuildMessageReceivedEvent event) { + return false; + } +} diff --git a/src/main/java/io/rixa/data/DataStorage.java b/src/main/java/io/rixa/data/DataStorage.java new file mode 100644 index 0000000..cacda54 --- /dev/null +++ b/src/main/java/io/rixa/data/DataStorage.java @@ -0,0 +1,4 @@ +package io.rixa.data; + +public interface DataStorage { +} diff --git a/src/main/java/io/rixa/data/config/Configuration.java b/src/main/java/io/rixa/data/config/Configuration.java new file mode 100644 index 0000000..37399f9 --- /dev/null +++ b/src/main/java/io/rixa/data/config/Configuration.java @@ -0,0 +1,16 @@ +package io.rixa.data.config; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; +import java.util.Map; + +public class Configuration { + + @Getter @Setter private String token, botGame; + @Getter @Setter private List botAdmins; + @Getter @Setter private Map sqlCredentials; + + public Configuration() {} +} diff --git a/src/main/java/io/rixa/data/storage/MySQLStorage.java b/src/main/java/io/rixa/data/storage/MySQLStorage.java new file mode 100644 index 0000000..5b33d48 --- /dev/null +++ b/src/main/java/io/rixa/data/storage/MySQLStorage.java @@ -0,0 +1,6 @@ +package io.rixa.data.storage; + +import io.rixa.data.DataStorage; + +public class MySQLStorage implements DataStorage { +} diff --git a/src/main/java/io/rixa/guild/IGuild.java b/src/main/java/io/rixa/guild/IGuild.java new file mode 100644 index 0000000..65fc687 --- /dev/null +++ b/src/main/java/io/rixa/guild/IGuild.java @@ -0,0 +1,13 @@ +package io.rixa.guild; + +import io.rixa.guild.modules.RixaModule; + +public interface IGuild { + + String getId(); + void load(); + void save(); + RixaModule getModule(String id); + RixaModule registerModule(String id, RixaModule module); + boolean isRegistered(String id); +} diff --git a/src/main/java/io/rixa/guild/RixaGuild.java b/src/main/java/io/rixa/guild/RixaGuild.java new file mode 100644 index 0000000..7834dd0 --- /dev/null +++ b/src/main/java/io/rixa/guild/RixaGuild.java @@ -0,0 +1,42 @@ +package io.rixa.guild; + +import io.rixa.guild.modules.RixaModule; +import lombok.Getter; +import net.dv8tion.jda.core.entities.Guild; + +import java.util.HashMap; +import java.util.Map; + +public class RixaGuild implements IGuild { + + @Getter private final String id; + @Getter private final Map modules; + + public RixaGuild(Guild guild) { + id = guild.getId(); + modules = new HashMap<>(); + load(); + } + + @Override + public void load() { } + + @Override + public void save() { } + + @Override + public RixaModule getModule(String id) { + return modules.get(id); + } + + @Override + public RixaModule registerModule(String id, RixaModule module) { + if (!(isRegistered(id))) modules.put(id, module); + return module; + } + + @Override + public boolean isRegistered(String id) { + return modules.containsKey(id); + } +} diff --git a/src/main/java/io/rixa/guild/modules/RixaModule.java b/src/main/java/io/rixa/guild/modules/RixaModule.java new file mode 100644 index 0000000..b1421cd --- /dev/null +++ b/src/main/java/io/rixa/guild/modules/RixaModule.java @@ -0,0 +1,9 @@ +package io.rixa.guild.modules; + +public interface RixaModule { + + String getName(); + String getDescription(); + void load(); + void save(); +} diff --git a/src/main/java/io/rixa/guild/modules/module/LevelsModule.java b/src/main/java/io/rixa/guild/modules/module/LevelsModule.java new file mode 100644 index 0000000..54038ba --- /dev/null +++ b/src/main/java/io/rixa/guild/modules/module/LevelsModule.java @@ -0,0 +1,25 @@ +package io.rixa.guild.modules.module; + +import io.rixa.guild.modules.RixaModule; +import lombok.Getter; +import lombok.Setter; + +public class LevelsModule implements RixaModule { + + @Getter @Setter private String name, description; + + public LevelsModule(String name, String description) { + setName(name); + setDescription(description); + } + + @Override + public void load() { + + } + + @Override + public void save() { + + } +} diff --git a/src/main/java/io/rixa/utils/FileUtils.java b/src/main/java/io/rixa/utils/FileUtils.java new file mode 100644 index 0000000..994f023 --- /dev/null +++ b/src/main/java/io/rixa/utils/FileUtils.java @@ -0,0 +1,62 @@ +package io.rixa.utils; + +import io.rixa.Rixa; + +import java.io.*; +import java.net.URL; +import java.net.URLConnection; + +public class FileUtils { + + /* + Method borrowed from https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/browse/src/main/java/org/bukkit/plugin/java/JavaPlugin.java + */ + public static void saveResource(String resourcePath, boolean replace) throws IOException{ + if (resourcePath == null || resourcePath.equals("")) { + throw new IllegalArgumentException("ResourcePath cannot be null or empty"); + } + + resourcePath = resourcePath.replace('\\', '/'); + InputStream in = getResource(resourcePath); + if (in == null) { + throw new IllegalArgumentException("The embedded resource '" + resourcePath + "' cannot be found in " + "file"); + } + + File outFile = new File(Rixa.getInstance().getDefaultPath(), resourcePath); + int lastIndex = resourcePath.lastIndexOf('/'); + File outDir = new File(Rixa.getInstance().getDefaultPath(), resourcePath.substring(0, lastIndex >= 0 ? lastIndex : 0)); + + if (!outDir.exists()) { + outDir.mkdirs(); + } + + if (!outFile.exists() || replace) { + OutputStream out = new FileOutputStream(outFile); + byte[] buf = new byte[1024]; + int len; + while ((len = in.read(buf)) > 0) { + out.write(buf, 0, len); + } + out.close(); + in.close(); + } else { + System.out.println("Could not save " + outFile.getName() + " to " + outFile + " because " + outFile.getName() + " already exists."); + } + } + + /* + Method borrowed from https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/browse/src/main/java/org/bukkit/plugin/java/JavaPlugin.java + */ + public static InputStream getResource(String filename) throws IOException { + if (filename == null) { + throw new IllegalArgumentException("Filename cannot be null"); + } + URL url = FileUtils.class.getClassLoader().getResource(filename); + if (url == null) { + return null; + } + URLConnection connection = url.openConnection(); + connection.setUseCaches(false); + return connection.getInputStream(); + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..782ad01 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,12 @@ +token: "YOUR_TOKEN_HERE" +botGame: "Rixa 2.0 | http://rixa.io/invite" +botAdmins: +- "YOUR_USER_ID_HERE" +- "OTHER_ADMINS" +- "REMOVE_IF_YOU_DONT_WANT" +sqlCredentials: + hostName: "localhost" + databaseName: "rixa" + userName: "rixa_users" + password: "password" + port: "3306"