package com.techcavern.wavetact.ircCommands.media;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.youtube.YouTube;
import com.google.api.services.youtube.model.SearchResult;
import com.techcavern.wavetact.annot.IRCCMD;
import com.techcavern.wavetact.objects.IRCCommand;
import com.techcavern.wavetact.utils.DatabaseUtils;
import com.techcavern.wavetact.utils.GeneralUtils;
import com.techcavern.wavetact.utils.IRCUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.pircbotx.Channel;
import org.pircbotx.PircBotX;
import org.pircbotx.User;
import java.util.List;
import static com.techcavern.wavetactdb.Tables.CONFIG;
@IRCCMD
public class Video extends IRCCommand {
public Video() {
super(GeneralUtils.toArray("video vid v youtube yt"), 1, "video (result #) [query for]", "Searches youtube for videos", false);
}
@Override
public void onCommand(String command, User user, PircBotX network, String prefix, Channel channel, boolean isPrivate, int userPermLevel, String... args) throws Exception {
String googleapikey;
if (DatabaseUtils.getConfig("googleapikey") != null)
googleapikey = DatabaseUtils.getConfig("googleapikey").getValue(CONFIG.VALUE);
else {
IRCUtils.sendError(user, network, channel, "Google api key is null - contact bot controller to fix", prefix);
return;
}
int ArrayIndex = 1;
if (GeneralUtils.isInteger(args[0])) {
ArrayIndex = Integer.parseInt(args[0]);
args = ArrayUtils.remove(args, 0);
}
YouTube yt = new YouTube.Builder(new NetHttpTransport(), new JacksonFactory(), request -> {
}).setApplicationName("youtubesearch").build();
YouTube.Search.List search = yt.search().list("id,snippet");
search.setKey(googleapikey);
search.setQ(StringUtils.join(args, " "));
search.setMaxResults(Integer.toUnsignedLong(ArrayIndex));
List<SearchResult> results = search.execute().getItems();
if (results.size() > 0) {
if (results.size() >= ArrayIndex) {
SearchResult result = results.get(ArrayIndex - 1);
String url = "";
if (result.getId().getKind().equalsIgnoreCase("youtube#video")) {
url = "http://youtube.com/watch?v=" + result.getId().getVideoId();
} else if (result.getId().getKind().equalsIgnoreCase("youtube#channel")) {
url = "http://youtube.com/" + result.getSnippet().getChannelTitle();
}
String title = result.getSnippet().getTitle();
String content = result.getSnippet().getDescription();
if (!url.isEmpty())
IRCUtils.sendMessage(user, network, channel, title + " - " + content + " - " + GeneralUtils.shortenURL(url), prefix);
else
IRCUtils.sendMessage(user, network, channel, title + " - " + content, prefix);
} else {
IRCUtils.sendError(user, network, channel, "Search #" + ArrayIndex + " does not exist", prefix);
}
} else {
IRCUtils.sendError(user, network, channel, "Search returned no results", prefix);
}
}
}