Initial commit
This commit is contained in:
commit
f255626098
BIN
build/EvilBotX-0.1.0-final.jar
Normal file
BIN
build/EvilBotX-0.1.0-final.jar
Normal file
Binary file not shown.
13
src/be/xrg/evilbotx/BotPair.java
Normal file
13
src/be/xrg/evilbotx/BotPair.java
Normal file
|
@ -0,0 +1,13 @@
|
|||
package be.xrg.evilbotx;
|
||||
|
||||
import org.pircbotx.PircBotX;
|
||||
|
||||
public class BotPair {
|
||||
public Network a;
|
||||
public PircBotX b;
|
||||
|
||||
public BotPair(Network a, PircBotX b) {
|
||||
this.a = a;
|
||||
this.b = b;
|
||||
}
|
||||
}
|
49
src/be/xrg/evilbotx/EvilBotX.java
Normal file
49
src/be/xrg/evilbotx/EvilBotX.java
Normal file
|
@ -0,0 +1,49 @@
|
|||
package be.xrg.evilbotx;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.pircbotx.PircBotX;
|
||||
|
||||
public class EvilBotX {
|
||||
public static String VERSION = "EvilBotX v0.1.0";
|
||||
|
||||
private ArrayList<BotPair> b = new ArrayList<BotPair>();
|
||||
|
||||
public EvilBotX(ArrayList<Network> nets, XListener shared) {
|
||||
for (Network a : nets) {
|
||||
PircBotX bot = new PircBotX();
|
||||
bot.setLogin(a.getLogin());
|
||||
bot.setName(a.getNick());
|
||||
bot.setVerbose(a.useVerbose());
|
||||
bot.setAutoNickChange(a.useAutoNick());
|
||||
bot.getListenerManager().addListener(shared);
|
||||
if (a.useCustomListener()) {
|
||||
bot.getListenerManager().addListener(a.getListener());
|
||||
}
|
||||
this.b.add(new BotPair(a, bot));
|
||||
}
|
||||
}
|
||||
|
||||
public void go() {
|
||||
for (BotPair c : this.b) {
|
||||
try {
|
||||
if (c.a.useSSL()) {
|
||||
c.b.connect(c.a.getAddress(), c.a.getPort(), c.a.getPass(),
|
||||
new org.pircbotx.UtilSSLSocketFactory()
|
||||
.trustAllCertificates());
|
||||
} else {
|
||||
c.b.connect(c.a.getAddress(), c.a.getPort(), c.a.getPass());
|
||||
}
|
||||
for (String a : c.a.getChannels()) {
|
||||
c.b.joinChannel(a);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.println("You need to create your own runner class to use EvilBotX. Please check the documentation for details.");
|
||||
}
|
||||
}
|
86
src/be/xrg/evilbotx/Network.java
Normal file
86
src/be/xrg/evilbotx/Network.java
Normal file
|
@ -0,0 +1,86 @@
|
|||
package be.xrg.evilbotx;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Network {
|
||||
private XListener privateListener;
|
||||
|
||||
private String name;
|
||||
private String nick;
|
||||
private String address;
|
||||
private String pass;
|
||||
|
||||
private ArrayList<String> channels;
|
||||
|
||||
private int port;
|
||||
|
||||
private boolean autoNickChange = true;
|
||||
private boolean customListener = false;
|
||||
private boolean verbose = false;
|
||||
private boolean ssl = true;
|
||||
|
||||
public Network(String login, String nick, String address, String pass, int port) {
|
||||
this.address = address;
|
||||
this.channels = new ArrayList<String>();
|
||||
this.name = login;
|
||||
this.nick = nick;
|
||||
this.pass = pass;
|
||||
this.port = port;
|
||||
}
|
||||
|
||||
public void addChannel(String channel) {
|
||||
this.channels.add(channel);
|
||||
}
|
||||
|
||||
public void setSSL(boolean ssl) {
|
||||
this.ssl = ssl;
|
||||
}
|
||||
|
||||
public void setCustomListener(XListener listen) {
|
||||
this.privateListener = listen;
|
||||
this.customListener = true;
|
||||
}
|
||||
|
||||
public String getAddress() {
|
||||
return this.address;
|
||||
}
|
||||
|
||||
public XListener getListener() {
|
||||
return this.privateListener;
|
||||
}
|
||||
|
||||
public String getLogin() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public String getNick() {
|
||||
return this.nick;
|
||||
}
|
||||
public String getPass() {
|
||||
return this.pass;
|
||||
}
|
||||
public int getPort() {
|
||||
return this.port;
|
||||
}
|
||||
|
||||
public boolean useAutoNick() {
|
||||
return this.autoNickChange;
|
||||
}
|
||||
|
||||
public boolean useCustomListener() {
|
||||
return this.customListener;
|
||||
}
|
||||
|
||||
public boolean useSSL() {
|
||||
return this.ssl;
|
||||
}
|
||||
|
||||
public boolean useVerbose() {
|
||||
return this.verbose;
|
||||
}
|
||||
|
||||
public ArrayList<String> getChannels() {
|
||||
return this.channels;
|
||||
}
|
||||
|
||||
}
|
133
src/be/xrg/evilbotx/Storage.java
Normal file
133
src/be/xrg/evilbotx/Storage.java
Normal file
|
@ -0,0 +1,133 @@
|
|||
package be.xrg.evilbotx;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class Storage {
|
||||
static String fileName = "data.ebx";
|
||||
static String dfName = "dsssseRs";
|
||||
private Map<String, byte[]> data;
|
||||
private boolean loaded = false;
|
||||
private final String location;
|
||||
|
||||
public Storage() {
|
||||
this(System.getProperty("user.dir") + "/");
|
||||
}
|
||||
|
||||
public Storage(String location) {
|
||||
this.location = location;
|
||||
this.read();
|
||||
if (!this.loaded) {
|
||||
this.init();
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void read() {
|
||||
File f = new File(this.location);
|
||||
File ff = new File(f, Storage.fileName);
|
||||
if (ff.exists()) {
|
||||
try {
|
||||
FileInputStream fi = new FileInputStream(ff);
|
||||
byte[] b = new byte[(int) f.length()];
|
||||
fi.read(b);
|
||||
fi.close();
|
||||
ObjectInputStream is = new ObjectInputStream(
|
||||
new ByteArrayInputStream(b));
|
||||
this.data = (HashMap<String, byte[]>) is.readObject();
|
||||
this.loaded = true;
|
||||
} catch (IOException | ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void write() {
|
||||
try {
|
||||
FileOutputStream f = new FileOutputStream(this.location
|
||||
+ Storage.fileName);
|
||||
f.write(Storage.toByteArr((Serializable) this.data));
|
||||
f.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void init() {
|
||||
boolean fail = false;
|
||||
File f = new File(this.location);
|
||||
File ff = new File(f, Storage.fileName);
|
||||
if (!f.exists()) {
|
||||
if (!f.mkdirs()) {
|
||||
fail = true;
|
||||
}
|
||||
}
|
||||
if (ff.exists()) {
|
||||
try {
|
||||
if (!(ff.delete() && ff.createNewFile())) {
|
||||
fail = true;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
fail = true;
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
if (!ff.createNewFile()) {
|
||||
fail = true;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
fail = true;
|
||||
}
|
||||
}
|
||||
this.data = new HashMap<String, byte[]>();
|
||||
if (!fail) {
|
||||
loaded = true;
|
||||
} else {
|
||||
System.exit(-2);
|
||||
}
|
||||
this.putData(385639, "FakeDataToPopulate", Storage.toByteArr("lolol"));
|
||||
}
|
||||
|
||||
public boolean hasData(int ID, String appName) {
|
||||
return this.data.containsKey(this.getUID(ID, appName));
|
||||
}
|
||||
|
||||
public void putData(int ID, String appName, byte[] data) {
|
||||
String uid = this.getUID(ID, appName);
|
||||
this.data.put(uid, data);
|
||||
this.write();
|
||||
}
|
||||
|
||||
public byte[] getData(int ID, String appName) {
|
||||
return this.data.get(this.getUID(ID, appName));
|
||||
}
|
||||
|
||||
private String getUID(int ID, String appName) {
|
||||
return Utilities.crc32(appName + ID);
|
||||
}
|
||||
|
||||
public static byte[] toByteArr(Serializable o) {
|
||||
byte[] b = null;
|
||||
try {
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
ObjectOutputStream objOut = new ObjectOutputStream(out);
|
||||
objOut.writeObject(o);
|
||||
b = out.toByteArray();
|
||||
objOut.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return b;
|
||||
}
|
||||
}
|
182
src/be/xrg/evilbotx/Utilities.java
Normal file
182
src/be/xrg/evilbotx/Utilities.java
Normal file
|
@ -0,0 +1,182 @@
|
|||
package be.xrg.evilbotx;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.zip.CRC32;
|
||||
|
||||
import org.apache.commons.lang3.StringEscapeUtils;
|
||||
|
||||
public class Utilities {
|
||||
public static final String strEnc = "UTF-8";
|
||||
public static boolean compat = false;
|
||||
|
||||
public static String[] getHTMLPage(String url) {
|
||||
URL loc;
|
||||
HttpURLConnection conn;
|
||||
BufferedReader rd;
|
||||
String line;
|
||||
String[] ret = { "", "" };
|
||||
try {
|
||||
loc = new URL(url);
|
||||
conn = (HttpURLConnection) loc.openConnection();
|
||||
conn.setRequestMethod("GET");
|
||||
rd = new BufferedReader(
|
||||
new InputStreamReader(conn.getInputStream()));
|
||||
ret[0] += conn.getResponseCode();
|
||||
while ((line = rd.readLine()) != null) {
|
||||
ret[1] += line;
|
||||
}
|
||||
rd.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
ret[0] += "-1";
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
public static String decodeHTMLEntities(String encoded) {
|
||||
return StringEscapeUtils.unescapeHtml4(encoded);
|
||||
}
|
||||
public static String getPageTitle(String html) {
|
||||
int[] f = new int[2];
|
||||
f[0] = html.indexOf("<title>") + 7;
|
||||
f[1] = html.indexOf("</title>");
|
||||
return "" + html.substring(f[0], f[1]);
|
||||
}
|
||||
|
||||
public static String intToTimeString(int seconds) {
|
||||
boolean started = false;
|
||||
String ret = "";
|
||||
int amount = 86400;
|
||||
if (seconds > amount) {
|
||||
ret += (seconds / amount) + " day";
|
||||
if (seconds/amount > 1) {
|
||||
ret += "s";
|
||||
}
|
||||
ret += ", ";
|
||||
seconds -= (seconds / amount) * amount;
|
||||
started = true;
|
||||
}
|
||||
amount = 3600;
|
||||
if (seconds > amount || started) {
|
||||
ret += (seconds / amount) + " hour";
|
||||
if (seconds/amount > 1) {
|
||||
ret += "s";
|
||||
}
|
||||
ret += ", ";
|
||||
seconds -= (seconds / amount) * amount;
|
||||
started = true;
|
||||
}
|
||||
amount = 60;
|
||||
if (seconds > amount || started) {
|
||||
ret += (seconds / amount) + " minute";
|
||||
if (seconds/amount > 1) {
|
||||
ret += "s";
|
||||
}
|
||||
ret += ", ";
|
||||
seconds -= (seconds / amount) * amount;
|
||||
started = true;
|
||||
}
|
||||
ret += seconds + " second";
|
||||
if (seconds > 1) {
|
||||
ret += "s";
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static void saveData(byte[] data, String modName, int modID) {
|
||||
|
||||
}
|
||||
|
||||
public static boolean hasData(String modName, int modID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static byte[] loadData(String modName, int modID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String[] formatString(String[] a, int lineLength) {
|
||||
String nextln = null;
|
||||
boolean done = false;
|
||||
ArrayList<String> r = new ArrayList<String>();
|
||||
nextln = "╔";
|
||||
for (int i = 0; i < lineLength; i++) {
|
||||
nextln += "═";
|
||||
}
|
||||
nextln += "╗";
|
||||
r.add(nextln);
|
||||
while (!done) {
|
||||
for (String s : a) {
|
||||
nextln = "║";
|
||||
int curl = 0;
|
||||
String[] words = s.split(" ");
|
||||
for (String w : words) {
|
||||
if (curl + w.length() > lineLength) {
|
||||
nextln += w;
|
||||
} else {
|
||||
nextln = Utilities.padString(nextln, lineLength + 1);
|
||||
nextln += "║";
|
||||
r.add(nextln);
|
||||
nextln = "║";
|
||||
}
|
||||
}
|
||||
nextln = Utilities.padString(nextln, lineLength + 1);
|
||||
nextln += "║";
|
||||
r.add(nextln);
|
||||
}
|
||||
}
|
||||
nextln = "╚";
|
||||
for (int i = 0; i < lineLength; i++) {
|
||||
nextln += "═";
|
||||
}
|
||||
nextln += "╝";
|
||||
r.add(nextln);
|
||||
return (String[]) r.toArray();
|
||||
}
|
||||
|
||||
public static String md5(String input) throws NoSuchAlgorithmException,
|
||||
UnsupportedEncodingException {
|
||||
MessageDigest md5 = MessageDigest.getInstance("MD5");
|
||||
if (input != null)
|
||||
input = bToStr(md5.digest(input.getBytes(Utilities.strEnc)));
|
||||
return input;
|
||||
}
|
||||
|
||||
public static String crc32(String input) {
|
||||
CRC32 crc32 = new CRC32();
|
||||
if (input != null) {
|
||||
crc32.update(input.getBytes());
|
||||
input = Utilities.padOut(Long.toHexString(crc32.getValue()), 8);
|
||||
}
|
||||
return input;
|
||||
}
|
||||
|
||||
public static String bToStr(byte[] in) {
|
||||
char[] hexArray = "0123456789abcdef".toCharArray();
|
||||
char[] hexChars = new char[in.length * 2];
|
||||
int v;
|
||||
for (int j = 0; j < in.length; j++) {
|
||||
v = in[j] & 0xFF;
|
||||
hexChars[j * 2] = hexArray[v / 16];
|
||||
hexChars[j * 2 + 1] = hexArray[v % 16];
|
||||
}
|
||||
return new String(hexChars);
|
||||
}
|
||||
|
||||
private static String padString(String ln, int lineLength) {
|
||||
for (int i = ln.length(); i < lineLength; i++) {
|
||||
ln += " ";
|
||||
}
|
||||
return ln;
|
||||
}
|
||||
|
||||
private static String padOut(String input, int nChar) {
|
||||
return String.format("%" + nChar + "s", input).replace(' ', '0');
|
||||
}
|
||||
}
|
52
src/be/xrg/evilbotx/XListener.java
Normal file
52
src/be/xrg/evilbotx/XListener.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
package be.xrg.evilbotx;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.pircbotx.hooks.Event;
|
||||
import org.pircbotx.hooks.Listener;
|
||||
import org.pircbotx.hooks.ListenerAdapter;
|
||||
|
||||
import be.xrg.evilbotx.parents.EBXComponent;
|
||||
|
||||
//This is meant to deal with raw types
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
public class XListener extends ListenerAdapter implements Listener {
|
||||
private java.util.Map<String, EBXComponent> com = new java.util.HashMap<String, EBXComponent>();
|
||||
|
||||
public void onEvent(Event e) throws Exception {
|
||||
super.onEvent(e);
|
||||
Iterator<Entry<String, EBXComponent>> i = this.com.entrySet()
|
||||
.iterator();
|
||||
while (i.hasNext()) {
|
||||
Entry<String, EBXComponent> z = i.next();
|
||||
EBXComponent t = z.getValue();
|
||||
String k = z.getKey();
|
||||
if (t.wantEvent(e)) {
|
||||
System.out.println(k);
|
||||
t.handleEvent(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void addComponent(EBXComponent c) {
|
||||
String u = this.makeUniqueName(c);
|
||||
System.out.println("AddComponent-" + u + " " + c.getComponentName());
|
||||
if (!this.com.containsKey(u)) {
|
||||
this.com.put(u, c);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeComponent(EBXComponent c) {
|
||||
String u = this.makeUniqueName(c);
|
||||
if (!this.com.containsKey(u)) {
|
||||
this.com.remove(u);
|
||||
}
|
||||
}
|
||||
|
||||
private String makeUniqueName(EBXComponent c) {
|
||||
return Utilities.crc32(c.getClass().getName() + c.getComponentName()
|
||||
+ c.getComponentID() + "some needless salt");
|
||||
}
|
||||
}
|
84
src/be/xrg/evilbotx/components/ChannelStatsWatcher.java
Normal file
84
src/be/xrg/evilbotx/components/ChannelStatsWatcher.java
Normal file
|
@ -0,0 +1,84 @@
|
|||
package be.xrg.evilbotx.components;
|
||||
|
||||
import org.pircbotx.hooks.Event;
|
||||
import org.pircbotx.hooks.events.ActionEvent;
|
||||
import org.pircbotx.hooks.events.HalfOpEvent;
|
||||
import org.pircbotx.hooks.events.JoinEvent;
|
||||
import org.pircbotx.hooks.events.KickEvent;
|
||||
import org.pircbotx.hooks.events.MessageEvent;
|
||||
import org.pircbotx.hooks.events.OpEvent;
|
||||
import org.pircbotx.hooks.events.PartEvent;
|
||||
import org.pircbotx.hooks.events.RemoveChannelBanEvent;
|
||||
import org.pircbotx.hooks.events.SetChannelBanEvent;
|
||||
import org.pircbotx.hooks.events.SuperOpEvent;
|
||||
import org.pircbotx.hooks.events.TopicEvent;
|
||||
import org.pircbotx.hooks.events.VoiceEvent;
|
||||
|
||||
import be.xrg.evilbotx.Storage;
|
||||
import be.xrg.evilbotx.Utilities;
|
||||
import be.xrg.evilbotx.parents.EBXComponent;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public class ChannelStatsWatcher extends EBXComponent {
|
||||
static Class[] q = { ActionEvent.class, HalfOpEvent.class, JoinEvent.class,
|
||||
KickEvent.class, MessageEvent.class, OpEvent.class,
|
||||
PartEvent.class, RemoveChannelBanEvent.class,
|
||||
SetChannelBanEvent.class, SuperOpEvent.class, TopicEvent.class,
|
||||
VoiceEvent.class };
|
||||
|
||||
public ChannelStatsWatcher(Storage s) {
|
||||
super(s, q);
|
||||
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleEvent(Event e) {
|
||||
String j = Utilities.crc32(e.getBot().getLogin());
|
||||
if (e instanceof MessageEvent) {
|
||||
MessageEvent t = (MessageEvent) e;
|
||||
this.inc(j, 0);
|
||||
String b = t.getMessage();
|
||||
if (b.equals("!stats")) {
|
||||
|
||||
}
|
||||
} else if (e instanceof ActionEvent) {
|
||||
// ActionEvent
|
||||
} else if (e instanceof HalfOpEvent) {
|
||||
// HalfOpEvent
|
||||
} else if (e instanceof JoinEvent) {
|
||||
// JoinEvent
|
||||
} else if (e instanceof KickEvent) {
|
||||
// KickEvent
|
||||
} else if (e instanceof OpEvent) {
|
||||
// OpEvent
|
||||
} else if (e instanceof PartEvent) {
|
||||
// PartEvent
|
||||
} else if (e instanceof RemoveChannelBanEvent) {
|
||||
// RemoveChannelBanEvent
|
||||
} else if (e instanceof SetChannelBanEvent) {
|
||||
// SetChannelBanEvent
|
||||
} else if (e instanceof SuperOpEvent) {
|
||||
// SuperOpEvent
|
||||
} else if (e instanceof TopicEvent) {
|
||||
// TopicEvent
|
||||
} else if (e instanceof VoiceEvent) {
|
||||
// VoiceEvent
|
||||
}
|
||||
}
|
||||
|
||||
private void inc(String p, int place) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getComponentName() {
|
||||
return "ChannelStats";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getComponentID() {
|
||||
return 9001938;
|
||||
}
|
||||
|
||||
}
|
32
src/be/xrg/evilbotx/components/CountdownCommand.java
Normal file
32
src/be/xrg/evilbotx/components/CountdownCommand.java
Normal file
|
@ -0,0 +1,32 @@
|
|||
package be.xrg.evilbotx.components;
|
||||
|
||||
import org.pircbotx.hooks.Event;
|
||||
import org.pircbotx.hooks.events.MessageEvent;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public class CountdownCommand extends be.xrg.evilbotx.parents.EBXComponent {
|
||||
|
||||
public CountdownCommand(be.xrg.evilbotx.Storage s) {
|
||||
super(s, MessageEvent.class);
|
||||
}
|
||||
|
||||
public void handleEvent(Event e) {
|
||||
new be.xrg.evilbotx.special.CountdownThread((MessageEvent) e).run();
|
||||
}
|
||||
|
||||
protected boolean wantEventM(Event e) {
|
||||
if (e instanceof MessageEvent) {
|
||||
MessageEvent a = (MessageEvent) e;
|
||||
return a.getMessage().equals("!countdown");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public String getComponentName() {
|
||||
return "CountdownCommand";
|
||||
}
|
||||
|
||||
public int getComponentID() {
|
||||
return 98763235;
|
||||
}
|
||||
}
|
220
src/be/xrg/evilbotx/components/HackCommand.java
Normal file
220
src/be/xrg/evilbotx/components/HackCommand.java
Normal file
|
@ -0,0 +1,220 @@
|
|||
package be.xrg.evilbotx.components;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.pircbotx.hooks.Event;
|
||||
import org.pircbotx.hooks.events.MessageEvent;
|
||||
|
||||
import be.xrg.evilbotx.EvilBotX;
|
||||
import be.xrg.evilbotx.Utilities;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public class HackCommand extends be.xrg.evilbotx.parents.EBXComponent {
|
||||
private Map<String, int[]> d;
|
||||
private boolean l = false;
|
||||
|
||||
private String q;
|
||||
private boolean r = false;
|
||||
|
||||
public HackCommand(be.xrg.evilbotx.Storage s) {
|
||||
super(s, MessageEvent.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleEvent(Event e) {
|
||||
MessageEvent a = (MessageEvent) e;
|
||||
String b = a.getMessage();
|
||||
if (b.equals("!hack")) {
|
||||
hack(a);
|
||||
} else if (b.equals("!hackstats")) {
|
||||
hackStats(a);
|
||||
} else if (b.equals("!hackcount")) {
|
||||
hackCount(a);
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean wantEventM(Event e) {
|
||||
if (e instanceof MessageEvent) {
|
||||
return ((MessageEvent) e).getMessage().startsWith("!hack");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void hack(MessageEvent e) {
|
||||
this.ensureLoad();
|
||||
int INTERVAL = 3600;
|
||||
int ct = (int) (System.currentTimeMillis() / 1000);
|
||||
String who = e.getUser().getNick().toLowerCase();
|
||||
int i = (int) (Math.random() * 50 - 10);
|
||||
if (!this.d.containsKey(who)) {
|
||||
int[] t = new int[2];
|
||||
t[0] = 0;
|
||||
t[1] = ct - INTERVAL;
|
||||
this.d.put(who, t);
|
||||
}
|
||||
int[] ud = this.d.get(who);
|
||||
int tt = ud[0] + i;
|
||||
String ms;
|
||||
if (ud[1] + INTERVAL <= ct) {
|
||||
if (tt < 0) {
|
||||
tt = 0;
|
||||
}
|
||||
if (i <= 0 && ud[0] == 0) {
|
||||
ms = "You were unable to hack anything. You still have 0 computers in your botnet.";
|
||||
return;
|
||||
} else if (i < -50) {
|
||||
ms = "Looks like the IT department woke up. " + (i * -1)
|
||||
+ " hosts lost. You now have " + tt
|
||||
+ " computers in your botnet.";
|
||||
} else if (i < -8) {
|
||||
ms = "" + (-1 * i)
|
||||
+ " of your compromised hosts were lost. You now have "
|
||||
+ tt + " computers in your botnet.";
|
||||
} else if (i < 0) {
|
||||
ms = "" + (-1 * i)
|
||||
+ " of your bots were cleaned. You now have " + tt
|
||||
+ " computers in your botnet.";
|
||||
} else if (i == 0) {
|
||||
ms = who
|
||||
+ ": You weren't able to hack any machines. You still have "
|
||||
+ tt + " computers in your botnet.";
|
||||
} else if (i > 30) {
|
||||
ms = "You are a hacking god and owned " + i
|
||||
+ " boxes. You now have " + tt
|
||||
+ " computers in your botnet.";
|
||||
} else if (i > 1) {
|
||||
ms = "You hacked " + i + " d00dz. You now have " + tt
|
||||
+ " computers in your botnet.";
|
||||
} else {
|
||||
ms = "You hacked " + i + " box. MUST HACK MORE.";
|
||||
}
|
||||
ud[0] = tt;
|
||||
ud[1] = ct;
|
||||
this.d.put(who, ud);
|
||||
e.respond(ms);
|
||||
this.r = false;
|
||||
this.save();
|
||||
} else {
|
||||
int t = (ud[1] + INTERVAL) - ct;
|
||||
e.respond("You're too tired to hack anything. Chill for "
|
||||
+ Utilities.intToTimeString(t) + ".");
|
||||
}
|
||||
}
|
||||
|
||||
private void hackCount(MessageEvent e) {
|
||||
this.ensureLoad();
|
||||
String who = e.getUser().getNick();
|
||||
String sta = "You have ";
|
||||
if (this.d.containsKey(who)) {
|
||||
int[] ud = this.d.get(who);
|
||||
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
|
||||
sta += ud[0]
|
||||
+ " computers in your botnet, and your last hack occured at "
|
||||
+ df.format(ud[1] * (long) 1000) + ".";
|
||||
} else {
|
||||
sta += "not done any hacking.";
|
||||
}
|
||||
e.respond(sta);
|
||||
}
|
||||
|
||||
private void hackStats(MessageEvent e) {
|
||||
this.ensureLoad();
|
||||
if (!this.r) {
|
||||
int users = 0, boxes = 0, latest = 0, time = (int) (System
|
||||
.currentTimeMillis() / 1000), leader = 0;
|
||||
String recentName = "", leaderName = "";
|
||||
Date dtime = new Date(System.currentTimeMillis());
|
||||
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
|
||||
for (Entry<String, int[]> entry : d.entrySet()) {
|
||||
int[] ud = entry.getValue();
|
||||
String key = entry.getKey();
|
||||
users++;
|
||||
boxes += ud[0];
|
||||
if (leader < ud[0]) {
|
||||
leader = ud[0];
|
||||
leaderName = key;
|
||||
}
|
||||
if (latest < ud[1]) {
|
||||
latest = ud[1];
|
||||
recentName = key;
|
||||
}
|
||||
}
|
||||
dtime = new Date(latest * (long) 1000);
|
||||
this.q = "Currently tracking " + users + " users with " + boxes
|
||||
+ " zombie PCs. Current leader is " + leaderName + " with "
|
||||
+ leader + " machines. The most recent hack happened on "
|
||||
+ df.format(dtime) + " and was done by " + recentName
|
||||
+ ". (" + EvilBotX.VERSION + ", " + time + ")";
|
||||
this.r = true;
|
||||
}
|
||||
e.respond(this.q);
|
||||
}
|
||||
|
||||
private void ensureLoad() {
|
||||
if (!this.l) {
|
||||
this.load();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getComponentName() {
|
||||
return "HackCommand";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getComponentID() {
|
||||
return 2400062;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void load() {
|
||||
byte[] a = null;
|
||||
try {
|
||||
if (this.s.hasData(this.getComponentID(), this.getComponentName())) {
|
||||
a = this.s.getData(this.getComponentID(),
|
||||
this.getComponentName());
|
||||
if (a != null) {
|
||||
ObjectInputStream is = new ObjectInputStream(
|
||||
new ByteArrayInputStream(a));
|
||||
this.d = (HashMap<String, int[]>) is.readObject();
|
||||
this.l = true;
|
||||
}
|
||||
}
|
||||
} catch (IOException | ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (!this.l) {
|
||||
this.init();
|
||||
}
|
||||
}
|
||||
|
||||
private void init() {
|
||||
this.d = new HashMap<String, int[]>();
|
||||
this.l = true;
|
||||
}
|
||||
|
||||
private void save() {
|
||||
byte[] a = null;
|
||||
try {
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
ObjectOutputStream objOut = new ObjectOutputStream(out);
|
||||
objOut.writeObject(this.d);
|
||||
a = out.toByteArray();
|
||||
objOut.close();
|
||||
out.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
this.s.putData(this.getComponentID(), this.getComponentName(), a);
|
||||
}
|
||||
}
|
35
src/be/xrg/evilbotx/components/HelloWorldCommand.java
Normal file
35
src/be/xrg/evilbotx/components/HelloWorldCommand.java
Normal file
|
@ -0,0 +1,35 @@
|
|||
package be.xrg.evilbotx.components;
|
||||
|
||||
import org.pircbotx.hooks.Event;
|
||||
import org.pircbotx.hooks.events.MessageEvent;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public class HelloWorldCommand extends be.xrg.evilbotx.parents.EBXComponent {
|
||||
|
||||
public HelloWorldCommand(be.xrg.evilbotx.Storage s) {
|
||||
super(s, MessageEvent.class);
|
||||
}
|
||||
|
||||
public void handleEvent(Event e) {
|
||||
MessageEvent t = (MessageEvent) e;
|
||||
if (t.getMessage().startsWith("!hello")) {
|
||||
t.getBot().sendMessage(t.getChannel(), "Hello world");
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean wantEventM(Event e) {
|
||||
if (e instanceof MessageEvent) {
|
||||
return ((MessageEvent) e).getMessage().equals("!hello");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public String getComponentName() {
|
||||
return "HelloWorldCommand";
|
||||
}
|
||||
|
||||
public int getComponentID() {
|
||||
return 68752;
|
||||
}
|
||||
|
||||
}
|
68
src/be/xrg/evilbotx/components/InsultCommand.java
Normal file
68
src/be/xrg/evilbotx/components/InsultCommand.java
Normal file
|
@ -0,0 +1,68 @@
|
|||
package be.xrg.evilbotx.components;
|
||||
|
||||
import org.pircbotx.hooks.Event;
|
||||
import org.pircbotx.hooks.events.MessageEvent;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public class InsultCommand extends be.xrg.evilbotx.parents.EBXComponent {
|
||||
public static String[] i = { "Nobody likes you.", "Poq Gai",
|
||||
"I do not like your look, I promise thee", "Die in a fire",
|
||||
"I desire that we be better strangers",
|
||||
"If ignorance is bliss, you must be overjoyed", "GTFO",
|
||||
"Besame el culo", "La reputisima madre que te remil pario",
|
||||
"Jy pis my af", "Lay da yuen fay gay mm sai sou",
|
||||
"Degenerate and base art thou", "Blöde fotze",
|
||||
"You will live a long pathetic life", "Kusu o taberu na",
|
||||
"You will get hit by a car later on",
|
||||
"You are not worth another word, else I'd call you knave",
|
||||
"Your face is as a book, where men may read strange matters",
|
||||
"Everything you believe in is an illusion" };
|
||||
|
||||
public InsultCommand(be.xrg.evilbotx.Storage s) {
|
||||
super(s, MessageEvent.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleEvent(Event e) {
|
||||
MessageEvent t = (MessageEvent) e;
|
||||
String b = t.getMessage();
|
||||
if (b.startsWith("!insult")) {
|
||||
String a = "";
|
||||
if (b.contains(" ")) {
|
||||
String[] c = b.split(" ");
|
||||
if (c.length >= 1) {
|
||||
a += c[1];
|
||||
} else {
|
||||
a += t.getUser().getNick();
|
||||
}
|
||||
} else {
|
||||
a += t.getUser().getNick();
|
||||
}
|
||||
t.getBot().sendMessage(t.getChannel(),
|
||||
a + ": " + InsultCommand.randInsult());
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean wantEventM(Event e) {
|
||||
if (e instanceof MessageEvent) {
|
||||
return ((MessageEvent) e).getMessage().startsWith("!insult");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getComponentName() {
|
||||
// TODO Auto-generated method stub
|
||||
return "InsultCommand";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getComponentID() {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
}
|
||||
|
||||
static String randInsult() {
|
||||
return InsultCommand.i[(int) (Math.random() * InsultCommand.i.length)];
|
||||
}
|
||||
}
|
195
src/be/xrg/evilbotx/components/SeenCommand.java
Normal file
195
src/be/xrg/evilbotx/components/SeenCommand.java
Normal file
|
@ -0,0 +1,195 @@
|
|||
package be.xrg.evilbotx.components;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.pircbotx.hooks.Event;
|
||||
import org.pircbotx.hooks.events.JoinEvent;
|
||||
import org.pircbotx.hooks.events.KickEvent;
|
||||
import org.pircbotx.hooks.events.MessageEvent;
|
||||
import org.pircbotx.hooks.events.NickChangeEvent;
|
||||
import org.pircbotx.hooks.events.PartEvent;
|
||||
import org.pircbotx.hooks.events.QuitEvent;
|
||||
|
||||
import be.xrg.evilbotx.Storage;
|
||||
import be.xrg.evilbotx.Utilities;
|
||||
|
||||
/*
|
||||
* 0 = first seen
|
||||
* 1 = recently seen
|
||||
*/
|
||||
@SuppressWarnings("rawtypes")
|
||||
public class SeenCommand extends be.xrg.evilbotx.parents.EBXComponent {
|
||||
static Class[] q = { JoinEvent.class, KickEvent.class, MessageEvent.class,
|
||||
NickChangeEvent.class, PartEvent.class, QuitEvent.class };
|
||||
private Map<String, int[]> d;
|
||||
private boolean l = false;
|
||||
|
||||
public SeenCommand(Storage s) {
|
||||
super(s, SeenCommand.q);
|
||||
}
|
||||
|
||||
public String getComponentName() {
|
||||
return "SeenCommand";
|
||||
}
|
||||
|
||||
public int getComponentID() {
|
||||
return 83463;
|
||||
}
|
||||
|
||||
public void handleEvent(Event e) {
|
||||
String j = Utilities.crc32(e.getBot().getLogin());
|
||||
if (e instanceof MessageEvent) {
|
||||
MessageEvent t = (MessageEvent) e;
|
||||
this.seen(j, t.getUser().getNick(), true);
|
||||
String b = t.getMessage();
|
||||
if (b.startsWith("!seen")) {
|
||||
if (b.equalsIgnoreCase("!seenstats")) {
|
||||
t.respond(this.seenStats());
|
||||
} else if (b.length() > 6) {
|
||||
String[] c = b.split(" ");
|
||||
if (c.length >= 2) {
|
||||
t.respond(this.checkSeen(j, c[1]));
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (e instanceof JoinEvent) {
|
||||
this.seen(j, ((JoinEvent) e).getUser().getNick(), true);
|
||||
} else if (e instanceof PartEvent) {
|
||||
this.seenOff(j, ((PartEvent) e).getUser().getNick());
|
||||
} else if (e instanceof QuitEvent) {
|
||||
this.seenOff(j, ((QuitEvent) e).getUser().getNick());
|
||||
} else if (e instanceof KickEvent) {
|
||||
this.seenOff(j, ((KickEvent) e).getRecipient().getNick());
|
||||
} else if (e instanceof NickChangeEvent) {
|
||||
this.seenOff(j, ((NickChangeEvent) e).getOldNick());
|
||||
this.seen(j, ((NickChangeEvent) e).getNewNick(), true);
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean wantEventM(Event e) {
|
||||
if (e instanceof MessageEvent || e instanceof JoinEvent
|
||||
|| e instanceof PartEvent || e instanceof QuitEvent
|
||||
|| e instanceof KickEvent || e instanceof NickChangeEvent) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void seen(String prefix, String user, boolean s) {
|
||||
user = prefix + user.toLowerCase();
|
||||
int a = (int) (System.currentTimeMillis() / 1000);
|
||||
this.ensureLoad();
|
||||
int[] b;
|
||||
if (this.d.containsKey(user)) {
|
||||
b = this.d.get(user);
|
||||
} else {
|
||||
b = new int[3];
|
||||
b[0] = a;
|
||||
}
|
||||
b[1] = a;
|
||||
b[2] = 1;
|
||||
this.d.put(user, b);
|
||||
if (s) {
|
||||
this.save();
|
||||
}
|
||||
}
|
||||
|
||||
private void seenOff(String prefix, String user) {
|
||||
user = user.toLowerCase();
|
||||
this.seen(prefix, user, false);
|
||||
int[] b = this.d.get(user);
|
||||
b[2] = 0;
|
||||
this.d.put(prefix + user.toLowerCase(), b);
|
||||
this.save();
|
||||
}
|
||||
|
||||
private String checkSeen(String p, String w) {
|
||||
String a = p+ w.toLowerCase();
|
||||
String seen = "";
|
||||
int h = (int) (System.currentTimeMillis() / 1000);
|
||||
if (this.d.containsKey(a)) {
|
||||
int[] b = this.d.get(a);
|
||||
if (b[2] == 0) {
|
||||
seen += "I last saw " + w + " "
|
||||
+ Utilities.intToTimeString(h - b[1]) + " ago.";
|
||||
} else {
|
||||
seen += w + " is currently online.";
|
||||
}
|
||||
seen += " I first saw " + w + " "
|
||||
+ Utilities.intToTimeString(h - b[0]) + " ago.";
|
||||
} else {
|
||||
seen += "I have not seen " + w + ".";
|
||||
}
|
||||
return seen;
|
||||
}
|
||||
|
||||
private String seenStats() {
|
||||
int users = 0, online = 0, time = (int) (System.currentTimeMillis() / 1000);
|
||||
for (Entry<String, int[]> entry : d.entrySet()) {
|
||||
users++;
|
||||
int[] v = entry.getValue();
|
||||
if (v[2] != 0) {
|
||||
online++;
|
||||
}
|
||||
}
|
||||
return "I am currently tracking " + users + " nicks, " + online
|
||||
+ " of whom are currently online. (AwesomeBot "
|
||||
+ be.xrg.evilbotx.EvilBotX.VERSION + ", " + time + ")";
|
||||
// return null;
|
||||
}
|
||||
|
||||
private void ensureLoad() {
|
||||
if (!l) {
|
||||
this.load();
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void load() {
|
||||
byte[] a = null;
|
||||
try {
|
||||
if (this.s.hasData(this.getComponentID(), this.getComponentName())) {
|
||||
a = this.s.getData(this.getComponentID(),
|
||||
this.getComponentName());
|
||||
if (a != null) {
|
||||
ObjectInputStream is = new ObjectInputStream(
|
||||
new ByteArrayInputStream(a));
|
||||
this.d = (HashMap<String, int[]>) is.readObject();
|
||||
this.l = true;
|
||||
}
|
||||
}
|
||||
} catch (IOException | ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (!this.l) {
|
||||
this.init();
|
||||
}
|
||||
}
|
||||
|
||||
private void init() {
|
||||
this.d = new HashMap<String, int[]>();
|
||||
this.l = true;
|
||||
}
|
||||
|
||||
private void save() {
|
||||
byte[] a = null;
|
||||
try {
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
ObjectOutputStream objOut = new ObjectOutputStream(out);
|
||||
objOut.writeObject(this.d);
|
||||
a = out.toByteArray();
|
||||
objOut.close();
|
||||
out.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
this.s.putData(this.getComponentID(), this.getComponentName(), a);
|
||||
}
|
||||
}
|
50
src/be/xrg/evilbotx/components/SlapCommand.java
Normal file
50
src/be/xrg/evilbotx/components/SlapCommand.java
Normal file
|
@ -0,0 +1,50 @@
|
|||
package be.xrg.evilbotx.components;
|
||||
|
||||
import org.pircbotx.hooks.Event;
|
||||
import org.pircbotx.hooks.events.MessageEvent;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public class SlapCommand extends be.xrg.evilbotx.parents.EBXComponent {
|
||||
|
||||
public SlapCommand(be.xrg.evilbotx.Storage s) {
|
||||
super(s, MessageEvent.class);
|
||||
}
|
||||
|
||||
public void handleEvent(Event e) {
|
||||
if (e instanceof MessageEvent) {
|
||||
MessageEvent t = (MessageEvent) e;
|
||||
String b = t.getMessage();
|
||||
if (b.startsWith("!slap")) {
|
||||
String a = "slaps ";
|
||||
if (b.contains(" ")) {
|
||||
String[] c = b.split(" ");
|
||||
if (c.length >= 1) {
|
||||
a += c[1];
|
||||
} else {
|
||||
a += t.getUser().getNick();
|
||||
}
|
||||
} else {
|
||||
a += t.getUser().getNick();
|
||||
}
|
||||
t.getBot().sendAction(t.getChannel(), a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean wantEventM(Event e) {
|
||||
if (e instanceof MessageEvent) {
|
||||
return ((MessageEvent) e).getMessage().startsWith("!slap");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getComponentName() {
|
||||
return "SlapCommand";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getComponentID() {
|
||||
return 462963;
|
||||
}
|
||||
}
|
60
src/be/xrg/evilbotx/components/YoutubeParser.java
Normal file
60
src/be/xrg/evilbotx/components/YoutubeParser.java
Normal file
|
@ -0,0 +1,60 @@
|
|||
package be.xrg.evilbotx.components;
|
||||
|
||||
import org.pircbotx.hooks.Event;
|
||||
import org.pircbotx.hooks.events.MessageEvent;
|
||||
|
||||
import be.xrg.evilbotx.Utilities;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public class YoutubeParser extends be.xrg.evilbotx.parents.EBXComponent {
|
||||
|
||||
public static String yt = "1,16[You4,16Tube1,16] ";
|
||||
|
||||
public YoutubeParser(be.xrg.evilbotx.Storage s) {
|
||||
super(s, MessageEvent.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleEvent(Event e) {
|
||||
MessageEvent a = (MessageEvent) e;
|
||||
String[] b = a.getMessage().split(" ");
|
||||
for (String c : b) {
|
||||
if (this.isYTLink(c)) {
|
||||
String[] d = Utilities.getHTMLPage(c);
|
||||
if (d[0].equals("200")) {
|
||||
String f = Utilities.decodeHTMLEntities(Utilities
|
||||
.getPageTitle(d[1]));
|
||||
f = f.substring(0, f.length() - 10);
|
||||
a.getBot()
|
||||
.sendMessage(a.getChannel(), YoutubeParser.yt + f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getComponentName() {
|
||||
// TODO Auto-generated method stub
|
||||
return "YoutubeParser";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getComponentID() {
|
||||
return 438329;
|
||||
}
|
||||
|
||||
protected boolean wantEventM(Event e) {
|
||||
if (e instanceof MessageEvent) {
|
||||
MessageEvent a = (MessageEvent) e;
|
||||
return a.getMessage().contains("youtu");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isYTLink(String p) {
|
||||
return ((p.startsWith("http://") || p.startsWith("https://")) && (p
|
||||
.contains("://youtu.be/") || ((p
|
||||
.contains("://youtube.com/watch?") || p
|
||||
.contains("://www.youtube.com/watch?")) && p.contains("v="))));
|
||||
}
|
||||
}
|
48
src/be/xrg/evilbotx/parents/EBXComponent.java
Normal file
48
src/be/xrg/evilbotx/parents/EBXComponent.java
Normal file
|
@ -0,0 +1,48 @@
|
|||
package be.xrg.evilbotx.parents;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.pircbotx.hooks.Event;
|
||||
|
||||
import be.xrg.evilbotx.Storage;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public abstract class EBXComponent {
|
||||
protected Storage s;
|
||||
private ArrayList<Class> c;
|
||||
|
||||
private EBXComponent(Storage s) {
|
||||
this.c = new ArrayList<Class>();
|
||||
this.s = s;
|
||||
}
|
||||
|
||||
public EBXComponent(Storage s, Class a) {
|
||||
this(s);
|
||||
this.c.add(a);
|
||||
}
|
||||
|
||||
public EBXComponent(Storage s, Class[] a) {
|
||||
this(s);
|
||||
this.c.addAll(Arrays.asList(a));
|
||||
}
|
||||
|
||||
public boolean wantEvent(Event e) {
|
||||
for (Class a : this.c) {
|
||||
if (a.isInstance(e)) {
|
||||
return (true && this.wantEventM(e));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected boolean wantEventM(Event e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public abstract void handleEvent(Event e);
|
||||
|
||||
public abstract String getComponentName();
|
||||
|
||||
public abstract int getComponentID();
|
||||
}
|
30
src/be/xrg/evilbotx/special/CountdownThread.java
Normal file
30
src/be/xrg/evilbotx/special/CountdownThread.java
Normal file
|
@ -0,0 +1,30 @@
|
|||
package be.xrg.evilbotx.special;
|
||||
|
||||
import org.pircbotx.hooks.events.MessageEvent;
|
||||
|
||||
public class CountdownThread extends Thread {
|
||||
public static final boolean load = true;
|
||||
public static String[] countdown = { "5!", "4!", "3!", "2!", "1!",
|
||||
"Smoke!!!!!! 8D--~~~~~~~~~~~~" };
|
||||
@SuppressWarnings("rawtypes")
|
||||
private MessageEvent e;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public CountdownThread(MessageEvent e) {
|
||||
System.out.println("Started new special.Countdown");
|
||||
this.e = e;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
System.out.println("Running special.Countdown");
|
||||
for (int i = 0; i < CountdownThread.countdown.length; i++) {
|
||||
e.getBot().sendMessage(e.getChannel(),
|
||||
"3,14" + CountdownThread.countdown[i]);
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in a new issue