diff --git a/.gradle/2.13/taskArtifacts/cache.properties.lock b/.gradle/2.13/taskArtifacts/cache.properties.lock
index 0a03c04..fd54d85 100644
Binary files a/.gradle/2.13/taskArtifacts/cache.properties.lock and b/.gradle/2.13/taskArtifacts/cache.properties.lock differ
diff --git a/.gradle/2.13/taskArtifacts/fileHashes.bin b/.gradle/2.13/taskArtifacts/fileHashes.bin
index 406a999..276a456 100644
Binary files a/.gradle/2.13/taskArtifacts/fileHashes.bin and b/.gradle/2.13/taskArtifacts/fileHashes.bin differ
diff --git a/.gradle/2.13/taskArtifacts/fileSnapshots.bin b/.gradle/2.13/taskArtifacts/fileSnapshots.bin
index 5dfd675..2845386 100644
Binary files a/.gradle/2.13/taskArtifacts/fileSnapshots.bin and b/.gradle/2.13/taskArtifacts/fileSnapshots.bin differ
diff --git a/.gradle/2.13/taskArtifacts/taskArtifacts.bin b/.gradle/2.13/taskArtifacts/taskArtifacts.bin
index 372eb31..da67c1a 100644
Binary files a/.gradle/2.13/taskArtifacts/taskArtifacts.bin and b/.gradle/2.13/taskArtifacts/taskArtifacts.bin differ
diff --git a/.idea/libraries/Gradle__com_mashape_unirest_unirest_java_1_4_9.xml b/.idea/libraries/Gradle__com_mashape_unirest_unirest_java_1_4_9.xml
index 6121314..e39de13 100644
--- a/.idea/libraries/Gradle__com_mashape_unirest_unirest_java_1_4_9.xml
+++ b/.idea/libraries/Gradle__com_mashape_unirest_unirest_java_1_4_9.xml
@@ -2,8 +2,11 @@
+
-
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_sedmelluq_lavaplayer_1_2_39.xml b/.idea/libraries/Gradle__com_sedmelluq_lavaplayer_1_2_39.xml
deleted file mode 100644
index 46b8c65..0000000
--- a/.idea/libraries/Gradle__com_sedmelluq_lavaplayer_1_2_39.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__commons_codec_commons_codec_1_9.xml b/.idea/libraries/Gradle__commons_codec_commons_codec_1_9.xml
index ea493a9..ead3f32 100644
--- a/.idea/libraries/Gradle__commons_codec_commons_codec_1_9.xml
+++ b/.idea/libraries/Gradle__commons_codec_commons_codec_1_9.xml
@@ -2,8 +2,11 @@
+
-
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__commons_logging_commons_logging_1_2.xml b/.idea/libraries/Gradle__commons_logging_commons_logging_1_2.xml
index 7a70d30..9d03aca 100644
--- a/.idea/libraries/Gradle__commons_logging_commons_logging_1_2.xml
+++ b/.idea/libraries/Gradle__commons_logging_commons_logging_1_2.xml
@@ -2,8 +2,11 @@
+
-
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__mysql_mysql_connector_java_5_1_38.xml b/.idea/libraries/Gradle__mysql_mysql_connector_java_5_1_38.xml
index 1bad8c9..b66e8b8 100644
--- a/.idea/libraries/Gradle__mysql_mysql_connector_java_5_1_38.xml
+++ b/.idea/libraries/Gradle__mysql_mysql_connector_java_5_1_38.xml
@@ -2,8 +2,11 @@
+
-
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__org_apache_commons_commons_collections4_4_1.xml b/.idea/libraries/Gradle__org_apache_commons_commons_collections4_4_1.xml
index b4c6feb..0fdac3b 100644
--- a/.idea/libraries/Gradle__org_apache_commons_commons_collections4_4_1.xml
+++ b/.idea/libraries/Gradle__org_apache_commons_commons_collections4_4_1.xml
@@ -2,8 +2,11 @@
+
-
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__org_apache_commons_commons_lang3_3_5.xml b/.idea/libraries/Gradle__org_apache_commons_commons_lang3_3_5.xml
index 7b1f75e..5ee8c1f 100644
--- a/.idea/libraries/Gradle__org_apache_commons_commons_lang3_3_5.xml
+++ b/.idea/libraries/Gradle__org_apache_commons_commons_lang3_3_5.xml
@@ -2,8 +2,11 @@
+
-
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__org_apache_httpcomponents_httpasyncclient_4_1_1.xml b/.idea/libraries/Gradle__org_apache_httpcomponents_httpasyncclient_4_1_1.xml
index 21d2822..8c7ef75 100644
--- a/.idea/libraries/Gradle__org_apache_httpcomponents_httpasyncclient_4_1_1.xml
+++ b/.idea/libraries/Gradle__org_apache_httpcomponents_httpasyncclient_4_1_1.xml
@@ -2,8 +2,11 @@
+
-
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__org_apache_httpcomponents_httpclient_4_5_2.xml b/.idea/libraries/Gradle__org_apache_httpcomponents_httpclient_4_5_2.xml
index 217c1cf..3152057 100644
--- a/.idea/libraries/Gradle__org_apache_httpcomponents_httpclient_4_5_2.xml
+++ b/.idea/libraries/Gradle__org_apache_httpcomponents_httpclient_4_5_2.xml
@@ -2,8 +2,11 @@
+
-
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__org_apache_httpcomponents_httpcore_4_4_4.xml b/.idea/libraries/Gradle__org_apache_httpcomponents_httpcore_4_4_4.xml
index 8fa2fc3..8fe3436 100644
--- a/.idea/libraries/Gradle__org_apache_httpcomponents_httpcore_4_4_4.xml
+++ b/.idea/libraries/Gradle__org_apache_httpcomponents_httpcore_4_4_4.xml
@@ -2,8 +2,11 @@
+
-
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__org_apache_httpcomponents_httpcore_nio_4_4_4.xml b/.idea/libraries/Gradle__org_apache_httpcomponents_httpcore_nio_4_4_4.xml
index f255260..4edbd94 100644
--- a/.idea/libraries/Gradle__org_apache_httpcomponents_httpcore_nio_4_4_4.xml
+++ b/.idea/libraries/Gradle__org_apache_httpcomponents_httpcore_nio_4_4_4.xml
@@ -2,8 +2,11 @@
+
-
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__org_apache_httpcomponents_httpmime_4_5_2.xml b/.idea/libraries/Gradle__org_apache_httpcomponents_httpmime_4_5_2.xml
index 9b958e8..2c132b6 100644
--- a/.idea/libraries/Gradle__org_apache_httpcomponents_httpmime_4_5_2.xml
+++ b/.idea/libraries/Gradle__org_apache_httpcomponents_httpmime_4_5_2.xml
@@ -2,8 +2,11 @@
+
-
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__org_json_json_20160810.xml b/.idea/libraries/Gradle__org_json_json_20160810.xml
index 26de386..976804c 100644
--- a/.idea/libraries/Gradle__org_json_json_20160810.xml
+++ b/.idea/libraries/Gradle__org_json_json_20160810.xml
@@ -2,8 +2,11 @@
+
-
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 9793229..0548357 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,19 +1,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/.idea/modules/Rixa_main.iml b/.idea/modules/Rixa_main.iml
index c32c2c9..fb1c457 100644
--- a/.idea/modules/Rixa_main.iml
+++ b/.idea/modules/Rixa_main.iml
@@ -1,6 +1,6 @@
-
+
@@ -9,11 +9,10 @@
-
+
-
-
-
+
+
@@ -29,7 +28,6 @@
-
@@ -37,5 +35,6 @@
+
\ No newline at end of file
diff --git a/.idea/modules/Rixa_test.iml b/.idea/modules/Rixa_test.iml
index 3ecf3b6..a954436 100644
--- a/.idea/modules/Rixa_test.iml
+++ b/.idea/modules/Rixa_test.iml
@@ -1,6 +1,6 @@
-
+
@@ -10,11 +10,10 @@
-
+
-
-
-
+
+
@@ -30,7 +29,6 @@
-
@@ -38,6 +36,7 @@
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 453e2fa..4ce36d1 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -2,41 +2,12 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
@@ -63,6 +34,9 @@
+
+
+
@@ -81,13 +55,39 @@
+
+
+ musicrole
+ joinpm
+ music
+ greetings
+ addPerm
+ setTitle
+ "http://rixa.io"
+ pplay
+ Staff
+ sendHelp
+ The configuration
+ getMessage(
+ Adding to queue
+ leave
+ log_channel
+ testin
+ testing
+
+
+ setTitle(String.format("Help: %s", title))
+ ;
+ the configuration
+
+
-
-
-
-
-
-
-
@@ -575,15 +579,8 @@
-
-
-
-
-
-
-
+
-
@@ -600,15 +597,11 @@
+
+
-
-
-
-
-
-
@@ -663,236 +656,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -957,52 +720,13 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
@@ -1029,27 +753,19 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1070,57 +786,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -1146,136 +876,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1292,15 +892,6 @@
-
-
-
-
-
-
-
-
-
@@ -1322,27 +913,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1364,9 +934,6 @@
-
-
-
@@ -1400,12 +967,6 @@
-
-
-
-
-
-
@@ -1434,64 +995,38 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- project
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
+
+
@@ -1517,12 +1052,14 @@
-
+
+
+
-
+
@@ -1535,32 +1072,31 @@
-
-
-
-
+
+
-
-
-
+
-
-
+
-
+
+
+
+
+
@@ -1569,7 +1105,7 @@
-
+
@@ -1580,14 +1116,14 @@
-
+
+
-
-
-
+
+
@@ -1615,399 +1151,328 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
-
+
-
-
-
+
+
-
+
-
-
-
-
-
-
+
+
-
+
-
-
-
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build.gradle b/build.gradle
index 5fef19d..6710a9a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -24,11 +24,11 @@ repositories {
}
dependencies {
- compile 'net.dv8tion:JDA:3.1.1_212'
+ compile 'net.dv8tion:JDA:3.1.1_215'
compile 'mysql:mysql-connector-java:5.1.38'
- compile 'com.sedmelluq:lavaplayer:1.2.39'
- compile group: 'edu.cmu.sphinx', name: 'sphinx4-core', version:'5prealpha-SNAPSHOT'
- compile group: 'edu.cmu.sphinx', name: 'sphinx4-data', version:'5prealpha-SNAPSHOT'
+ compile 'com.sedmelluq:lavaplayer:1.2.42'
+ compile 'org.twitter4j:twitter4j-core:4.0.3'
+ compile 'org.twitter4j:twitter4j-stream:4.0.6'
}
compileJava.options.encoding = 'UTF-8'
diff --git a/src/main/java/me/savvy/rixa/Rixa.java b/src/main/java/me/savvy/rixa/Rixa.java
index ab03467..45cc03e 100644
--- a/src/main/java/me/savvy/rixa/Rixa.java
+++ b/src/main/java/me/savvy/rixa/Rixa.java
@@ -14,8 +14,11 @@ import me.savvy.rixa.data.database.sql.DatabaseManager;
import me.savvy.rixa.data.filemanager.ConfigManager;
import me.savvy.rixa.data.filemanager.LanguageManager;
import me.savvy.rixa.events.BotEvent;
+import me.savvy.rixa.events.MemberEvent;
import me.savvy.rixa.events.MessageEvent;
+import me.savvy.rixa.modules.reactions.handlers.React;
import me.savvy.rixa.modules.reactions.handlers.ReactionManager;
+import me.savvy.rixa.modules.reactions.react.ConfigReaction;
import me.savvy.rixa.modules.reactions.react.HelpReaction;
import net.dv8tion.jda.core.AccountType;
import net.dv8tion.jda.core.JDA;
@@ -60,7 +63,7 @@ public class Rixa {
dbManager.createTable();
getInstance().setLanguageManager(new LanguageManager());
try {
- int shards = 3;
+ int shards = 5;
for(int i = 0; i < shards; i++) {
Logger.getLogger("Rixa").info("Loading shard #" + i);
JDABuilder jda = new JDABuilder(AccountType.BOT)
@@ -68,6 +71,7 @@ public class Rixa {
.setEventManager(new AnnotatedEventManager())
.addEventListener(new MessageEvent())
.addEventListener(new BotEvent())
+ .addEventListener(new MemberEvent())
.setGame(Game.of(config.getConfig().getString("botGame")))
.setAutoReconnect(true)
.setStatus(OnlineStatus.ONLINE)
@@ -84,8 +88,8 @@ public class Rixa {
new InfoCommand(), new ServerInfoCommand(), new HelpCommand(),
new DeleteMessagesCommand(), new PingCommand(), new PurgeMessagesCommand(),
new BatchMoveCommand(), new MuteCommand(), new MusicCommand(),
- new ConfigCommand()});
- ReactionManager.registerReaction(new HelpReaction());
+ new ConfigCommand(), new UrbanDictionaryCommand(), /*new InviteCommand()*/});
+ register(new React[] {new HelpReaction(), new ConfigReaction()});
data = new Data(DataType.SQL);
}
@@ -115,6 +119,12 @@ public class Rixa {
}
}
+ private static void register(React react[]) {
+ for (React reaction: react) {
+ ReactionManager.registerReaction(reaction);
+ }
+ }
+
public static Rixa getInstance() {
return instance;
}
@@ -130,4 +140,8 @@ public class Rixa {
public ConfigManager getConfig() {
return config;
}
+
+ public List getShardsList() {
+ return shardsList;
+ }
}
diff --git a/src/main/java/me/savvy/rixa/action/Action.java b/src/main/java/me/savvy/rixa/action/Action.java
new file mode 100644
index 0000000..527a6cb
--- /dev/null
+++ b/src/main/java/me/savvy/rixa/action/Action.java
@@ -0,0 +1,17 @@
+package me.savvy.rixa.action;
+
+import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
+
+/**
+ * Created by savit on 6/24/2017.
+ */
+public interface Action {
+
+ String getName();
+
+ String getDescription();
+
+ void execute();
+
+ void execute(GuildMessageReceivedEvent event);
+}
diff --git a/src/main/java/me/savvy/rixa/action/ActionManager.java b/src/main/java/me/savvy/rixa/action/ActionManager.java
new file mode 100644
index 0000000..052f7f3
--- /dev/null
+++ b/src/main/java/me/savvy/rixa/action/ActionManager.java
@@ -0,0 +1,50 @@
+package me.savvy.rixa.action;
+
+import net.dv8tion.jda.core.entities.Guild;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by savit on 6/24/2017.
+ */
+public class ActionManager {
+
+ private Guild guild;
+ private Map actionMap;
+
+ public ActionManager(Guild guild) {
+ this.guild = guild;
+ actionMap = new HashMap<>();
+ }
+
+ public Guild getGuild() {
+ return guild;
+ }
+
+ public Map getActionMap() {
+ return actionMap;
+ }
+
+ public Action getAction(String actionName) {
+ return actionMap.get(actionName);
+ }
+
+ public void addAction(String actionName, Action action) {
+ if(hasAction(actionName)) {
+ actionMap.remove(actionName);
+ }
+ actionMap.put(actionName, action);
+ }
+
+ public void removeAction(String actionName) {
+ if(!(hasAction(actionName))) {
+ return;
+ }
+ actionMap.remove(actionName);
+ }
+
+ public boolean hasAction(String actionName) {
+ return actionMap.containsKey(actionName);
+ }
+}
diff --git a/src/main/java/me/savvy/rixa/action/actions/MessageResponse.java b/src/main/java/me/savvy/rixa/action/actions/MessageResponse.java
new file mode 100644
index 0000000..8cb3852
--- /dev/null
+++ b/src/main/java/me/savvy/rixa/action/actions/MessageResponse.java
@@ -0,0 +1,28 @@
+package me.savvy.rixa.action.actions;
+
+import me.savvy.rixa.action.Action;
+import me.savvy.rixa.utils.MessageBuilder;
+import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
+
+/**
+ * Created by savit on 6/24/2017.
+ */
+public class MessageResponse implements Action {
+ @Override
+ public String getName() {
+ return "MessageResponse";
+ }
+
+ @Override
+ public String getDescription() {
+ return "Upon trigger, responds with messages";
+ }
+
+ @Override
+ public void execute(GuildMessageReceivedEvent event) {
+ new MessageBuilder("MessageResponse action is still in development.")
+ .setColor(event.getMember().getColor()).queue(event.getChannel());
+ }
+
+ public void execute() {}
+}
diff --git a/src/main/java/me/savvy/rixa/commands/admin/ConfigCommand.java b/src/main/java/me/savvy/rixa/commands/admin/ConfigCommand.java
index 28a8a6b..009b86d 100644
--- a/src/main/java/me/savvy/rixa/commands/admin/ConfigCommand.java
+++ b/src/main/java/me/savvy/rixa/commands/admin/ConfigCommand.java
@@ -10,6 +10,7 @@ import me.savvy.rixa.utils.MessageBuilder;
import net.dv8tion.jda.core.entities.ChannelType;
import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.entities.Role;
+import net.dv8tion.jda.core.entities.TextChannel;
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
import org.apache.commons.lang3.EnumUtils;
@@ -22,7 +23,9 @@ import java.util.List;
public class ConfigCommand implements CommandExec {
private List config;
+ private static ConfigCommand instance;
public ConfigCommand() {
+ instance = this;
config = Arrays.asList(
"%pconfig set greetings ; Set channel where greeting messages are announced!",
"%pconfig set farewell ; Set channel where farewell messages are announced!",
@@ -33,6 +36,7 @@ public class ConfigCommand implements CommandExec {
"%pconfig joinMessage ; Set the greetings message for when a user joins the server!",
"%pconfig quitMessage ; Set the quit message for when a user leaves the server!",
"%pconfig joinPm ; Set the message to be private messaged when a user joins!",
+ "%pconfig description ; Set your server description!",
"%pconfig addPerm ; Give a role permission to access a command!",
"%pconfig removePerm ; Remove a role's permission to access a command!",
"%pconfig enable ; Enabled a Rixa Module!",
@@ -40,7 +44,6 @@ public class ConfigCommand implements CommandExec {
}
@Override
@Command(mainCommand = "config",
- aliases = {},
description = "Configure Rixa to your liking!",
type = CommandType.ADMIN,
channelType = ChannelType.TEXT)
@@ -57,36 +60,60 @@ public class ConfigCommand implements CommandExec {
try {
try {
page = Integer.parseInt(messages[1]);
- sendHelp(event.getMember(), page, rixaGuild.getGuildSettings().getPrefix());
+ sendHelp(event.getMember(), page, rixaGuild.getGuildSettings().getPrefix()).sendUser(event.getAuthor()).addReaction("\u2B05").addReaction("\u27A1");
+ event.getMessage().delete().complete();
+ new MessageBuilder(event.getMember().getAsMention() + ", the configuration menu has been private messaged to you").setColor(event.getMember().getColor()).queue(event.getChannel());
} catch(NumberFormatException ex) {
- sendHelp(event.getMember(), page, rixaGuild.getGuildSettings().getPrefix());
- ex.printStackTrace();
+ sendHelp(event.getMember(), page, rixaGuild.getGuildSettings().getPrefix()).sendUser(event.getAuthor()).addReaction("\u2B05").addReaction("\u27A1");
}
} catch (IllegalArgumentException ex){
- sendHelp(event.getMember(), page, rixaGuild.getGuildSettings().getPrefix());
- ex.printStackTrace();
+ sendHelp(event.getMember(), page, rixaGuild.getGuildSettings().getPrefix()).sendUser(event.getAuthor()).addReaction("\u2B05").addReaction("\u27A1");
+ event.getMessage().delete().complete();
+ new MessageBuilder(event.getMember().getAsMention() + ", the configuration menu has been private messaged to you").setColor(event.getMember().getColor()).queue(event.getChannel());
}
return;
}else if (messages.length < 3) {
- sendHelp(event.getMember(), 0, rixaGuild.getGuildSettings().getPrefix());
+ sendHelp(event.getMember(), 0, rixaGuild.getGuildSettings().getPrefix()).sendUser(event.getAuthor()).addReaction("\u2B05").addReaction("\u27A1");
+ event.getMessage().delete().complete();
+ new MessageBuilder(event.getMember().getAsMention() + ", the configuration menu has been private messaged to you").setColor(event.getMember().getColor()).queue(event.getChannel());
return;
}
String message;
if (messages[1].equalsIgnoreCase("joinmessage")) {
message = getMessage(messages, 2);
+ if(event.getMessage().getMentionedChannels().size() > 0) {
+ for (TextChannel messageChannel : event.getMessage().getMentionedChannels()) {
+ message = message.replace(messageChannel.getAsMention(), "<#" + messageChannel.getId() + ">");
+ }
+ }
rixaGuild.getGuildSettings().setJoinMessage(message);
new MessageBuilder("Successfully set Join Message to\n" + message.replace("{0}", event.getMember().getUser().getName())
.replace("{1}", event.getGuild().getName())).setColor(event.getMember().getColor()).queue(event.getChannel());
} else if (messages[1].equalsIgnoreCase("quitmessage")) {
message = getMessage(messages, 2);
+ if(event.getMessage().getMentionedChannels().size() > 0) {
+ for (TextChannel messageChannel : event.getMessage().getMentionedChannels()) {
+ message = message.replace(messageChannel.getAsMention(), "<#" + messageChannel.getId() + ">");
+ }
+ }
rixaGuild.getGuildSettings().setQuitMessage(message);
new MessageBuilder("Successfully set Quit Message to\n" + message.replace("{0}", event.getMember().getUser().getName())
.replace("{1}", event.getGuild().getName())).setColor(event.getMember().getColor()).queue(event.getChannel());
} else if (messages[1].equalsIgnoreCase("joinpm")) {
message = getMessage(messages, 2);
+ if(event.getMessage().getMentionedChannels().size() > 0) {
+ for (TextChannel messageChannel : event.getMessage().getMentionedChannels()) {
+ message = message.replace(messageChannel.getAsMention(), "<#" + messageChannel.getId() + ">");
+ }
+ }
rixaGuild.getGuildSettings().setJoinPrivateMessage(message);
new MessageBuilder("Successfully set Private Join Message to\n" + message.replace("{0}", event.getMember().getUser().getName())
.replace("{1}", event.getGuild().getName())).setColor(event.getMember().getColor()).queue(event.getChannel());
+ } else if (messages[1].equalsIgnoreCase("description")) {
+ message = getMessage(messages, 2);
+ rixaGuild.getGuildSettings().setDescription(message);
+ new MessageBuilder("Successfully set Server Description to\n" + message.replace("{0}", event.getMember().getUser().getName())
+ .replace("{1}", event.getGuild().getName())).setColor(event.getMember().getColor()).queue(event.getChannel());
} else if (messages[1].equalsIgnoreCase("set")) {
if (messages[2].equalsIgnoreCase("greetings")) {
rixaGuild.getGuildSettings().setJoinMessageChannel(event.getChannel());
@@ -211,24 +238,32 @@ public class ConfigCommand implements CommandExec {
new MessageBuilder("Successfully removed the permission " + perm.name() + " from the role " + role.getName() + "!").setColor(event.getMember().getColor()).queue(event.getChannel());
} else {
int page = 0;
- sendHelp(event.getMember(), page, rixaGuild.getGuildSettings().getPrefix());
+ sendHelp(event.getMember(), page, rixaGuild.getGuildSettings().getPrefix()).sendUser(event.getAuthor()).addReaction("\u2B05").addReaction("\u27A1");
+ event.getMessage().delete().complete();
+ new MessageBuilder(event.getMember().getAsMention() + ", the configuration menu has been private messaged to you").setColor(event.getMember().getColor()).queue(event.getChannel());
}
}
- private void sendHelp(Member member, int page, String prefix) {
+ public MessageBuilder sendHelp(Member member, int page, String prefix) {
int sizePerPage = 4;
int maxPages = config.size() / sizePerPage + (config.size() % sizePerPage > 0 ? 1 : 0);
- int from = Math.max(0, (page + 1 )* sizePerPage);
+ if(page < 0) {
+ page = 0;
+ }
+ if(page > maxPages - 2) {
+ page = maxPages - 3;
+ }
+ int from = Math.max(0, page * sizePerPage);
int to = Math.min(config.size(), (page + 2) * sizePerPage);
List configList = config.subList(from, to);
MessageBuilder builder = new MessageBuilder("\u2699" + " **Config**" +
"\n" +
"Click the back or forward reactions to switch between pages.");
configList.forEach(object -> {
- builder.addField(object.split(" ; ")[0].replace("%p", prefix), object.split(" ; ")[1], true);
+ builder.addField(object.split(" ; ")[0].replace("%p", prefix), object.split(" ; ")[1], false);
});
builder.footer("Page: (" + page + " / " + (maxPages - 2) + ")", member.getGuild().getIconUrl());
- builder.setColor(member.getColor()).sendUser(member.getUser()).setTitle("Config").addReaction("\u2B05").addReaction("\u27A1");
+ return builder.setColor(member.getColor()).setTitle(String.format("Config: %s", member.getGuild().getId()));
}
private String getMessage(String[] messages, int argToBegin) {
@@ -238,4 +273,8 @@ public class ConfigCommand implements CommandExec {
}
return builder.toString().trim();
}
+
+ public static ConfigCommand getInstance() {
+ return instance;
+ }
}
diff --git a/src/main/java/me/savvy/rixa/commands/admin/InviteCommand.java b/src/main/java/me/savvy/rixa/commands/admin/InviteCommand.java
new file mode 100644
index 0000000..1dc454f
--- /dev/null
+++ b/src/main/java/me/savvy/rixa/commands/admin/InviteCommand.java
@@ -0,0 +1,32 @@
+package me.savvy.rixa.commands.admin;
+
+import me.savvy.rixa.commands.handlers.Command;
+import me.savvy.rixa.commands.handlers.CommandExec;
+import me.savvy.rixa.commands.handlers.CommandType;
+import net.dv8tion.jda.core.entities.ChannelType;
+import net.dv8tion.jda.core.entities.TextChannel;
+import net.dv8tion.jda.core.entities.User;
+import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
+import net.dv8tion.jda.core.requests.restaction.InviteAction;
+
+/**
+ * Created by savit on 7/7/2017.
+ */
+public class InviteCommand implements CommandExec {
+
+ @Command(
+ description = "Receive an invite from a server",
+ type = CommandType.USER,
+ channelType = ChannelType.TEXT,
+ usage = "%pinvite", mainCommand = "invite")
+ public void execute(GuildMessageReceivedEvent event) {
+ User owner = event.getGuild().getOwner().getUser();
+ if(!event.getAuthor().getId().equalsIgnoreCase(owner.getId())) {
+ return;
+ }
+ TextChannel channel = event.getJDA().getGuildById(event.getMessage().getContent().split(" ")[1]).getTextChannels().get(0);
+ InviteAction inviteAction = channel.createInvite();
+ owner.openPrivateChannel().complete().sendMessage(
+ "http://discord.gg/" + inviteAction.setMaxUses(1).complete().getCode()).queue();
+ }
+}
diff --git a/src/main/java/me/savvy/rixa/commands/general/HelpCommand.java b/src/main/java/me/savvy/rixa/commands/general/HelpCommand.java
index 6bceef1..2e18a7d 100644
--- a/src/main/java/me/savvy/rixa/commands/general/HelpCommand.java
+++ b/src/main/java/me/savvy/rixa/commands/general/HelpCommand.java
@@ -27,7 +27,7 @@ public class HelpCommand implements CommandExec {
" **Help**" +
"\n" +
"Click the corresponding number for more information about the command menu.";
- embedBuilder.setTitle("Help", "http://rixa.io")
+ embedBuilder.setTitle(String.format("Help: %s", event.getGuild().getId()))
.setDescription(stringBuilder)
.addField("1 - General Commands", "Reveals usable commands intended for `everyone`", false)
.addField("2 - Staff Commands", "Reveals usable commands intended for `staff` use only", false)
diff --git a/src/main/java/me/savvy/rixa/commands/general/InfoCommand.java b/src/main/java/me/savvy/rixa/commands/general/InfoCommand.java
index ec4de04..9ef529d 100644
--- a/src/main/java/me/savvy/rixa/commands/general/InfoCommand.java
+++ b/src/main/java/me/savvy/rixa/commands/general/InfoCommand.java
@@ -5,6 +5,7 @@ import me.savvy.rixa.commands.handlers.Command;
import me.savvy.rixa.commands.handlers.CommandExec;
import me.savvy.rixa.commands.handlers.CommandType;
import net.dv8tion.jda.core.EmbedBuilder;
+import net.dv8tion.jda.core.JDA;
import net.dv8tion.jda.core.entities.ChannelType;
import net.dv8tion.jda.core.entities.User;
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
@@ -18,7 +19,7 @@ import java.util.concurrent.TimeUnit;
*/
public class InfoCommand implements CommandExec {
- @Command(aliases = {""},
+ @Command(
description = "Receive information about Rixa",
type = CommandType.USER,
channelType = ChannelType.TEXT,
@@ -35,18 +36,24 @@ public class InfoCommand implements CommandExec {
long hours = TimeUnit.SECONDS.toHours(seconds) - (day *24);
long minute = TimeUnit.SECONDS.toMinutes(seconds) - (TimeUnit.SECONDS.toHours(seconds)* 60);
long second = TimeUnit.SECONDS.toSeconds(seconds) - (TimeUnit.SECONDS.toMinutes(seconds) *60);
- messageEmbed
- .setTitle("Rixa Discord Bot", "http://rixa.io/")
- .setDescription("Rixa is a user-friendly, multi-purpose bot that is capable of being customized to your discord server needs. " +
- "Rixa is complete with a dashboard, user profile, server statistics system, and many more features such as assigning " +
- "roles on user join, music module, levels, and more. Rixa was created to bring ease and simplicity to managing discord" +
- " servers, it has since then grown into much more than just a bot used for moderation.")
- .addField("Created", event.getJDA().getSelfUser().getCreationTime().format(formatter), true)
- .addField("Bot Uptime ", "Uptime: " + day + " days " + hours + " hours " + minute + " minutes " + second + " seconds.", true)
- .addField("Total Guilds", event.getJDA().getGuilds().size() + "", true)
- .addField("Total Users", event.getJDA().getUsers().size() + "", true)
- .addField("Rixa Developer", botOwner.getName() + "#" + botOwner.getDiscriminator(), true)
- .setFooter("Requested by " + event.getAuthor().getName() + "#" + event.getAuthor().getDiscriminator(), event.getAuthor().getAvatarUrl());
+ int guildCount = 0;
+ int userCount = 0;
+ for(JDA jda: Rixa.getInstance().getShardsList()) {
+ guildCount += jda.getGuilds().size();
+ userCount += jda.getUsers().size();
+ }
+ messageEmbed
+ .setTitle("Rixa Discord Bot", "http://rixa.io/")
+ .setDescription("Rixa is a user-friendly, multi-purpose bot currently in development which is capable of being customized to your Discord server needs. " +
+ "Rixa is complete with a dashboard, user profile, server statistics system, and many more features such as assigning roles on user join, music module, " +
+ "levels, and more. Rixa was created to bring ease and simplicity to managing Discord servers, and has since grown into much more than just a bot used for " +
+ "moderation.")
+ .addField("Created", event.getJDA().getSelfUser().getCreationTime().format(formatter), true)
+ .addField("Bot Uptime ", "Uptime: " + day + " days " + hours + " hours " + minute + " minutes " + second + " seconds.", true)
+ .addField("Total Guilds", String.valueOf(guildCount), true)
+ .addField("Total Users", String.valueOf(userCount), true)
+ .addField("Rixa Developer", botOwner.getName() + "#" + botOwner.getDiscriminator(), true)
+ .setFooter("Requested by " + event.getAuthor().getName() + "#" + event.getAuthor().getDiscriminator(), event.getAuthor().getAvatarUrl());
event.getChannel().sendMessage(messageEmbed.build()).queue();
}
}
diff --git a/src/main/java/me/savvy/rixa/commands/general/MusicCommand.java b/src/main/java/me/savvy/rixa/commands/general/MusicCommand.java
index 8916eb7..a7f367a 100644
--- a/src/main/java/me/savvy/rixa/commands/general/MusicCommand.java
+++ b/src/main/java/me/savvy/rixa/commands/general/MusicCommand.java
@@ -59,8 +59,7 @@ public class MusicCommand implements CommandExec {
musicManagers = new HashMap<>();
}
- @Command(aliases = {},
- description = "Play music in your voice chat.",
+ @Command(description = "Play music in your voice chat.",
type = CommandType.USER,
channelType = ChannelType.TEXT,
usage = "%pmusic", mainCommand = "music")
@@ -73,7 +72,13 @@ public class MusicCommand implements CommandExec {
}
if(rixaGuild.getMusicModule().isRoleRequired()) {
Role role = event.getGuild().getRoleById(rixaGuild.getMusicModule().getMusicRole());
- if(!event.getMember().getRoles().contains(role)) {
+ boolean hasRole = false;
+ for (Role roleItem : event.getMember().getRoles()) {
+ if (roleItem.getId().equalsIgnoreCase(role.getId())) {
+ hasRole = true;
+ }
+ }
+ if(!hasRole) {
new MessageBuilder("You must have the " + role.getName() + " role to use the music module.").setColor(event.getMember().getColor()).queue(event.getChannel());
return;
}
@@ -232,7 +237,7 @@ public class MusicCommand implements CommandExec {
}
}
}
- } else if(message[1].equalsIgnoreCase("play") || message[1].equalsIgnoreCase("pplay")) {
+ } else if(message[1].equalsIgnoreCase("play") || message[1].equalsIgnoreCase("playlist")) {
loadAndPlay(mng, event.getChannel(), message[2], false);
} else if(message[1].equalsIgnoreCase("vol") || message[1].equalsIgnoreCase("volume")) {
try {
@@ -254,7 +259,6 @@ public class MusicCommand implements CommandExec {
String msg = "Adding to queue: " + track.getInfo().title;
mng.scheduler.queue(track);
new MessageBuilder(msg).setColor(Color.decode("#4CC276")).queue(channel);
- channel.sendMessage(msg).queue();
}
@Override
diff --git a/src/main/java/me/savvy/rixa/commands/general/ServerInfoCommand.java b/src/main/java/me/savvy/rixa/commands/general/ServerInfoCommand.java
index a702c08..a7bbd50 100644
--- a/src/main/java/me/savvy/rixa/commands/general/ServerInfoCommand.java
+++ b/src/main/java/me/savvy/rixa/commands/general/ServerInfoCommand.java
@@ -35,6 +35,7 @@ public class ServerInfoCommand implements CommandExec {
.addField("Voice Channels", String.valueOf(event.getGuild().getVoiceChannels().size()), true)
.addField("Roles", String.valueOf(event.getGuild().getRoles().size()), true)
.addField("Owner", owner.getName() + "#" + owner.getDiscriminator(), true)
+ .addField("Enlisted", String.valueOf(rixaGuild.getGuildSettings().isEnlisted()), true)
.setThumbnail(event.getGuild().getIconUrl())
.setFooter("ServerID: " + event.getGuild().getId(), event.getGuild().getIconUrl());
event.getChannel().sendMessage(messageEmbed.build()).queue();
diff --git a/src/main/java/me/savvy/rixa/commands/general/UrbanDictionaryCommand.java b/src/main/java/me/savvy/rixa/commands/general/UrbanDictionaryCommand.java
new file mode 100644
index 0000000..cd9d69e
--- /dev/null
+++ b/src/main/java/me/savvy/rixa/commands/general/UrbanDictionaryCommand.java
@@ -0,0 +1,56 @@
+package me.savvy.rixa.commands.general;
+
+import me.savvy.rixa.commands.handlers.Command;
+import me.savvy.rixa.commands.handlers.CommandExec;
+import me.savvy.rixa.utils.MessageBuilder;
+import me.savvy.rixa.utils.UrbanDictionary;
+import net.dv8tion.jda.core.entities.ChannelType;
+import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+/**
+ * Created by savit on 6/24/2017.
+ */
+public class UrbanDictionaryCommand implements CommandExec {
+
+
+ @Override
+ @Command(mainCommand = "urbandictionary",
+ aliases = {"ud"},
+ description = "Search urban dictionary for a command!",
+ channelType = ChannelType.TEXT)
+ public void execute(GuildMessageReceivedEvent event) {
+ String[] message = event.getMessage().getContent().split(" ");
+ String search = getMessage(message, 1);
+ UrbanDictionary ud = null;
+ try {
+ ud = new UrbanDictionary(URLEncoder.encode(search, "UTF-8"));
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ if(ud == null) {
+ new MessageBuilder("Search term not found.").setColor(event.getMember().getColor()).queue(event.getChannel());
+ }
+ try {
+ if(!ud.search()) {
+ new MessageBuilder("Search term not found.").setColor(event.getMember().getColor()).queue(event.getChannel());
+ return;
+ }
+ } catch (IOException e) {
+ new MessageBuilder("Search term not found.").setColor(event.getMember().getColor()).queue(event.getChannel());
+ }
+ new MessageBuilder(ud.getDefinition()).setTitle(String.format("Definition: %s", ud.getWordToSearch())).setColor(event.getMember().getColor())
+ .addThumbnail("https://s-media-cache-ak0.pinimg.com/originals/f2/aa/37/f2aa3712516cfd0cf6f215301d87a7c2.jpg").queue(event.getChannel());
+ }
+
+ private String getMessage(String[] messages, int argToBegin) {
+ StringBuilder builder = new StringBuilder();
+ for(int i = argToBegin; i < messages.length; i++) {
+ builder.append(messages[i]).append(" ");
+ }
+ return builder.toString().trim();
+ }
+}
diff --git a/src/main/java/me/savvy/rixa/commands/mod/MuteCommand.java b/src/main/java/me/savvy/rixa/commands/mod/MuteCommand.java
index b41a135..903f942 100644
--- a/src/main/java/me/savvy/rixa/commands/mod/MuteCommand.java
+++ b/src/main/java/me/savvy/rixa/commands/mod/MuteCommand.java
@@ -22,7 +22,6 @@ import java.util.Collections;
public class MuteCommand implements CommandExec {
@Override
@Command(mainCommand = "mute",
- aliases = "",
description = "Mute a member.",
type = CommandType.MOD,
channelType = ChannelType.TEXT)
diff --git a/src/main/java/me/savvy/rixa/data/database/sql/DatabaseManager.java b/src/main/java/me/savvy/rixa/data/database/sql/DatabaseManager.java
index 698ab3f..a61f129 100644
--- a/src/main/java/me/savvy/rixa/data/database/sql/DatabaseManager.java
+++ b/src/main/java/me/savvy/rixa/data/database/sql/DatabaseManager.java
@@ -117,7 +117,6 @@ public class DatabaseManager {
return Result.FALSE;
}
} catch (SQLException e) {
- e.printStackTrace();
return Result.ERROR;
}
}
diff --git a/src/main/java/me/savvy/rixa/events/MemberEvent.java b/src/main/java/me/savvy/rixa/events/MemberEvent.java
new file mode 100644
index 0000000..295c028
--- /dev/null
+++ b/src/main/java/me/savvy/rixa/events/MemberEvent.java
@@ -0,0 +1,60 @@
+package me.savvy.rixa.events;
+
+import me.savvy.rixa.guild.RixaGuild;
+import me.savvy.rixa.guild.RixaManager;
+import me.savvy.rixa.utils.MessageBuilder;
+import net.dv8tion.jda.core.entities.Guild;
+import net.dv8tion.jda.core.entities.Role;
+import net.dv8tion.jda.core.events.guild.member.GuildMemberJoinEvent;
+import net.dv8tion.jda.core.exceptions.PermissionException;
+import net.dv8tion.jda.core.hooks.SubscribeEvent;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by savit on 6/18/2017.
+ */
+public class MemberEvent {
+
+ public static Map joinMembers = new HashMap<>();
+
+ @SubscribeEvent
+ public void onMember(GuildMemberJoinEvent event) {
+ RixaGuild rixaGuild = RixaManager.getGuild(event.getGuild());
+ if(rixaGuild.getGuildSettings().getJoinMessageChannel() != null) {
+ try {
+ new MessageBuilder(rixaGuild.getGuildSettings().getJoinMessage()
+ .replace("{0}", event.getMember().getAsMention()).replace("{1}", event.getGuild().getName()).replace
+ ("{2}", String.valueOf(event.getGuild().getMembers().size()))).setColor
+ (event.getMember().getColor()).queue(rixaGuild.getGuildSettings().getJoinMessageChannel());
+ } catch(PermissionException ex) {
+ new MessageBuilder(String.format("I do not have permission for %s in %s", ex.getPermission().getName(), rixaGuild.getGuild().getName()))
+ .setColor(event.getMember().getColor()).send(rixaGuild.getGuild().getOwner().getUser());
+ return;
+ }
+ }
+
+
+ if(rixaGuild.getGuildSettings().isJoinVerification()) {
+ joinMembers.put(event.getMember().getUser().getId(), event.getGuild());
+ } else if(!rixaGuild.getGuildSettings().getDefaultRole().equalsIgnoreCase("default_value")) {
+ try {
+ Role role = event.getGuild().getRoleById(rixaGuild.getGuildSettings().getDefaultRole());
+ event.getGuild().getController().addRolesToMember(event.getMember(), Collections.singleton(role)).complete();
+ } catch(PermissionException ex) {
+ new MessageBuilder(String.format("I do not have permission for %s in %s", ex.getPermission().getName(), rixaGuild.getGuild().getName()))
+ .setColor(event.getMember().getColor()).send(rixaGuild.getGuild().getOwner().getUser());
+ return;
+ }
+ }
+ if(rixaGuild.getGuildSettings().getJoinPrivateMessage().equalsIgnoreCase("default")) {
+ return;
+ }
+ String message = rixaGuild.getGuildSettings().getJoinPrivateMessage().replace("{0}", event.getMember().getAsMention())
+ .replace("{1}", event.getGuild().getName()).replace("{2}", String.valueOf
+ (event.getGuild().getMembers().size()));
+ new MessageBuilder(message).setColor(event.getMember().getColor()).send(event.getMember().getUser());
+ }
+}
diff --git a/src/main/java/me/savvy/rixa/events/MessageEvent.java b/src/main/java/me/savvy/rixa/events/MessageEvent.java
index 2f5e563..dfbfeb1 100644
--- a/src/main/java/me/savvy/rixa/events/MessageEvent.java
+++ b/src/main/java/me/savvy/rixa/events/MessageEvent.java
@@ -1,19 +1,28 @@
package me.savvy.rixa.events;
import com.mysql.jdbc.StringUtils;
+import me.savvy.rixa.Rixa;
import me.savvy.rixa.commands.handlers.CommandHandler;
import me.savvy.rixa.commands.handlers.CommandRegistrar;
import me.savvy.rixa.guild.RixaGuild;
import me.savvy.rixa.guild.RixaManager;
import me.savvy.rixa.modules.reactions.handlers.ReactRegistrar;
import me.savvy.rixa.modules.reactions.handlers.ReactionManager;
+import me.savvy.rixa.utils.MessageBuilder;
+import net.dv8tion.jda.core.Permission;
import net.dv8tion.jda.core.entities.Message;
import net.dv8tion.jda.core.entities.MessageEmbed;
+import net.dv8tion.jda.core.events.guild.member.GuildMemberJoinEvent;
+import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
+import net.dv8tion.jda.core.events.message.priv.PrivateMessageReceivedEvent;
import net.dv8tion.jda.core.events.message.react.MessageReactionAddEvent;
+import net.dv8tion.jda.core.exceptions.PermissionException;
import net.dv8tion.jda.core.hooks.SubscribeEvent;
+import java.awt.*;
import java.lang.reflect.Method;
+import java.util.Collections;
/**
* Created by Timber on 5/7/2017.
@@ -35,12 +44,57 @@ public class MessageEvent {
CommandRegistrar cmd = CommandHandler.get(splitContent[0]);
Method m = cmd.getMethod();
try {
+ Rixa.getInstance().getLogger().info("Invoking: " + cmd.getCommandAnnotation().mainCommand());
m.invoke(cmd.getExecutor(), event);
} catch (Exception e) {
e.printStackTrace();
}
}
+ @SubscribeEvent
+ public void onMemberJoin(PrivateMessageReceivedEvent event) {
+ RixaGuild rixaGuild;
+ if (MemberEvent.joinMembers.containsKey(event.getAuthor().getId())) {
+ rixaGuild = RixaManager.getGuild(MemberEvent.joinMembers.get(event.getAuthor().getId()));
+ if (event.getMessage().getContent().equalsIgnoreCase("I agree") ||
+ event.getMessage().getContent().equalsIgnoreCase("I accept")
+ || event.getMessage().getContent().equalsIgnoreCase("Yes")) {
+ MemberEvent.joinMembers.remove(event.getAuthor().getId());
+ if (!rixaGuild.getGuildSettings().getDefaultRole().equalsIgnoreCase("default_value")) {
+ try {
+ rixaGuild.getGuild().getController().addRolesToMember(rixaGuild.getGuild()
+ .getMember(event.getAuthor()), Collections.singleton(rixaGuild.getGuild().getRoleById(rixaGuild.getGuildSettings().getDefaultRole()))).complete();
+ new MessageBuilder(String.format("You have been promoted on %s!", rixaGuild.getGuild().getName()))
+ .setColor(rixaGuild.getGuild().getMember(event.getAuthor()).getColor()).send(event.getAuthor());
+ } catch(PermissionException ex) {
+ new MessageBuilder(String.format("I do not have permission for %s in %s", ex.getPermission().getName(), rixaGuild.getGuild().getName()))
+ .setColor(Color.RED).send(rixaGuild.getGuild().getOwner().getUser());
+ }
+ }
+ } else if (event.getMessage().getContent().equalsIgnoreCase("I disagree") ||
+ event.getMessage().getContent().equalsIgnoreCase("I deny") ||
+ event.getMessage().getContent().equalsIgnoreCase("No")) {
+ try {
+ new MessageBuilder(String.format("You have been removed from %s because you did not agree to the terms!", rixaGuild.getGuild().getName()))
+ .setColor(Color.RED).send(event.getAuthor());
+ MemberEvent.joinMembers.remove(event.getAuthor().getId());
+ rixaGuild.getGuild().getController().kick(rixaGuild.getGuild().getMember(event.getAuthor())).complete();
+ } catch (PermissionException ex) {
+ if(ex.getPermission() == Permission.KICK_MEMBERS) {
+ new MessageBuilder(String.format("I do not have permission to kick %s from %s", event.getAuthor().getName(), rixaGuild.getGuild().getName()))
+ .setColor(Color.RED).send(rixaGuild.getGuild().getOwner().getUser());
+ } else {
+ new MessageBuilder(String.format("I do not have permission for %s in %s", ex.getPermission().getName(), rixaGuild.getGuild().getName()))
+ .setColor(Color.RED).send(rixaGuild.getGuild().getOwner().getUser());
+ }
+ }
+ }
+ } else {
+ if(!event.getAuthor().isBot())
+ new MessageBuilder("Private messages are currently disabled!").setColor(Color.RED).send(event.getAuthor());
+ }
+ }
+
@SubscribeEvent
public void onReact(MessageReactionAddEvent event) {
Message message = event.getChannel().getMessageById(event.getMessageId()).complete();
diff --git a/src/main/java/me/savvy/rixa/guild/RixaGuild.java b/src/main/java/me/savvy/rixa/guild/RixaGuild.java
index 99dde46..6e6a814 100644
--- a/src/main/java/me/savvy/rixa/guild/RixaGuild.java
+++ b/src/main/java/me/savvy/rixa/guild/RixaGuild.java
@@ -3,8 +3,10 @@ package me.savvy.rixa.guild;
import me.savvy.rixa.Rixa;
import me.savvy.rixa.commands.handlers.RixaPermission;
import me.savvy.rixa.data.database.sql.DatabaseManager;
+import me.savvy.rixa.enums.Result;
import me.savvy.rixa.guild.management.GuildSettings;
import me.savvy.rixa.modules.music.MusicModule;
+import me.savvy.rixa.modules.twitter.TwitterModule;
import net.dv8tion.jda.core.entities.*;
import java.sql.PreparedStatement;
@@ -22,6 +24,7 @@ public class RixaGuild {
private DatabaseManager db;
private GuildSettings guildSettings;
private MusicModule musicModule;
+ private TwitterModule twitterModule;
private List mutedMembers = new ArrayList<>();
public RixaGuild(Guild guild) {
@@ -32,7 +35,13 @@ public class RixaGuild {
}
private void load() {
- if(check()) return;
+ if(!(checkExists())) {
+ Rixa.getInstance().getDbManager()
+ .insert("INSERT INTO `core` (`guild_id`, `guild_name`, `description`, `keywords`, `icon`) VALUES ('%id%', '%name%', 'Description not set.', 'No Keywords Found.', '%icon%')"
+ .replace("%id%", guild.getId())
+ .replace("%name%", guild.getName().replace("'", "\\'"))
+ .replace("%icon%", guild.getIconId()));
+ }
setGuildSettings(new GuildSettings(this.guild));
RixaManager.addGuild(this);
}
@@ -45,11 +54,9 @@ public class RixaGuild {
this.guildSettings = guildSettings;
}
- /**
- * TODO: Check if Guild exists in database if not create new instance;
- */
- public boolean check() {
- return guildSettings == null;
+ private boolean checkExists() {
+ Result r = Rixa.getInstance().getDbManager().checkExists("SELECT `guild_name` FROM `core` WHERE `guild_id` = '" + guild.getId() + "';");
+ return r == Result.TRUE;
}
public Guild getGuild() {
@@ -100,6 +107,7 @@ public class RixaGuild {
ps.setBoolean(1, value);
ps.setString(2, guild.getId());
ps.setString(3, role.getId());
+ ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
@@ -136,4 +144,12 @@ public class RixaGuild {
public void setMusicModule(MusicModule musicModule) {
this.musicModule = musicModule;
}
+
+ public TwitterModule getTwitterModule() {
+ return twitterModule;
+ }
+
+ public void setTwitterModule(TwitterModule twitterModule) {
+ this.twitterModule = twitterModule;
+ }
}
diff --git a/src/main/java/me/savvy/rixa/guild/management/GuildSettings.java b/src/main/java/me/savvy/rixa/guild/management/GuildSettings.java
index 2374b90..446e149 100644
--- a/src/main/java/me/savvy/rixa/guild/management/GuildSettings.java
+++ b/src/main/java/me/savvy/rixa/guild/management/GuildSettings.java
@@ -1,6 +1,7 @@
package me.savvy.rixa.guild.management;
import me.savvy.rixa.Rixa;
+import me.savvy.rixa.enums.Result;
import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.TextChannel;
@@ -28,19 +29,40 @@ public class GuildSettings {
}
private void load() throws SQLException {
+ if(!checkExists()) {
+ Rixa.getInstance().getDbManager().insert("INSERT INTO `settings` (`guild_id`, `log_enabled`, `log_channel`, `joinMessage`, `quitMessage`, `greetings`, `farewell`," +
+ " `prefix`, `joinPm`, `joinVerification`, `defaultRole`, `muteRole`)" +
+ " VALUES ('" + guild.getId() + "', '0', 'default_value', 'default_value', 'default_value', 'default_value', 'default_value', '/'," +
+ " 'default', '0', 'default_value', 'default_value');");
+ return;
+ }
PreparedStatement ps = Rixa.getInstance().getDbManager()
.getConnection().prepareStatement("SELECT * FROM `settings` WHERE `guild_id` = ?");
ps.setString(1, guild.getId());
ResultSet set = Rixa.getInstance().getDbManager().getObject(ps);
- setPrefix(set.getString("prefix"));
- setDefaultRole(set.getString("defaultRole"));
- setJoinMessage(set.getString("joinMessage"));
- setQuitMessage(set.getString("quitMessage"));
- setJoinPrivateMessage(set.getString("joinPM"));
- setMuteRole(set.getString("muteRole"));
- setJoinVerification(set.getBoolean("joinVerification"));
- setDescription((String)Rixa.getInstance().getData().get("guild_id", guild.getId(), "description", "core"));
- setEnlisted((boolean) Rixa.getInstance().getData().get("guild_id", guild.getId(), "enlisted", "core"));
+ this.prefix = (set.getString("prefix"));
+ this.defaultRole = (set.getString("defaultRole"));
+ this.joinMessage = (set.getString("joinMessage"));
+ this.quitMessage = (set.getString("quitMessage"));
+ this.joinPrivateMessage = (set.getString("joinPM"));
+ this.muteRole = (set.getString("muteRole"));
+ this.joinVerification = (set.getBoolean("joinVerification"));
+ if(!set.getString("greetings").equalsIgnoreCase("default_value")) {
+ joinMessageChannel = guild.getTextChannelById(set.getString("greetings"));
+ }
+ if(!set.getString("farewell").equalsIgnoreCase("default_value")) {
+ quitMessageChannel = guild.getTextChannelById(set.getString("farewell"));
+ }
+ ps = Rixa.getInstance().getDbManager()
+ .getConnection().prepareStatement("SELECT * FROM `core` WHERE `guild_id` = ?");
+ ps.setString(1, guild.getId());
+ set = Rixa.getInstance().getDbManager().getObject(ps);
+ this.description = (set.getString("description"));
+ this.enlisted = (set.getBoolean("enlisted"));
+ }
+
+ private boolean checkExists() {
+ return Rixa.getInstance().getDbManager().checkExists("SELECT `guild_id` FROM `settings` WHERE `guild_id` = '" + guild.getId() + "'") == Result.TRUE;
}
public void unload() {
@@ -57,6 +79,7 @@ public class GuildSettings {
public void setJoinMessage(String joinMessage) {
this.joinMessage = joinMessage;
+ Rixa.getInstance().getData().update("settings", "joinMessage", "guild_id", joinMessage, guild.getId());
}
public String getQuitMessage() {
@@ -65,6 +88,7 @@ public class GuildSettings {
public void setQuitMessage(String quitMessage) {
this.quitMessage = quitMessage;
+ Rixa.getInstance().getData().update("settings", "quitMessage", "guild_id", quitMessage, guild.getId());
}
public String getJoinPrivateMessage() {
@@ -73,6 +97,7 @@ public class GuildSettings {
public void setJoinPrivateMessage(String joinPrivateMessage) {
this.joinPrivateMessage = joinPrivateMessage;
+ Rixa.getInstance().getData().update("settings", "joinPM", "guild_id", joinPrivateMessage, guild.getId());
}
public TextChannel getJoinMessageChannel() {
@@ -81,6 +106,7 @@ public class GuildSettings {
public void setJoinMessageChannel(TextChannel joinMessageChannel) {
this.joinMessageChannel = joinMessageChannel;
+ Rixa.getInstance().getData().update("settings", "greetings", "guild_id", joinMessageChannel.getId(), guild.getId());
}
public TextChannel getQuitMessageChannel() {
@@ -89,6 +115,7 @@ public class GuildSettings {
public void setQuitMessageChannel(TextChannel quitMessageChannel) {
this.quitMessageChannel = quitMessageChannel;
+ Rixa.getInstance().getData().update("settings", "farewell", "guild_id", quitMessageChannel.getId(), guild.getId());
}
public String getDefaultRole() {
@@ -97,6 +124,7 @@ public class GuildSettings {
public void setDefaultRole(String defaultRole) {
this.defaultRole = defaultRole;
+ Rixa.getInstance().getData().update("settings", "defaultRole", "guild_id", defaultRole, guild.getId());
}
public String getPrefix() {
@@ -105,6 +133,7 @@ public class GuildSettings {
public void setPrefix(String prefix) {
this.prefix = prefix;
+ Rixa.getInstance().getData().update("settings", "prefix", "guild_id", prefix, guild.getId());
}
public String getDescription() {
@@ -113,6 +142,7 @@ public class GuildSettings {
public void setDescription(String description) {
this.description = description;
+ Rixa.getInstance().getData().update("core", "description", "guild_id", description, guild.getId());
}
public boolean isEnlisted() {
@@ -121,6 +151,7 @@ public class GuildSettings {
public void setEnlisted(boolean enlisted) {
this.enlisted = enlisted;
+ Rixa.getInstance().getData().update("core", "enlisted", "guild_id", enlisted, guild.getId());
}
public String getMuteRole() {
@@ -129,6 +160,7 @@ public class GuildSettings {
public void setMuteRole(String muteRole) {
this.muteRole = muteRole;
+ Rixa.getInstance().getData().update("settings", "muteRole", "guild_id", muteRole, guild.getId());
}
public boolean isJoinVerification() {
@@ -137,5 +169,6 @@ public class GuildSettings {
public void setJoinVerification(boolean joinVerification) {
this.joinVerification = joinVerification;
+ Rixa.getInstance().getData().update("settings", "joinVerification", "guild_id", joinVerification, guild.getId());
}
}
diff --git a/src/main/java/me/savvy/rixa/modules/music/MusicModule.java b/src/main/java/me/savvy/rixa/modules/music/MusicModule.java
index 2d86855..ab6f895 100644
--- a/src/main/java/me/savvy/rixa/modules/music/MusicModule.java
+++ b/src/main/java/me/savvy/rixa/modules/music/MusicModule.java
@@ -28,11 +28,9 @@ public class MusicModule implements RixaModule {
}
public void load() {
- System.out.println("Testing " + guild.getName());
if(!checkExists()) {
db.insert("INSERT INTO `music` (`guild_id`, `music_role`, `enabled`)" +
" VALUES ('" + guild.getId() + "', 'default_value', '0');");
- return;
}
try {
PreparedStatement ps = db.getConnection().prepareStatement
@@ -67,7 +65,7 @@ public class MusicModule implements RixaModule {
}
public boolean isRoleRequired() {
- return (musicRole.equalsIgnoreCase("default_value") && guild.getRolesByName(musicRole, true).size() > 0);
+ return (!musicRole.equalsIgnoreCase("default_value"));
}
public String getMusicRole() {
@@ -84,6 +82,8 @@ public class MusicModule implements RixaModule {
}
public boolean checkExists() {
- return Rixa.getInstance().getData().exists("SELECT `enabled` FROM `music` WHERE `guild_id` = '" + guild.getId() + "'") == Result.TRUE;
+ Result r = Rixa.getInstance().getDbManager().checkExists("SELECT `guild_id` FROM `music` WHERE `guild_id` = '" +
+ guild.getId() + "';");
+ return r == Result.TRUE;
}
}
diff --git a/src/main/java/me/savvy/rixa/modules/reactions/react/ConfigReaction.java b/src/main/java/me/savvy/rixa/modules/reactions/react/ConfigReaction.java
index ddcc3ac..a120f7c 100644
--- a/src/main/java/me/savvy/rixa/modules/reactions/react/ConfigReaction.java
+++ b/src/main/java/me/savvy/rixa/modules/reactions/react/ConfigReaction.java
@@ -1,8 +1,19 @@
package me.savvy.rixa.modules.reactions.react;
+import me.savvy.rixa.commands.admin.ConfigCommand;
+import me.savvy.rixa.commands.handlers.CommandHandler;
+import me.savvy.rixa.commands.handlers.CommandType;
+import me.savvy.rixa.guild.RixaGuild;
+import me.savvy.rixa.guild.RixaManager;
import me.savvy.rixa.modules.reactions.handlers.React;
import me.savvy.rixa.modules.reactions.handlers.ReactHandle;
+import me.savvy.rixa.utils.MessageBuilder;
+import net.dv8tion.jda.core.EmbedBuilder;
+import net.dv8tion.jda.core.entities.ChannelType;
+import net.dv8tion.jda.core.entities.Guild;
+import net.dv8tion.jda.core.entities.Message;
import net.dv8tion.jda.core.events.message.react.MessageReactionAddEvent;
+import net.dv8tion.jda.core.exceptions.ErrorResponseException;
/**
* Created by Timber on 6/9/2017.
@@ -12,5 +23,35 @@ public class ConfigReaction implements React {
@Override
@ReactHandle(title = "Config", description = "Configuration Menu for Rixa")
public void reactionTrigger(MessageReactionAddEvent event) {
+ if (event.getChannel().getType() != ChannelType.PRIVATE
+ || event.getUser().getId().equalsIgnoreCase(event.getJDA().getSelfUser().getId())) {
+ return;
+ }
+ // "Page: (" + page
+ // + "/ " + (maxPages - 2) + ")"
+ Message message = event.getChannel().getMessageById(event.getMessageId()).complete();
+ String title = message.getEmbeds().get(0).getTitle().split(": ")[1];
+ Guild guild = event.getJDA().getGuildById(title);
+ if(guild == null) {
+ return;
+ }
+ RixaGuild rixaGuild = RixaManager.getGuild(guild);
+ String prefix = rixaGuild.getGuildSettings().getPrefix();
+ MessageBuilder builder = null;
+ int page = 500;
+ switch (event.getReaction().getEmote().getName()) {
+ case "\u2B05":// previous
+ page = Integer.parseInt(message.getEmbeds().get(0).getFooter().getText().split(" /")[0].replace("Page: (", "")) - 1;
+ break;
+ case "\u27A1":// next
+ page = Integer.parseInt(message.getEmbeds().get(0).getFooter().getText().split(" /")[0].replace("Page: (", "")) + 1;
+ break;
+ }
+ System.out.println(page);
+ if(page != 500) {
+ builder = ConfigCommand.getInstance().sendHelp
+ (rixaGuild.getGuild().getMember(event.getUser()), page, prefix);
+ message.editMessage(builder.getBuilder().build()).queue();
+ }
}
}
\ No newline at end of file
diff --git a/src/main/java/me/savvy/rixa/modules/reactions/react/HelpReaction.java b/src/main/java/me/savvy/rixa/modules/reactions/react/HelpReaction.java
index 913dab5..57fa86f 100644
--- a/src/main/java/me/savvy/rixa/modules/reactions/react/HelpReaction.java
+++ b/src/main/java/me/savvy/rixa/modules/reactions/react/HelpReaction.java
@@ -2,6 +2,7 @@ package me.savvy.rixa.modules.reactions.react;
import me.savvy.rixa.commands.handlers.CommandHandler;
import me.savvy.rixa.commands.handlers.CommandType;
+import me.savvy.rixa.guild.RixaGuild;
import me.savvy.rixa.guild.RixaManager;
import me.savvy.rixa.modules.reactions.handlers.React;
import me.savvy.rixa.modules.reactions.handlers.ReactHandle;
@@ -24,8 +25,9 @@ public class HelpReaction implements React {
return;
}
Message message = event.getChannel().getMessageById(event.getMessageId()).complete();
- String prefix = (event.getChannel().getType() != ChannelType.PRIVATE) ?
- RixaManager.getGuild(event.getGuild()).getGuildSettings().getPrefix() : "/";
+ String title = message.getEmbeds().get(0).getTitle().split(": ")[1];
+ RixaGuild rixaGuild = RixaManager.getGuild(event.getJDA().getGuildById(title));
+ String prefix = rixaGuild.getGuildSettings().getPrefix();
EmbedBuilder embedBuilder;
try {
switch(event.getReaction().getEmote().getName()) {
@@ -40,7 +42,7 @@ public class HelpReaction implements React {
" **General Commands Help**" +
"\n" +
"Click a number below for information about other commands.";
- embedBuilder.setTitle("Help", "http://rixa.io");
+ embedBuilder.setTitle(String.format("Help: %s", title));
embedBuilder.setDescription(stringBuilder);
CommandHandler.getCommands().values().stream().filter(cmd -> cmd.getCommandAnnotation().type() == CommandType.USER)
.forEach(cmd -> embedBuilder.addField(prefix + cmd.getCommandAnnotation().mainCommand(),
@@ -53,11 +55,11 @@ public class HelpReaction implements React {
" **Staff Commands Help**" +
"\n" +
"Click a number below for information about other commands.";
- embedBuilder.setTitle("Help", "http://rixa.io");
+ embedBuilder.setTitle(String.format("Help: %s", title));
embedBuilder.setDescription(stringBuilder);
CommandHandler.getCommands().values().stream().filter(cmd -> cmd.getCommandAnnotation().type() == CommandType.ADMIN
|| cmd.getCommandAnnotation().type() == CommandType.MOD)
- .forEach(cmd -> embedBuilder.addField(prefix, cmd.getCommandAnnotation().description(), false));
+ .forEach(cmd -> embedBuilder.addField(prefix + cmd.getCommandAnnotation().mainCommand(), cmd.getCommandAnnotation().description(), false));
message.editMessage(embedBuilder.build()).queue();
break;
case "\u0033\u20E3": // three emoji
@@ -66,14 +68,14 @@ public class HelpReaction implements React {
" **Music Commands Help**" +
"\n" +
"Click a number below for information about other commands.";
- embedBuilder.setTitle("Help", "http://rixa.io");
+ embedBuilder.setTitle(String.format("Help: %s", title));
embedBuilder.setDescription(stringBuilder);
embedBuilder.addField(prefix + "music join [name]", "Joins a voice channel that has the provided name", false)
.addField(prefix + "music join [id]", "Joins a voice channel based on the provided id.", false)
.addField(prefix + "music leave", "Leaves the voice channel that the bot is currently in.", false)
.addField(prefix + "music play", "Plays songs from the current queue. Starts playing again if it was previously paused", false)
.addField(prefix + "music play [url]", "Adds a new song to the queue and starts playing if it wasn't playing already", false)
- .addField(prefix + "music pplay", "Adds a playlist to the queue and starts playing if not already playing", false)
+ .addField(prefix + "music playlist", "Adds a playlist to the queue and starts playing if not already playing", false)
.addField(prefix + "music pause", "Pauses audio playback", false)
.addField(prefix + "music stop", "Completely stops audio playback, skipping the current song.", false)
.addField(prefix + "music skip", "Skips the current song, automatically starting the next", false)
diff --git a/src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java b/src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java
new file mode 100644
index 0000000..c391760
--- /dev/null
+++ b/src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java
@@ -0,0 +1,80 @@
+package me.savvy.rixa.modules.twitter;
+
+import me.savvy.rixa.guild.RixaGuild;
+import twitter4j.*;
+import twitter4j.conf.ConfigurationBuilder;
+
+/**
+ * Created by savit on 7/9/2017.
+ */
+public class TwitterModule {
+
+ private final TwitterStream twitterStream;
+ private ConfigurationBuilder configurationBuilder;
+ private Twitter twitter;
+ private TwitterFactory twitterFactory;
+ private String consumerKey, consumerSecret, accessToken, accessTokenSecret;
+
+ public TwitterModule(RixaGuild rixaGuild, String consumerKey, String consumerSecret, String accessToken, String accessTokenSecret) {
+ this.consumerKey = consumerKey;
+ this.consumerSecret = consumerSecret;
+ this.accessToken = accessToken;
+ this.accessTokenSecret = accessTokenSecret;
+ configurationBuilder = new ConfigurationBuilder()
+ .setOAuthConsumerKey(getConsumerKey())
+ .setOAuthConsumerSecret(getConsumerSecret())
+ .setOAuthAccessToken(getAccessToken())
+ .setOAuthAccessTokenSecret(getAccessTokenSecret());
+ twitterFactory = new TwitterFactory(configurationBuilder.build());
+ twitterStream = new TwitterStreamFactory().getInstance();
+ twitter = twitterFactory.getInstance();
+ }
+
+ public ConfigurationBuilder getConfigurationBuilder() {
+ return configurationBuilder;
+ }
+
+ public TwitterFactory getTwitterFactory() {
+ return twitterFactory;
+ }
+
+ public Twitter getTwitter() {
+ return twitter;
+ }
+
+ public String getConsumerKey() {
+ return consumerKey;
+ }
+
+ public void setConsumerKey(String consumerKey) {
+ this.consumerKey = consumerKey;
+ }
+
+ public String getConsumerSecret() {
+ return consumerSecret;
+ }
+
+ public void setConsumerSecret(String consumerSecret) {
+ this.consumerSecret = consumerSecret;
+ }
+
+ public String getAccessToken() {
+ return accessToken;
+ }
+
+ public void setAccessToken(String accessToken) {
+ this.accessToken = accessToken;
+ }
+
+ public String getAccessTokenSecret() {
+ return accessTokenSecret;
+ }
+
+ public void setAccessTokenSecret(String accessTokenSecret) {
+ this.accessTokenSecret = accessTokenSecret;
+ }
+
+ public TwitterStream getTwitterStream() {
+ return twitterStream;
+ }
+}
diff --git a/src/main/java/me/savvy/rixa/utils/MessageBuilder.java b/src/main/java/me/savvy/rixa/utils/MessageBuilder.java
index 3cd8703..0ffbb75 100644
--- a/src/main/java/me/savvy/rixa/utils/MessageBuilder.java
+++ b/src/main/java/me/savvy/rixa/utils/MessageBuilder.java
@@ -23,7 +23,7 @@ public class MessageBuilder {
}
public MessageBuilder setTitle(String title) {
- setTitle(title, "http://rixa.io/");
+ builder.setTitle(title);
return this;
}
@@ -37,6 +37,11 @@ public class MessageBuilder {
return this;
}
+ public MessageBuilder addThumbnail(String url) {
+ builder.setThumbnail(url);
+ return this;
+ }
+
public EmbedBuilder getBuilder() {
return builder;
}
diff --git a/src/main/java/me/savvy/rixa/utils/UrbanDictionary.java b/src/main/java/me/savvy/rixa/utils/UrbanDictionary.java
new file mode 100644
index 0000000..e11f88e
--- /dev/null
+++ b/src/main/java/me/savvy/rixa/utils/UrbanDictionary.java
@@ -0,0 +1,57 @@
+package me.savvy.rixa.utils;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Scanner;
+
+/**
+ * Created by savit on 6/24/2017.
+ */
+public class UrbanDictionary {
+
+ private String wordToSearch;
+ private String definition;
+ private String permaLink;
+ public UrbanDictionary(String wordToSearch) {
+ this.wordToSearch = wordToSearch;
+ }
+
+ public boolean search() throws IOException {
+ URL url = new URL("http://api.urbandictionary.com/v0/define?term=" + wordToSearch);
+ InputStream in = url.openStream();
+ Scanner scan = new Scanner(in);
+ String jsonString = "";
+ while(scan.hasNext()){
+ jsonString += scan.next() + " ";
+ }
+ scan.close();
+ try {
+ JSONObject obj = new JSONObject(jsonString.trim());
+ JSONArray array = obj.getJSONArray("list");
+ JSONObject newObj = array.getJSONObject(0);
+ this.wordToSearch = newObj.getString("word");
+ this.permaLink = newObj.getString("permalink");
+ this.definition = newObj.getString("definition");
+ return true;
+ } catch(JSONException ex) {
+ return false;
+ }
+ }
+
+ public String getPermaLink() {
+ return permaLink;
+ }
+
+ public String getWordToSearch() {
+ return wordToSearch;
+ }
+
+ public String getDefinition() {
+ return definition;
+ }
+}
diff --git a/src/main/java/me/savvy/rixa/utils/YoutubeSearch.java b/src/main/java/me/savvy/rixa/utils/YoutubeSearch.java
new file mode 100644
index 0000000..8af2cf0
--- /dev/null
+++ b/src/main/java/me/savvy/rixa/utils/YoutubeSearch.java
@@ -0,0 +1,7 @@
+package me.savvy.rixa.utils;
+
+/**
+ * Created by savit on 7/11/2017.
+ */
+public class YoutubeSearch {
+}