/*
* This file is part of Alphabot.
*
* Alphabot is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.zack6849.alphabot.api;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.apache.commons.lang3.StringEscapeUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.pircbotx.Channel;
import org.pircbotx.Colors;
import org.pircbotx.User;
import org.pircbotx.UserLevel;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Utils {
static String USER_AGENT = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17";
public static boolean isUrl(String s) {
String url_regex = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
Pattern p = Pattern.compile(url_regex);
Matcher m = p.matcher(s);
return m.find();
}
public static int getRank(Channel chan, User user) {
ArrayList<Integer> levels = new ArrayList<>();
int highest = -1;
for (UserLevel level : user.getUserLevels(chan)) {
levels.add(level.ordinal());
}
for (int level : levels) {
if (highest < level) {
highest = level;
}
}
return highest;
}
public static String munge(String word) {
return word.replace("a", "\u00E0").replace("A", "\u00C0").replace("E", "\u00C8").replace("e", "\u00EB").replace("i", "\u00EF").replace("I", "\u00cf").replace("o", "\u00f8").replace("O", "\u0150").replace("u", "\u00FC").replace("U", "\u01D9").replace("y", "\u0177").replace("Y", "\u0178");
}
public static String getTitle(String link) {
String response = "";
try {
HttpURLConnection conn = (HttpURLConnection) new URL(link).openConnection();
conn.addRequestProperty("User-Agent", USER_AGENT);
String type = conn.getContentType();
int length = conn.getContentLength() / 1024;
response = String.format("HTTP %s: %s", conn.getResponseCode(), conn.getResponseMessage());
String info;
if (type.contains("text") || type.contains("application")) {
Document doc = Jsoup.connect(link).userAgent(USER_AGENT).followRedirects(true).get();
String title = doc.title() == null || doc.title().isEmpty() ? "No title found!" : doc.title();
info = String.format("%s - (Content Type: %s Size: %skb)", title, type, length);
return info;
}
info = String.format("Content Type: %s Size: %skb", type, length);
return info;
} catch (IOException ex) {
if (ex.getMessage().contains("UnknownHostException")) {
return Colors.RED + "Unknown hostname!";
}
return response.isEmpty() ? Colors.RED + "An error occured" : response;
}
}
public static String checkMojangServers() {
String returns = null;
try {
URL url;
url = new URL("http://status.mojang.com/check");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String result;
while ((result = reader.readLine()) != null) {
String a = result.replace("red", Colors.RED + "Offline" + Colors.NORMAL).replace("green", Colors.GREEN + "Online" + Colors.NORMAL).replace("[", "").replace("]", "");
returns = a.replace("{", "").replace("}", "").replace(":", " is currently ").replace("\"", "").replaceAll(",", ", ");
}
reader.close();
} catch (IOException e) {
if (e.getMessage().contains("503")) {
returns = "The minecraft status server is temporarily unavailable, please try again later";
}
if (e.getMessage().contains("404")) {
returns = "Uhoh, it would appear as if the status page has been removed or relocated >_>";
}
}
return returns;
}
public static String shortenUrl(String longUrl) {
String shortened = null;
try {
URL url;
url = new URL("http://is.gd/create.php?format=simple&url=" + longUrl);
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(url.openStream()));
shortened = bufferedreader.readLine();
bufferedreader.close();
} catch (Exception e) {
e.printStackTrace();
}
return shortened;
}
public static String checkServerStatus(InetAddress i, int port) {
String returns = "Error.";
try {
//wow...i never actually used the port argument?
Socket s = new Socket(i, port);
DataInputStream SS_BF = new DataInputStream(s.getInputStream());
DataOutputStream d = new DataOutputStream(s.getOutputStream());
d.write(new byte[]
{
(byte) 0xFE, (byte) 0x01
});
SS_BF.readByte();
short length = SS_BF.readShort();
StringBuilder sb = new StringBuilder();
for (int in = 0; in < length; in++) {
char ch = SS_BF.readChar();
sb.append(ch);
}
String all = sb.toString().trim();
System.out.println(all);
String[] args1 = all.split("\u0000");
if (args1[3].contains("§")) {
returns = "MOTD: " + args1[3].replaceAll("§[a-m]", "").replaceAll("§[1234567890]", "") + " players: [" + args1[4] + "/" + args1[5] + "]";
} else {
returns = "MOTD: " + args1[3] + " players: [" + args1[4] + "/" + args1[5] + "]";
}
} catch (UnknownHostException e1) {
returns = "the host you specified is unknown. check your settings.";
} catch (IOException e1) {
returns = "sorry, we couldn't reach this server, make sure that the server is up and has query enabled.";
}
return returns;
}
public static String google(String s) {
try {
String temp = String.format("https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=%s", URLEncoder.encode(s, "UTF-8"));
URL u = new URL(temp);
URLConnection c = u.openConnection();
c.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17");
BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
String json = "";
String tmp;
while ((tmp = in.readLine()) != null) {
json += tmp + "\n";
}
in.close();
JsonElement jelement = new JsonParser().parse(json);
JsonObject output = jelement.getAsJsonObject();
output = output.getAsJsonObject("responseData").getAsJsonArray("results").get(0).getAsJsonObject();
String title = StringEscapeUtils.unescapeJava(StringEscapeUtils.unescapeHtml4(output.get("titleNoFormatting").toString().replaceAll("\"", "")));
String content = StringEscapeUtils.unescapeJava(StringEscapeUtils.unescapeHtml4(output.get("content").toString().replaceAll("\\s+", " ").replaceAll("\\<.*?>", "").replaceAll("\"", "")));
String url = StringEscapeUtils.unescapeJava(output.get("url").toString().replaceAll("\"", ""));
String result = String.format("Google: %s | %s | (%s)", title, content, url);
if (result != null) {
return result;
} else {
return "No results found for query " + s;
}
} catch (IOException ex) {
Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
}