package modules;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Scanner;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import bot.Config;
import bot.Message;
import bot.Module;
import bot.Server;
public class GitHub implements Module{
public void parse(Message m){
String target = m.param();
if(!m.param().startsWith("#")) target = m.sender();
if(m.botCommand().equals("gh") || m.botCommand().equals("github")){
if(m.hasBotParams()){
try {
URL url = new URL("https://api.github.com/users/" + m.botParamsArray()[0]);
InputStream in = url.openStream();
Scanner scan = new Scanner(in);
String jsonstring = "";
while(scan.hasNext()){
jsonstring += scan.next() + " ";
}
scan.close();
Gson gson = new GsonBuilder().create();
JsonObject json = gson.fromJson(jsonstring, JsonElement.class).getAsJsonObject();
if(json.has("message")){
Server.say(target, "Could not find user: " + m.botParamsArray()[0]);
return;
}
String login = json.get("login").getAsString();
String htmlUrl = json.get("html_url").getAsString();
String name = json.get("name").getAsString();
name = "Real Name : " + name + " | ";
int followers = json.get("followers").getAsInt();
int following = json.get("following").getAsInt();
int repos = json.get("public_repos").getAsInt();
String tosay = String.format("Github for %s: %s%d followers | Following %d users | %d repos (%s)", login, name, followers, following, repos, htmlUrl);
Server.say(target, tosay);
} catch (IOException e) {
e.printStackTrace();
}
}
}
if(m.botCommand().equals("repos")){
if(!m.hasBotParams())return;
try {
URL url = new URL("https://api.github.com/users/" + m.botParamsArray()[0] + "/repos");
InputStream in = url.openStream();
Scanner scan = new Scanner(in);
String jsonstring = "";
while(scan.hasNext()){
jsonstring += scan.next() + " ";
}
scan.close();
Gson gson = new GsonBuilder().create();
JsonArray repos;
try{
repos = gson.fromJson(jsonstring, JsonElement.class).getAsJsonArray();
}
catch(Exception e){
Server.say(target, "Could not find user: " + m.botParamsArray()[0]);
return;
}
String tosay = "Repos for " + m.botParamsArray()[0] + ": ";
for(int i = 0; i < repos.size(); i++){
JsonObject repo = repos.get(i).getAsJsonObject();
String name = repo.get("name").getAsString();
JsonElement e = repo.get("language");
String language;
if(e.isJsonNull())language = "none";
else language = repo.get("language").getAsString();
String toappend = "2" + name + ", " + language + " | " ;
tosay += toappend;
}
tosay = tosay.substring(0, tosay.length()-2);
Server.say(target, tosay);
} catch (IOException e) {
Server.say(target, "Could not find user: " + m.botParamsArray()[0]);
return;
}
}
if(m.botCommand().equals("repo")){
if(m.botParamsArray().length > 1 || m.botParamsArray()[0].contains("/")){
try {
String user;
String repo;
if(m.botParamsArray()[0].contains("/")){
user = m.botParamsArray()[0].split("/")[0];
repo = m.botParamsArray()[0].split("/")[1];
}
else{
user = m.botParamsArray()[0];
repo = m.botParamsArray()[1];
}
URL url = new URL("https://api.github.com/repos/" + user + "/" + repo);
InputStream in = url.openStream();
Scanner scan = new Scanner(in);
String jsonstring = "";
while(scan.hasNext()){
jsonstring += scan.next() + " ";
}
scan.close();
Gson gson = new GsonBuilder().create();
JsonObject json = gson.fromJson(jsonstring, JsonElement.class).getAsJsonObject();
String name = json.get("name").getAsString();
String fullName = json.get("full_name").getAsString();
String htmlUrl = json.get("html_url").getAsString();
String fork = "";
if(json.get("fork").getAsBoolean()){
JsonObject parent = json.get("parent").getAsJsonObject();
fork = "Fork of " + parent.get("full_name").getAsString() + " | ";
}
int watchers = json.get("subscribers_count").getAsInt();
int stars = json.get("stargazers_count").getAsInt();
int forks = json.get("forks_count").getAsInt();
String language = json.get("language").getAsString();
String tosay = String.format("%s: %sLanguage: %s | Watchers: %d Stars: %d Forks: %d (%s)", fullName, fork, language, watchers, stars, forks, htmlUrl );
Server.say(target, tosay);
}catch (IOException e) {
Server.say(target, "Could not find repo");
return;
}
}
}
}
}