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 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + @@ -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