rendered paste bodyimport org.apello.abot.*;
import java.io.*;
import java.net.*;
public class di3 extends PluginAdapter{
public di3(ABot ab){super(ab);}
public String getPluginName(){return "di3";}
public String getPluginDesc(){return ".";}
public void init(String args)throws Exception{
if(args.equals("") == true)
throw new Exception("Cookie value for \"rscdforums\" was not set (needed to check players online)");
else
cookieValue = args;
File f1 = new File(System.getProperty("user.dir") + "/admins.di3");
if(f1.exists() == false)
throw new Exception(System.getProperty("user.dir") + "/admins.di3 doesn't exist");
File f2 = new File(System.getProperty("user.dir") + "/ignores.di3");
if(f2.exists() == false)
throw new Exception(System.getProperty("user.dir") + "/ignores.di3 doesn't exist");
}
public void process(){}
public void dispose(){}
public void run(){}
public long iStart = System.currentTimeMillis();//ignore
public long start = System.currentTimeMillis();//normal
public long spamDelaySec = 10;
public boolean getStats = true;
public boolean oracle = false;
public boolean notice = false;
public boolean google = false;
public String cookieValue = "";
public String channelAllowed = "#rscdaemon";
public void processCommand(String replyMethod, String nick, String ident, String host, String msg){
}
public void onChatMessage(String channel, String senderNick, String senderIdent, String senderHost, String msg) {
if(channel.equalsIgnoreCase(channelAllowed) == false)
return;
String host = senderIdent + "@" + senderHost;
//System.out.println(host);
if(msg.startsWith(getNick() + ", ") || msg.startsWith(getNick() + ": ") || msg.startsWith(getNick() + " ")) {
if(msg.startsWith(getNick() + " "))
msg = msg.replaceAll(getNick() + " ", "");
else
msg = msg.replaceAll(getNick(), "").substring(2);
if(isIgnored(host)) {
if(getTimeElapsed(iStart, 0) < (20 * 1000))//20sec
return;
iStart = System.currentTimeMillis();
sendNotice(senderNick, "You are ignored at the moment");
return;
}
if(isAdmin(senderNick, host) == false) {
if(getTimeElapsed(start, 0) < (spamDelaySec * 1000)) {
sendNotice(senderNick, "Command not processed due to spam throttling");
return;
}
start = System.currentTimeMillis();
if(oracle == false) {
sendNotice(senderNick, "Oracle is disabled at the moment");
return;
}
}
doMessage(senderNick, channel, askOracle(msg));
}
if(msg.startsWith("!") == true) {
msg = msg.substring(1);
if(isIgnored(host)) {
if(getTimeElapsed(iStart, 0) < (spamDelaySec * 1000)) {
return;
}
iStart = System.currentTimeMillis();
sendNotice(senderNick, "You are ignored at the moment");
return;
}
if(isAdmin(senderNick, host) == false) {
if(getTimeElapsed(start, 0) < (spamDelaySec * 1000)) {
sendNotice(senderNick, "Command not processed due to spam throttling");
return;
}
start = System.currentTimeMillis();
}
String nick = senderNick;
String from = channel;
if(getStats == true || isAdmin(senderNick, host)) {
if(msg.startsWith("owner ")) {
doMessage(nick, from, owner(msg.substring(6), true));
}
else if(msg.startsWith("status ")) {
doMessage(nick, from, owner(msg.substring(7), false));
}
else if(msg.startsWith("combat ")) {
doMessage(nick, from, charInfo(msg.substring(7), "combat"));
}
else if(msg.startsWith("ranged ")) {
doMessage(nick, from, charInfo(msg.substring(7), "ranged"));
}
else if(msg.startsWith("prayer ")) {
doMessage(nick, from, charInfo(msg.substring(7), "prayer"));
}
else if(msg.startsWith("magic ")) {
doMessage(nick, from, charInfo(msg.substring(6), "magic"));
}
else if(msg.startsWith("cooking ")) {
doMessage(nick, from, charInfo(msg.substring(8), "cooking"));
}
else if(msg.startsWith("woodcut ")) {
doMessage(nick, from, charInfo(msg.substring(8), "woodcut"));
}
else if(msg.startsWith("fletching ")) {
doMessage(nick, from, charInfo(msg.substring(10), "fletching"));
}
else if(msg.startsWith("fishing ")) {
doMessage(nick, from, charInfo(msg.substring(8), "fishing"));
}
else if(msg.startsWith("firemaking ")) {
doMessage(nick, from, charInfo(msg.substring(11), "firemaking"));
}
else if(msg.startsWith("crafting ")) {
doMessage(nick, from, charInfo(msg.substring(9), "crafting"));
}
else if(msg.startsWith("smithing ")) {
doMessage(nick, from, charInfo(msg.substring(9), "smithing"));
}
else if(msg.startsWith("mining ")) {
doMessage(nick, from, charInfo(msg.substring(7), "mining"));
}
else if(msg.startsWith("herblaw ")) {
doMessage(nick, from, charInfo(msg.substring(8), "herblaw"));
}
else if(msg.startsWith("agility ")) {
doMessage(nick, from, charInfo(msg.substring(8), "agility"));
}
else if(msg.startsWith("thieving ")) {
doMessage(nick, from, charInfo(msg.substring(9), "thieving"));
}
else if(msg.startsWith("kpd ")) {
doMessage(nick, from, charInfo(msg.substring(4), "kpd"));
}
else if(msg.startsWith("stats ")) {
String[] array = charInfo(msg.substring(6), "stats").split("\n");
for(int x = 0; x < array.length; x++) {
if(contains(array[x], "null") == true) {
doMessage(nick, from, nick + ": No such player");
break;
}
doMessage(nick, nick, array[x]);
}
}
else if(msg.equalsIgnoreCase("online")) {
int onlinei = online();
String online = "";
if(onlinei == -3)
online = "Connection timed out, rscdaemon.org down?";
else if(onlinei == -1)
online = "Unknown error";
else
online = String.valueOf(onlinei);
doMessage(nick, from, "There are " + online + " players online");
}
else if(msg.startsWith("top5 ")) {
String tmp = msg.substring(5);
if(tmp.equals(""))
doMessage(nick, from, nick + ": Wrong syntax");
else
doMessage(nick, from, getTop5(tmp));
}
else if(msg.equalsIgnoreCase("top5")) {
doMessage(nick, from, getTop5());
}
}
if(google == true || isAdmin(senderNick, host)) {
if(msg.startsWith("google ")) {
String query = msg.substring(7);
String result = google(query);
doMessage(nick, from, result);
}
}
}
}
public void onPrivateMessage(String senderNick, String senderIdent, String senderHost, String msg) {
if(isAdmin(senderNick, senderIdent + "@" + senderHost))
adminCommand(senderNick, msg);
}
public void adminCommand(String nick, String msg) {
if(msg.startsWith("msg ")) {
msg = msg.substring(4);
String[] array = msg.split(" ");
String whoto = array[0];
msg = msg.replaceAll(whoto + " ", "");
sendMessage(whoto, msg);
}
else if(msg.equalsIgnoreCase("notice")) {
notice = notice ? false : true;
sendMessage(nick, "Noticing: " + toStr(notice));
}
else if(msg.equalsIgnoreCase("stats")) {
getStats = getStats ? false : true;
sendMessage(nick, "Stats: " + toStr(getStats));
}
else if(msg.equalsIgnoreCase("oracle")) {
oracle = oracle ? false : true;
sendMessage(nick, "Oracle: " + toStr(oracle));
}
else if(msg.equalsIgnoreCase("google")) {
google = google ? false : true;
sendMessage(nick, "Google: " + toStr(google));
}
else if(msg.startsWith("spam ")) {
long delay = Long.parseLong(msg.substring(5));
spamDelaySec = delay;
sendMessage(nick, "Spam delay: " + toStr(spamDelaySec) + " seconds");
}
else if(msg.equalsIgnoreCase("status")) {
sendMessage(nick, "Noticing: " + toStr(notice));
sendMessage(nick, "Oracle: " + toStr(oracle));
sendMessage(nick, "Google: " + toStr(google));
sendMessage(nick, "Stats: " + toStr(getStats));
sendMessage(nick, "Spam delay: " + toStr(spamDelaySec));
}
else if(msg.startsWith("ignore ")) {
msg = msg.substring(7);
if(msg.startsWith("add ")) {
msg = msg.substring(4);
addIgnore(msg);
sendMessage(nick, msg + " added to ignore");
}
else if(msg.startsWith("del ")) {
msg = msg.substring(4);
removeIgnore(msg);
sendMessage(nick, msg + " removed from ignore");
}
}
else if(msg.startsWith("is ")) {
msg = msg.substring(3);
if(msg.startsWith("ignored ")) {
msg = msg.substring(8);
if(isIgnored(msg) == true)
sendMessage(nick, msg + " is ignored");
else
sendMessage(nick, msg + " is not ignored");
}
}
}
/**/
public void doMessage(String nick, String channel, String msg) {
if(notice == true)
sendNotice(nick, msg);
else
sendMessage(channel, msg);
}
public boolean contains(String str, String toContain) {
if(str.indexOf(toContain) >= 0)
return true;
return false;
}
public void updateLong(long l) {
l = System.currentTimeMillis();
}
public boolean toBoolean(String s) {
return s.equalsIgnoreCase("true") == false ? false : true;
}
public String toStr(long l) {
try {
String x = String.valueOf(l);
return x;
}
catch(Exception e) {
return null;
}
}
public String toStr(boolean b) {
return b ? "on" : "off";
}
public String toStr(int number) {
try {
String x = String.valueOf(number);
return x;
}
catch(Exception e) {
return null;
}
}
public int toInt(String value) {
try {
int x = Integer.parseInt(value);
return x;
}
catch(Exception e) {
return -1;
}
}
public boolean isInt(String value) {
try {
Integer.parseInt(value);
return true;
}
catch(Exception e) {
return false;
}
}
public int random(int one, int two) {
return new java.util.Random().nextInt(two - one + 1) + one;
}
public String underline() { return ""; }
public String u() { return underline(); }
public String bold() { return ""; }
public String b() { return bold(); }
public String getTop5(String skill) {
try {
URLConnection connection;
connection = new URL("http://www.rscdaemon.org/highscores.php?skill=" + skill).openConnection();
connection.setRequestProperty("Cookie", "rscdforums=" + cookieValue);
BufferedReader input = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String str;
String return_ = "Top 5 players for " + skill + " (by level): ";
int getcounter = 1;
int getcounter2 = 1;
int arraycounter = 0;
int arraycounter2 = 0;
String[] names = new String[5];
int[] levels = new int[5];
boolean gotlevel = false;
while ((str = input.readLine()) != null) {
if(str.contains("<td class=\"tc3\">") && getcounter2 <= 5 && gotlevel == false) {
String s = str;
s = s.replaceAll("</td>", "");
s = s.replaceAll("<td class=\"tcl\">", "");
s = s.substring(s.indexOf("\">") + 2);
if(isInt(s)) {
levels[arraycounter2] = Integer.parseInt(s);
gotlevel = true;
arraycounter2 ++;
getcounter2 ++;
}
}
if(str.contains("<td class=\"tcl\"><a href=\"char.php") && getcounter <= 5) {
String s = str;
s = s.replaceAll("</a></td>", "");
s = s.replaceAll("<td class=\"tcl\">", "");
s = s.substring(s.indexOf("\">") + 2);
names[arraycounter] = s;
arraycounter ++;
getcounter ++;
gotlevel = false;
}
}
for(int i = 0; i < names.length; i++)
return_ += b() + names[i] + "(" + levels[i] + ")" + b() + ", ";
input.close();
if(return_.contains("null"))
return "Invalid skill \"" + skill + "\"";
return return_.substring(0, (return_.length() - 2));
}
catch(Exception e) {
e.printStackTrace();
return null;
}
}
public String getTop5() {
try {
URLConnection connection;
connection = new URL("http://www.rscdaemon.org/highscores.php").openConnection();
connection.setRequestProperty("Cookie", "rscdforums=" + cookieValue);
BufferedReader input = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String str;
String return_ = "Top 5 players (by skilltotal): ";
int getcounter = 1;
int getcounter2 = 1;
int arraycounter = 0;
int arraycounter2 = 0;
String[] names = new String[5];
int[] levels = new int[5];
int gotlevel = 0;
while ((str = input.readLine()) != null) {
if(str.contains("<td class=\"tc3\">") && getcounter2 <= 5) {
String s = str;
s = s.replaceAll("</td>", "");
s = s.replaceAll("<td class=\"tcl\">", "");
s = s.substring(s.indexOf("\">") + 2);
if(isInt(s) && gotlevel == 2) {
levels[arraycounter2] = Integer.parseInt(s);
gotlevel = 0;
arraycounter2 ++;
getcounter2 ++;
}
else
gotlevel ++;
}
if(str.contains("<td class=\"tcl\"><a href=\"char.php") && getcounter <= 5) {
String s = str;
s = s.replaceAll("</a></td>", "");
s = s.replaceAll("<td class=\"tcl\">", "");
s = s.substring(s.indexOf("\">") + 2);
names[arraycounter] = s;
arraycounter ++;
getcounter ++;
}
}
for(int i = 0; i < names.length; i++)
return_ += b() + names[i] + "(" + levels[i] + ")" + b() + ", ";
input.close();
return return_.substring(0, (return_.length() - 2));
}
catch(Exception e) {
e.printStackTrace();
return null;
}
}
public int online() {
try {
URLConnection connection;
connection = new URL("http://rscdaemon.org/status.php").openConnection();
connection.setRequestProperty("Cookie", "rscdforums=" + cookieValue);
BufferedReader input = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String str;
int return_ = 0;
boolean hax = false;
while ((str = input.readLine()) != null) {
if(contains(str, "<th scope=\"row\">Players Online:</th>"))
hax = true;
if(contains(str, "<td>") && contains(str, "</td>") && hax == true)
return_ = Integer.parseInt(str.substring(str.indexOf("<td>") + 4, str.lastIndexOf("</td>")));
if(contains(str, "<th scope=\"row\">Start Time:</th>"))
hax = false;
}
input.close();
return return_;
}
catch(Exception e) {
if(contains(e.toString(), "Connection timed out"))
return -3;
return -1;
}
}
public String google(String query) {
try {
URLConnection connection;
connection = new URL("http://www.google.com/search?q=" + URLEncoder.encode(query)).openConnection();
connection.setRequestProperty("User-agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; fi; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
BufferedReader input = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String str;
boolean hax = false;
while ((str = input.readLine()) != null) {
if(contains(str, "<h2 class=r><a href=\"http")) {
return str.substring(str.indexOf("<h2 class=r><a href=\"http") + 21, str.indexOf("\" class=l onmo"));
}
}
input.close();
return query + " did not match any results";
}
catch(Exception e) {
return e.toString();
}
}
public String owner(String who, boolean Bowner) {
try {
URL url = new URL("http://rscdaemon.org/char.php?user=" + usernameToHash(who) + "&display=xml");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String str;
boolean found = false;
String owner = "", username = "", status = "";
while ((str = in.readLine()) != null) {
if(contains(str, "<username>"))
username = str.replaceAll(" ", "").replaceAll("<username>", "").replaceAll("</username>", "");
if(contains(str, "<owner>"))
owner = str.replaceAll(" ", "").replaceAll("<owner>", "").replaceAll("</owner>", "");
if(contains(str, "status"))
status = str.replaceAll(" ", "").replaceAll("<status>", "").replaceAll("</status>", "");
}
in.close();
String returned = null;
username = username.replaceAll(" ", "");
owner = owner.replaceAll(" ", "");
status = status.replaceAll(" ", "");
if(owner.equals("") == false && username.equals("") == false && Bowner == true)
returned = username + "'s owner is " + owner;
if(status.equals("") == false && username.equals("") == false && Bowner == false)
returned = username + "'s status is " + status;
if(returned == null)
returned = "Player \"" + who + "\" wasn't found";
return returned;
}
catch(Exception e) {
e.printStackTrace();
return e.toString();
}
}
public String[] infoNames = {
"Username", "Combat", "Skilltotal", "Kills", "Deaths", "Attack", "Defense", "Strength", "Hits", "Ranged", "Prayer", "Magic", "Cooking",
"Woodcut", "Fletching", "Fishing", "Firemaking", "Crafting", "Smithing", "Mining", "Herblaw", "Agility",
"Thieving"};
public String[] infoDetails = new String[infoNames.length];
public String charInfo(String who, String what) {
try {
URL url = new URL("http://rscdaemon.org/char.php?user=" + usernameToHash(who) + "&display=xml");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String str;
boolean found = false;
while ((str = in.readLine()) != null) {
if(contains(str, "<username>"))
found = true;
if(found == true) {
for(int i = 0; i < infoNames.length; i++) {
if(contains(str, "<" + infoNames[i].toLowerCase() + ">") && contains(str, "</" + infoNames[i].toLowerCase() + ">"))
if(infoNames[i].equals("Username") || infoNames[i].equals("Combat") || infoNames[i].equals("Kills")
|| infoNames[i].equals("Deaths"))
infoDetails[i] = str.substring(("<" + infoNames[i].toLowerCase() + ">").length() + 1, str.lastIndexOf("</" + infoNames[i].toLowerCase() + ">"));
else
infoDetails[i] = str.substring(("<" + infoNames[i].toLowerCase() + ">").length() + 2, str.lastIndexOf("</" + infoNames[i].toLowerCase() + ">"));
}
}
}
in.close();
String returned = null;
for(int x = 0; x < infoDetails.length; x++)
if(infoNames[x].equalsIgnoreCase(what) && infoDetails[x] != null)
returned = infoDetails[0] + "'s " + infoNames[x] + " level: " + infoDetails[x];
else if(what.equalsIgnoreCase("combat") && infoDetails[x] != null) {
returned = infoDetails[0] + "'s combat stats: " + infoDetails[5] + " " + infoDetails[6] + " " + infoDetails[7] + " " + infoDetails[8] + " (level-" + infoDetails[1] + ")";
}
else if(what.equalsIgnoreCase("kpd") && infoDetails[x] != null) {
double kills = Double.parseDouble(infoDetails[3]);
double deaths = Double.parseDouble(infoDetails[4]);
double kpd = kills / deaths;
return infoDetails[0] + "'s kpd: " + String.valueOf(kpd);
}
else if(what.equalsIgnoreCase("stats")) {
returned = infoDetails[0] + "'s stats are:\n";
for(int a = 0; a < infoNames.length; a++) {
if(a >= 5)
returned += infoNames[a] + ": " + infoDetails[a] + "\n";
}
}
if(returned == null)
returned = "Player \"" + who + "\" wasn't found";
for(int l = 0; l < infoDetails.length; l++)
infoDetails[l] = null;
return returned;
}
catch(Exception e) {
e.printStackTrace();
return e.toString();
}
}
public long usernameToHash(String s) {
s = s.toLowerCase();
String s1 = "";
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 'a' && c <= 'z')
s1 = s1 + c;
else if (c >= '0' && c <= '9')
s1 = s1 + c;
else
s1 = s1 + ' ';
}
s1 = s1.trim();
if (s1.length() > 12)
s1 = s1.substring(0, 12);
long l = 0L;
for (int j = 0; j < s1.length(); j++) {
char c1 = s1.charAt(j);
l *= 37L;
if (c1 >= 'a' && c1 <= 'z')
l += (1 + c1) - 97;
else if (c1 >= '0' && c1 <= '9')
l += (27 + c1) - 48;
}
return l;
}
public long getTimeElapsed(long since, int type) {
long elapsedTimeMillis = System.currentTimeMillis() - since;
long elapsedTime = elapsedTimeMillis;
if(type == 0)
elapsedTime = elapsedTimeMillis;//milliseconds
if(type == 1)
elapsedTime = elapsedTimeMillis / 1000;//seconds
if(type == 2)
elapsedTime = elapsedTimeMillis / (60 * 1000);//minutes
if(type == 3)
elapsedTime = elapsedTimeMillis / (60 * 60 * 1000);//hours
if(type == 4)
elapsedTime = elapsedTimeMillis / (24 * 60 * 60 * 1000);//days
return elapsedTime;
}
public String askOracle(String question) {
try {
URL url = new URL("http://www.askoracle.net/index.php?q=" + URLEncoder.encode(question) + "&skiphtml=TRUE");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String str;
while ((str = in.readLine()) != null) {
in.close();
return str;
}
return null;
}
catch(Exception e) {
e.printStackTrace();
return e.toString();
}
}
public boolean isIgnored(String identhost) {
try {
BufferedReader in = new BufferedReader(new FileReader(System.getProperty("user.dir") + "/ignores.di3"));
String s;
String[] s1 = new String[20];
int c = 0;
while((s = in.readLine()) != null) {
if(s.equalsIgnoreCase(identhost))
return true;
}
in.close();
return false;
}
catch(Exception e) {
System.out.println(e + "\nStacktrace:");
e.printStackTrace();
return false;
}
}
public void addIgnore(String identhost) {
try {
BufferedWriter out = new BufferedWriter(new FileWriter(System.getProperty("user.dir") + "/ignores.di3", true));
out.write(identhost + "\n");
out.close();
}
catch(Exception e) {
System.out.println(e + "\nStacktrace:");
e.printStackTrace();
}
}
public void removeIgnore(String identhost) {
try {
BufferedReader in = new BufferedReader(new FileReader(System.getProperty("user.dir") + "/ignores.di3"));
String s;
String[] s1 = new String[20];
int c = 0;
while((s = in.readLine()) != null) {
s1[c] = s;
c++;
}
in.close();
for(int i = 0; i < s1.length; i++)
if(s1[i] != null)
if(s1[i].equalsIgnoreCase(identhost))
s1[i] = null;
BufferedWriter out = new BufferedWriter(new FileWriter(System.getProperty("user.dir") + "/ignores.di3"));
for(int i = 0; i < s1.length; i++)
if(s1[i] != null)
out.write(s1[i] + "\n");
out.close();
}
catch(Exception e) {
System.out.println(e + "\nStacktrace:");
e.printStackTrace();
}
}
public boolean isAdmin(String nick, String identhost) {
try {
String[] tmp = identhost.split("@");
if(isAdmin(nick, tmp[0], tmp[1]))
return true;
return false;
}
catch(Exception e) {
System.out.println(e + "\nStacktrace:");
e.printStackTrace();
return false;
}
}
public void addAdmin(String identhost) {
try {
BufferedWriter out = new BufferedWriter(new FileWriter(System.getProperty("user.dir") + "/admins.di3", true));
out.write(identhost + "\n");
out.close();
}
catch(Exception e) {
System.out.println(e + "\nStacktrace:");
e.printStackTrace();
}
}
public void removeAdmin(String identhost) {
try {
BufferedReader in = new BufferedReader(new FileReader(System.getProperty("user.dir") + "/admins.di3"));
String s;
String[] s1 = new String[20];
int c = 0;
while((s = in.readLine()) != null) {
s1[c] = s;
c++;
}
in.close();
for(int i = 0; i < s1.length; i++)
if(s1[i] != null)
if(s1[i].equalsIgnoreCase(identhost))
s1[i] = null;
BufferedWriter out = new BufferedWriter(new FileWriter(System.getProperty("user.dir") + "/admins.di3"));
for(int i = 0; i < s1.length; i++)
if(s1[i] != null)
out.write(s1[i] + "\n");
out.close();
}
catch(Exception e) {
System.out.println(e + "\nStacktrace:");
e.printStackTrace();
}
}
}