diff --git a/.gradle/2.13/taskArtifacts/cache.properties.lock b/.gradle/2.13/taskArtifacts/cache.properties.lock
index fd54d85..1b6b67d 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 276a456..9ce369e 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 2845386..91807a2 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 da67c1a..5a97c6e 100644
Binary files a/.gradle/2.13/taskArtifacts/taskArtifacts.bin and b/.gradle/2.13/taskArtifacts/taskArtifacts.bin differ
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 4ce36d1..a5d883a 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -45,7 +45,32 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -716,7 +835,7 @@
-
+
@@ -1072,17 +1191,18 @@
+
-
+
-
+
-
+
@@ -1151,24 +1271,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1331,13 +1434,6 @@
-
-
-
-
-
-
-
@@ -1352,13 +1448,6 @@
-
-
-
-
-
-
-
@@ -1401,13 +1490,6 @@
-
-
-
-
-
-
-
@@ -1422,28 +1504,20 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
@@ -1452,26 +1526,120 @@
-
+
-
-
-
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/me/savvy/rixa/Rixa.java b/src/main/java/me/savvy/rixa/Rixa.java
index 45cc03e..3a8ab1f 100644
--- a/src/main/java/me/savvy/rixa/Rixa.java
+++ b/src/main/java/me/savvy/rixa/Rixa.java
@@ -2,6 +2,7 @@ package me.savvy.rixa;
import me.savvy.rixa.commands.admin.BatchMoveCommand;
import me.savvy.rixa.commands.admin.ConfigCommand;
+import me.savvy.rixa.commands.admin.InviteCommand;
import me.savvy.rixa.commands.general.*;
import me.savvy.rixa.commands.handlers.CommandExec;
import me.savvy.rixa.commands.handlers.CommandHandler;
@@ -88,7 +89,7 @@ public class Rixa {
new InfoCommand(), new ServerInfoCommand(), new HelpCommand(),
new DeleteMessagesCommand(), new PingCommand(), new PurgeMessagesCommand(),
new BatchMoveCommand(), new MuteCommand(), new MusicCommand(),
- new ConfigCommand(), new UrbanDictionaryCommand(), /*new InviteCommand()*/});
+ new ConfigCommand(), new UrbanDictionaryCommand(), new YoutubeCommand()});
register(new React[] {new HelpReaction(), new ConfigReaction()});
data = new Data(DataType.SQL);
}
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 009b86d..fce031c 100644
--- a/src/main/java/me/savvy/rixa/commands/admin/ConfigCommand.java
+++ b/src/main/java/me/savvy/rixa/commands/admin/ConfigCommand.java
@@ -33,6 +33,13 @@ public class ConfigCommand implements CommandExec {
"%pconfig set defaultRole ; Set role to be assigned when a user joins the server!",
"%pconfig set muteRole ; Set role to be assigned when a user is muted!",
"%pconfig set musicRole ; Set role required to use the music functions! (Not required)",
+
+ "%pconfig set twitterCKey ; Set Twitter Consumer Key!",
+ "%pconfig set twitterCSecret ; Set Twitter Consumer Secret!",
+ "%pconfig set twitterAToken ; Set Twitter Access Key!",
+ "%pconfig set twitterASecret ; Set Twitter Access Secret!",
+ "%config set twitterChannel ; Set the channel for Twitter feed updates!",
+
"%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!",
@@ -40,7 +47,8 @@ public class ConfigCommand implements CommandExec {
"%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!",
- "%pconfig disable ; Disable a Rixa Module!");
+ "%pconfig disable ; Disable a Rixa Module!"
+ );
}
@Override
@Command(mainCommand = "config",
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 a7f367a..526a2a7 100644
--- a/src/main/java/me/savvy/rixa/commands/general/MusicCommand.java
+++ b/src/main/java/me/savvy/rixa/commands/general/MusicCommand.java
@@ -24,12 +24,14 @@ import me.savvy.rixa.guild.RixaManager;
import me.savvy.rixa.modules.music.MusicManager;
import me.savvy.rixa.modules.music.TrackScheduler;
import me.savvy.rixa.utils.MessageBuilder;
+import me.savvy.rixa.utils.YoutubeSearch;
import net.dv8tion.jda.core.Permission;
import net.dv8tion.jda.core.entities.*;
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.core.exceptions.PermissionException;
import java.awt.*;
+import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -125,7 +127,7 @@ public class MusicCommand implements CommandExec {
return;
}
new MessageBuilder("Track Name: " + player.getPlayingTrack().getInfo().title + "\n Track Link: " +
- player.getPlayingTrack().getInfo().uri).setColor(event.getMember().getColor()).queue(event.getChannel());
+ player.getPlayingTrack().getInfo().uri).setColor(event.getMember().getColor()).queue(event.getChannel());
} else if(message[1].equalsIgnoreCase("pause")) {
if (player.getPlayingTrack() == null) {
new MessageBuilder("There is no track currently playing.").setColor(event.getMember().getColor()).queue(event.getChannel());
@@ -134,9 +136,9 @@ public class MusicCommand implements CommandExec {
player.setPaused(!player.isPaused());
if (player.isPaused()) {
new MessageBuilder("The music player has been paused.").setColor(event.getMember().getColor()).queue(event.getChannel());
- } else {
+ } else {
new MessageBuilder("There music player has resumed playing.").setColor(event.getMember().getColor()).queue(event.getChannel());
- }
+ }
} else if(message[1].equalsIgnoreCase("stop")) {
scheduler.queue.clear();
player.stopTrack();
@@ -249,6 +251,18 @@ public class MusicCommand implements CommandExec {
new MessageBuilder(message[2] + " is not a valid integer. Try a number between 10 and 100.").setColor(event.getMember().getColor()).queue(event.getChannel());
}
}
+ } // music youtube = 3) {
+ if(message[1].equalsIgnoreCase("youtube") || message[1].equalsIgnoreCase("yt") || message[1].equalsIgnoreCase("search")
+ || message[1].equalsIgnoreCase("ytsearch")) {
+ String search = getMessage(message, 2);
+ try {
+ YoutubeSearch ytSearch = new YoutubeSearch(search);
+ loadAndPlay(mng, event.getChannel(), ytSearch.getUrl(0), false);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
}
}
@@ -323,4 +337,12 @@ public class MusicCommand implements CommandExec {
private void sendHelp() {
}
+
+ 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/general/UrbanDictionaryCommand.java b/src/main/java/me/savvy/rixa/commands/general/UrbanDictionaryCommand.java
index cd9d69e..9e974fe 100644
--- a/src/main/java/me/savvy/rixa/commands/general/UrbanDictionaryCommand.java
+++ b/src/main/java/me/savvy/rixa/commands/general/UrbanDictionaryCommand.java
@@ -16,7 +16,6 @@ import java.net.URLEncoder;
*/
public class UrbanDictionaryCommand implements CommandExec {
-
@Override
@Command(mainCommand = "urbandictionary",
aliases = {"ud"},
diff --git a/src/main/java/me/savvy/rixa/commands/general/YoutubeCommand.java b/src/main/java/me/savvy/rixa/commands/general/YoutubeCommand.java
new file mode 100644
index 0000000..95c215b
--- /dev/null
+++ b/src/main/java/me/savvy/rixa/commands/general/YoutubeCommand.java
@@ -0,0 +1,41 @@
+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.YoutubeSearch;
+import net.dv8tion.jda.core.entities.ChannelType;
+import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
+
+import java.io.IOException;
+
+/**
+ * Created by savit on 7/11/2017.
+ */
+public class YoutubeCommand implements CommandExec {
+
+ @Override
+ @Command(mainCommand = "youtube",
+ aliases = {"yt"},
+ description = "Search youtube for music videos!",
+ channelType = ChannelType.TEXT)
+ public void execute(GuildMessageReceivedEvent event) {
+ String[] message = event.getMessage().getContent().split(" ");
+ String search = getMessage(message, 1);
+ try {
+ YoutubeSearch ytSearch = new YoutubeSearch(search);
+ new MessageBuilder(ytSearch.getUrl(0))
+ .setColor(event.getMember().getColor()).queue(event.getChannel());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ 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/events/MessageEvent.java b/src/main/java/me/savvy/rixa/events/MessageEvent.java
index dfbfeb1..349e762 100644
--- a/src/main/java/me/savvy/rixa/events/MessageEvent.java
+++ b/src/main/java/me/savvy/rixa/events/MessageEvent.java
@@ -44,7 +44,6 @@ 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();
diff --git a/src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java b/src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java
index c391760..11847a0 100644
--- a/src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java
+++ b/src/main/java/me/savvy/rixa/modules/twitter/TwitterModule.java
@@ -13,9 +13,14 @@ public class TwitterModule {
private ConfigurationBuilder configurationBuilder;
private Twitter twitter;
private TwitterFactory twitterFactory;
- private String consumerKey, consumerSecret, accessToken, accessTokenSecret;
+ private final RixaGuild rixaGuild;
+ private String consumerKey;
+ private String consumerSecret;
+ private String accessToken;
+ private String accessTokenSecret;
public TwitterModule(RixaGuild rixaGuild, String consumerKey, String consumerSecret, String accessToken, String accessTokenSecret) {
+ this.rixaGuild = rixaGuild;
this.consumerKey = consumerKey;
this.consumerSecret = consumerSecret;
this.accessToken = accessToken;
@@ -77,4 +82,8 @@ public class TwitterModule {
public TwitterStream getTwitterStream() {
return twitterStream;
}
+
+ public RixaGuild getRixaGuild() {
+ return rixaGuild;
+ }
}
diff --git a/src/main/java/me/savvy/rixa/utils/WebUtil.java b/src/main/java/me/savvy/rixa/utils/WebUtil.java
new file mode 100644
index 0000000..421e862
--- /dev/null
+++ b/src/main/java/me/savvy/rixa/utils/WebUtil.java
@@ -0,0 +1,42 @@
+package me.savvy.rixa.utils;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+/**
+ * Created by savit on 7/11/2017.
+ */
+public class WebUtil {
+
+ public static String getWebPage(String url) throws IOException {
+ URL searchURL = new URL(url);
+ HttpURLConnection conn = (HttpURLConnection) searchURL.openConnection();
+ return getWebPage(conn);
+ }
+
+ public static String getWebPage(HttpURLConnection conn) throws IOException {
+ StringBuilder sb = new StringBuilder();
+ conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");
+ conn.setRequestProperty("Referer", "http://www.google.com");
+
+ int response = conn.getResponseCode();
+ if (response == 403) {
+ System.out.println("Quota Exceeded");
+ }
+ else if (response != 200) {
+ System.out.println("DEBUG: Response code: " + response);
+ }
+
+ BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+ String line;
+ while ((line = in.readLine()) != null) {
+ sb.append(line).append("\n");
+ }
+ in.close();
+
+ return sb.toString();
+ }
+}
diff --git a/src/main/java/me/savvy/rixa/utils/YoutubeSearch.java b/src/main/java/me/savvy/rixa/utils/YoutubeSearch.java
index 8af2cf0..0d0b057 100644
--- a/src/main/java/me/savvy/rixa/utils/YoutubeSearch.java
+++ b/src/main/java/me/savvy/rixa/utils/YoutubeSearch.java
@@ -1,7 +1,101 @@
package me.savvy.rixa.utils;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
/**
* Created by savit on 7/11/2017.
*/
public class YoutubeSearch {
-}
+
+ private static final String API_KEY;
+ private JSONArray items;
+ private final String YOUTUBE_WATCH_BASE_URL = "https://www.youtube.com/watch?v=";
+
+ static {
+ API_KEY = "AIzaSyD1wjRGbzKgvjqAU25pREy1dVio9WpcuS0";
+ }
+
+ public YoutubeSearch(String query) throws IOException {
+ try {
+ String url = "https://www.googleapis.com/youtube/v3/search?"
+ + "q=" + URLEncoder.encode(query, "UTF-8")
+ + "&part=id%2Csnippet"
+ + "&safeSearch=none"
+ + "&key=" + API_KEY;
+ search(url);
+ }
+ catch (UnsupportedEncodingException ignored) {}
+ }
+
+
+ public String getKind(int index) {
+ return items.getJSONObject(index).getString("kind");
+ }
+
+ public String getIdKind(int index) {
+ return items.getJSONObject(index).getJSONObject("id").getString("kind");
+ }
+
+ public String getVideoId(int index) {
+ return items.getJSONObject(index).getJSONObject("id").getString("videoId");
+ }
+
+ public String getPublishedTime(int index) {
+ return items.getJSONObject(index).getJSONObject("snippet").getString("publishedAt");
+ }
+
+ public String getChannelId(int index) {
+ return items.getJSONObject(index).getJSONObject("snippet").getString("channelId");
+ }
+
+ public String getTitle(int index) {
+ return items.getJSONObject(index).getJSONObject("snippet").getString("title");
+ }
+
+ public String getDescription(int index) {
+ return items.getJSONObject(index).getJSONObject("snippet").getString("description");
+ }
+
+ public String getChannelTitle(int index) {
+ return items.getJSONObject(index).getJSONObject("snippet").getString("channelTitle");
+ }
+
+ public String getLiveBroadcastContent(int index) {
+ return items.getJSONObject(index).getJSONObject("snippet").getString("liveBroadcastContent");
+ }
+
+ public String getThumbnailDefaultUrl(int index) {
+ return items.getJSONObject(index).getJSONObject("snippet").getJSONObject("default").getString("url");
+ }
+
+ public String getThumbnailMediumUrl(int index) {
+ return items.getJSONObject(index).getJSONObject("snippet").getJSONObject("medium").getString("url");
+ }
+
+ public String getThumbnailHighUrl(int index) {
+ return items.getJSONObject(index).getJSONObject("snippet").getJSONObject("high").getString("url");
+ }
+
+ public String getUrl(int index) {
+ return YOUTUBE_WATCH_BASE_URL + getVideoId(index);
+ }
+
+ private void search(String url) throws IOException {
+ String json = WebUtil.getWebPage(url);
+
+ JSONObject obj = new JSONObject(json);
+ try {
+ items = obj.getJSONArray("items");
+ }
+ catch (JSONException e) {
+ System.out.println("No search results found.");// throw new NotFoundException("No results found.");
+ }
+ }
+
+}
\ No newline at end of file