package org.mcupdater.ravenbot.features;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.services.youtube.YouTube;
import com.google.api.services.youtube.model.SearchListResponse;
import com.google.api.services.youtube.model.SearchResult;
import com.google.api.services.youtube.model.Video;
import com.google.api.services.youtube.model.VideoListResponse;
import org.apache.commons.lang3.StringUtils;
import org.mcupdater.ravenbot.AbstractListener;
import org.mcupdater.ravenbot.SettingsManager;
import org.pircbotx.Colors;
import org.pircbotx.PircBotX;
import org.pircbotx.hooks.events.MessageEvent;
import java.io.IOException;
import java.util.List;
public class YouTubeHandler extends AbstractListener
{
private static YouTube youtube;
public YouTubeHandler() {
if (youtube == null) {
youtube = new YouTube.Builder(YTAuth.HTTP_TRANSPORT, YTAuth.JSON_FACTORY, new HttpRequestInitializer()
{
@Override
public void initialize(HttpRequest request) throws IOException {
}
}).setApplicationName("ravenbot").build();
}
}
@Override
protected void initCommands() {
}
@Override
public void handleCommand(String sender, MessageEvent event, String command, String[] args) {
if (command.equals(".youtube") || command.equals(".yt")) {
// Perform search
String query = StringUtils.join(args, " ");
try {
YouTube.Search.List search = youtube.search().list("id,snippet");
search.setKey(SettingsManager.getInstance().getSettings().getYoutubeKey());
search.setQ(query);
search.setMaxResults(1L);
search.setType("video");
SearchListResponse searchListResponse = search.execute();
List<SearchResult> searchResults = searchListResponse.getItems();
if (searchResults != null) {
SearchResult firstResult = searchResults.get(0);
event.getBot().sendIRC().message(event.getChannel().getName(), formatSearchResult(firstResult));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void onMessage(final MessageEvent event) {
super.onMessage(event);
PircBotX bot = event.getBot();
String[] splitMessage = event.getMessage().split(" ");
for (String aSplitMessage : splitMessage) {
if (aSplitMessage.contains("youtube.com") && aSplitMessage.contains("v=")) {
int index = aSplitMessage.lastIndexOf("v=") + 2;
String videoId = (aSplitMessage.indexOf("&",index) > -1 ? aSplitMessage.substring(index, aSplitMessage.indexOf("&",index)) : aSplitMessage.substring(index));
System.out.println(videoId);
try {
YouTube.Videos.List videos = youtube.videos().list("id,snippet,contentDetails");
videos.setKey(SettingsManager.getInstance().getSettings().getYoutubeKey());
videos.setId(videoId);
VideoListResponse videoListResponse = videos.execute();
List<Video> videoList = videoListResponse.getItems();
if (videoList != null) {
Video firstResult = videoList.get(0);
bot.sendIRC().message(event.getChannel().getName(), formatResult(firstResult));
} else {
bot.sendIRC().message(event.getChannel().getName(), "Could not find information about that video");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
private String formatSearchResult(SearchResult result) {
StringBuilder response = new StringBuilder();
response.append(Colors.BOLD).append("Title: ").append(Colors.NORMAL).append(result.getSnippet().getTitle()).append(" ");
response.append(Colors.BOLD).append("Channel: ").append(Colors.NORMAL).append(result.getSnippet().getChannelTitle()).append(" ");
response.append(Colors.BOLD).append("URL: ").append(Colors.NORMAL).append("https://www.youtube.com/watch?v=").append(result.getId().getVideoId());
return response.toString();
}
private String formatResult(Video result) {
StringBuilder response = new StringBuilder();
response.append(Colors.BOLD).append("Title: ").append(Colors.NORMAL).append(result.getSnippet().getTitle()).append(" ");
response.append(Colors.BOLD).append("Length: ").append(Colors.NORMAL).append(result.getContentDetails().getDuration().substring(2)).append(" ");
response.append(Colors.BOLD).append("Channel: ").append(Colors.NORMAL).append(result.getSnippet().getChannelTitle());
return response.toString();
}
}