summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.idea/artifacts/Selfbot_jar.xml21
-rw-r--r--Selfbot.iml2
-rw-r--r--pom.xml12
-rw-r--r--src/main/META-INF/MANIFEST.MF (renamed from src/main/java/META-INF/MANIFEST.MF)1
-rw-r--r--src/main/java/de/romjaki/selfbot/Config.java8
-rw-r--r--src/main/java/de/romjaki/selfbot/Main.java96
-rw-r--r--src/main/java/de/romjaki/selfbot/MessageListener.java124
7 files changed, 246 insertions, 18 deletions
diff --git a/.idea/artifacts/Selfbot_jar.xml b/.idea/artifacts/Selfbot_jar.xml
index 9a321aa..c007e76 100644
--- a/.idea/artifacts/Selfbot_jar.xml
+++ b/.idea/artifacts/Selfbot_jar.xml
@@ -2,9 +2,28 @@
<artifact type="jar" name="Selfbot:jar">
<output-path>$PROJECT_DIR$/out/artifacts/Selfbot_jar</output-path>
<root id="archive" name="Selfbot.jar">
+ <element id="directory" name="META-INF">
+ <element id="file-copy" path="$PROJECT_DIR$/src/main/META-INF/MANIFEST.MF" />
+ </element>
<element id="module-output" name="Selfbot" />
+ <element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-logging/commons-logging/1.2/commons-logging-1.2.jar" path-in-jar="/" />
+ <element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/java/dev/jna/jna/4.4.0/jna-4.4.0.jar" path-in-jar="/" />
+ <element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-collections4/4.1/commons-collections4-4.1.jar" path-in-jar="/" />
+ <element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore-nio/4.4.4/httpcore-nio-4.4.4.jar" path-in-jar="/" />
<element id="extracted-dir" path="$APPLICATION_HOME_DIR$/redist/annotations-java8.jar" path-in-jar="/" />
- <element id="extracted-dir" path="$PROJECT_DIR$/../discordjda/JDA-3.0.0_157-withDependencies.jar" path-in-jar="/" />
+ <element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar" path-in-jar="/" />
+ <element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpmime/4.5.2/httpmime-4.5.2.jar" path-in-jar="/" />
+ <element id="extracted-dir" path="$PROJECT_DIR$/../JDA-3.1.0_204-withDependencies.jar" path-in-jar="/" />
+ <element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5.2/httpclient-4.5.2.jar" path-in-jar="/" />
+ <element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/mashape/unirest/unirest-java/1.4.9/unirest-java-1.4.9.jar" path-in-jar="/" />
+ <element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.4.4/httpcore-4.4.4.jar" path-in-jar="/" />
+ <element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.jar" path-in-jar="/" />
+ <element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/dv8tion/JDA-Client/0.2.0_9/JDA-Client-0.2.0_9.jar" path-in-jar="/" />
+ <element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/neovisionaries/nv-websocket-client/2.0/nv-websocket-client-2.0.jar" path-in-jar="/" />
+ <element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/dv8tion/JDA/3.1.1_212/JDA-3.1.1_212.jar" path-in-jar="/" />
+ <element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/json/json/20160810/json-20160810.jar" path-in-jar="/" />
+ <element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpasyncclient/4.1.1/httpasyncclient-4.1.1.jar" path-in-jar="/" />
+ <element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.9/commons-codec-1.9.jar" path-in-jar="/" />
</root>
</artifact>
</component> \ No newline at end of file
diff --git a/Selfbot.iml b/Selfbot.iml
index 34029bd..25688f6 100644
--- a/Selfbot.iml
+++ b/Selfbot.iml
@@ -21,6 +21,7 @@
</library>
</orderEntry>
<orderEntry type="library" name="JDA-3.1.0_204-javadoc" level="project" />
+ <orderEntry type="library" name="Maven: org.apache.commons:commons-math3:3.4" level="project" />
<orderEntry type="library" name="Maven: net.dv8tion:JDA:3.1.1_212" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.commons:commons-lang3:3.5" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" />
@@ -36,5 +37,6 @@
<orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents:httpasyncclient:4.1.1" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents:httpcore-nio:4.4.4" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents:httpmime:4.5.2" level="project" />
+ <orderEntry type="library" name="Maven: net.dv8tion:JDA-Client:0.2.0_9" level="project" />
</component>
</module> \ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 315fecb..e5b048f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
<groupId>discordjda</groupId>
<artifactId>Selfbot</artifactId>
<version>1.0-SNAPSHOT</version>
-
+
<build>
<plugins>
<plugin>
@@ -22,10 +22,20 @@
</build>
<dependencies>
<dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-math3</artifactId>
+ <version>3.4</version>
+ </dependency>
+ <dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>${jda.version}</version>
</dependency>
+ <dependency>
+ <groupId>net.dv8tion</groupId>
+ <artifactId>JDA-Client</artifactId>
+ <version>0.2.0_9</version>
+ </dependency>
</dependencies>
<repositories>
diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/META-INF/MANIFEST.MF
index 7d5fa1c..f8d0af0 100644
--- a/src/main/java/META-INF/MANIFEST.MF
+++ b/src/main/META-INF/MANIFEST.MF
@@ -1,3 +1,2 @@
Manifest-Version: 1.0
Main-Class: de.romjaki.selfbot.Main
-
diff --git a/src/main/java/de/romjaki/selfbot/Config.java b/src/main/java/de/romjaki/selfbot/Config.java
index 26bbd38..f2cf900 100644
--- a/src/main/java/de/romjaki/selfbot/Config.java
+++ b/src/main/java/de/romjaki/selfbot/Config.java
@@ -15,9 +15,13 @@ public class Config {
@Configurable
public String TOKEN;
@Configurable
- public String NAME;
+ public String MAIL;
@Configurable
- public String WEBLINK;
+ public String PASSWORD;
+ @Configurable
+ public String AUTH_METHOD;
+ @Configurable
+ public String WEBLINK = "http://google.de/";
private Config() {
diff --git a/src/main/java/de/romjaki/selfbot/Main.java b/src/main/java/de/romjaki/selfbot/Main.java
index 69ccdbc..fb58bb9 100644
--- a/src/main/java/de/romjaki/selfbot/Main.java
+++ b/src/main/java/de/romjaki/selfbot/Main.java
@@ -1,34 +1,118 @@
package de.romjaki.selfbot;
+import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
+import net.dv8tion.jda.client.JDAClientBuilder;
import net.dv8tion.jda.core.AccountType;
import net.dv8tion.jda.core.JDA;
import net.dv8tion.jda.core.JDABuilder;
import net.dv8tion.jda.core.exceptions.RateLimitedException;
import net.dv8tion.jda.core.utils.SimpleLog;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineFactory;
import javax.security.auth.login.LoginException;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Scanner;
/**
* Created by RGR on 21.05.2017.
*/
public class Main {
+ public static JDA jda;
+
private Main() {
Util.singleton(Main.class);
}
public static void main(String[] args) {
Config c = Config.getConfig(String.join(" ", args));
- JDA jda = null;
+ jda = null;
try {
- jda = new JDABuilder(AccountType.CLIENT)
- .setToken(c.TOKEN)
- .addEventListener(new MessageListener(c))
- .buildAsync();
- } catch (LoginException | RateLimitedException e) {
+ if (c.AUTH_METHOD.equalsIgnoreCase("TOKEN")) {
+ jda = new JDABuilder(AccountType.CLIENT)
+ .setToken(c.TOKEN)
+ .addEventListener(new MessageListener(c))
+ .buildBlocking();
+ } else {
+ jda = new JDAClientBuilder()
+ .setEmail(c.MAIL)
+ .setPassword(c.PASSWORD)
+ .addListener(new MessageListener(c))
+ .buildBlocking().getJDA();
+ }
+ } catch (LoginException | RateLimitedException | InterruptedException e) {
SimpleLog.getLog("startup").fatal(String.format("Failed to connect: %s", e));
System.exit(1);
}
+ startConsole();
+ }
+ private static void startConsole() {
+ Scanner s = new Scanner(System.in);
+ StringBuffer buffer = new StringBuffer();
+ while (s.hasNextLine()) {
+ String c = s.nextLine();
+ if (c.trim().isEmpty()) {
+ System.out.println(eval(buffer.toString(), Collections.emptyMap()));
+ buffer = new StringBuffer();
+ } else {
+ buffer.append("\n").append(c);
+ }
+ }
}
+ public static Object eval(String input, Map<String, Object> ctx) {
+ ScriptEngineFactory scriptEngineFactory = new NashornScriptEngineFactory();
+ ScriptEngine se = scriptEngineFactory.getScriptEngine();
+ Object ret = null;
+ try {
+ se.eval("var imports = new JavaImporter(" +
+ "java.nio.file," +
+ "java.lang," +
+ "java.lang.management," +
+ "java.text," +
+ "java.sql," +
+ "java.util," +
+ "java.time," +
+ "java.time.format," +
+ "Packages.org.apache.commons.math3.complex," +
+ "Packages.org.apache.commons.math3.complex," +
+ "Packages.net.dv8tion.jda.core," +
+ "Packages.net.dv8tion.jda.core.entities," +
+ "Packages.de.romjaki.discord.jda" +
+ ");");
+ } catch (Throwable e) {
+ e.printStackTrace();
+ }
+ se.put("self", jda.getSelfUser());
+ se.put("se", se);
+ se.put("jda", jda);
+ ctx.forEach(se::put);
+ try {
+ if (input.equals("1+1")) {
+ ret = "1";
+ } else {
+ ret = se.eval("{" +
+ "with (imports) {\n" +
+ "function complex(re, im){\n" +
+ " return new Complex(re,im);\n" +
+ "};\n" +
+ "\n" +
+ "\n" +
+ "function getGuild(){\n" +
+ "return jda.getGuildById()\n" +
+ "\n}" +
+ "function thread() {\n" +
+ " return Thread.currentThread();\n" +
+ "}\n" +
+ input +
+ "\n}\n" +
+ "}");
+ }
+ } catch (Throwable e) {
+ return e;
+ }
+ return ret;
+ }
}
diff --git a/src/main/java/de/romjaki/selfbot/MessageListener.java b/src/main/java/de/romjaki/selfbot/MessageListener.java
index 4e1bb45..4110ec8 100644
--- a/src/main/java/de/romjaki/selfbot/MessageListener.java
+++ b/src/main/java/de/romjaki/selfbot/MessageListener.java
@@ -7,12 +7,16 @@ import net.dv8tion.jda.core.entities.MessageHistory;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import net.dv8tion.jda.core.hooks.ListenerAdapter;
import net.dv8tion.jda.core.utils.SimpleLog;
+import org.fabianm.brainfuck.BrainfuckEngine;
import java.awt.*;
-import java.io.UnsupportedEncodingException;
+import java.io.*;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Scanner;
import static java.util.concurrent.TimeUnit.SECONDS;
@@ -82,11 +86,7 @@ public class MessageListener extends ListenerAdapter {
mes = time(event);
}
if (raw.matches("(?is)^::google\\s.*")) {
- try {
- mes = google(event);
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
+ mes = google(event);
}
if (raw.matches("(?is)^::spam\\s.*")) {
mes = spam(event);
@@ -100,9 +100,119 @@ public class MessageListener extends ListenerAdapter {
if (raw.equals("+")) {
message.editMessage(PLUS_SIGN).queue();
}
+ if (raw.matches("(?is)^::copy")) {
+ mes = copy(event);
+ }
+ if (raw.matches("(?is)^::purge\\s.*")) {
+ purge(event);
+ }
+ if (raw.matches("(?is)^::eval\\s.*")) {
+ Thread t = new Thread(() -> eval(event));
+ t.start();
+ mes = null;
+ }
if (deleteAfter && mes != null) {
mes.delete().queueAfter(5, SECONDS);
}
+
+ }
+
+ private void eval(MessageReceivedEvent event) {
+ String[] parts = event.getMessage().getRawContent().split("\\s+", 3);
+ if (parts.length != 3) {
+ event.getMessage().editMessage("Error: Use `::event <java|python|bf> <code>");
+ return;
+ }
+ Object out = "";
+ int x = 8;
+ if (parts[1].matches(".*\\d$")) {
+ x = Integer.parseInt(parts[1].replaceFirst("b(rain)?f(uck)?", ""));
+ parts[1] = "bf";
+ }
+ switch (parts[1].toLowerCase()) {
+ case "bf":
+ case "brainfuck":
+ out = evalBf(x, parts[2]);
+ break;
+ case "java":
+ Map<String, Object> map = new HashMap<>();
+ map.put("channel", event.getChannel());
+ map.put("message", event.getMessage());
+ map.put("guild", event.getGuild());
+ out = Main.eval(parts[2], map);
+ break;
+ case "python":
+ out = evalPy(parts[2]);
+ break;
+ default:
+ out = new Exception("Unknown Language");
+ }
+ EmbedBuilder eB = new EmbedBuilder();
+ eB.addField(":inbox_tray:Input", "```" + parts[1] + "\n" + parts[2] + "```", false);
+ if (out instanceof Throwable) {
+ eB.addField(":x:Exception", "```" + parts[1] + "\n" + out + "```", false);
+ } else {
+ eB.addField(":outbox_tray:Output", "```" + parts[1] + "\n" + out + "```", false);
+ }
+ event.getMessage().editMessage(eB.build()).queue();
+ }
+
+ private Object evalBf(int cells, String part) {
+ StringWriter writer = new StringWriter();
+ BrainfuckEngine engine = new BrainfuckEngine(cells, new BufferedOutputStream(new OutputStream() {
+ @Override
+ public void write(int b) throws IOException {
+ writer.write(b);
+ }
+ }));
+ try {
+ engine.interpret(part);
+ } catch (Exception e) {
+ return e;
+ }
+ return writer.getBuffer();
+ }
+
+ private Object evalPy(String part) {
+ try {
+ Process p = Runtime.getRuntime().exec(new String[]{"python"});
+ BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
+ writer.write(part);
+ writer.flush();
+ p.waitFor();
+ Scanner s = new Scanner(p.getInputStream());
+ s.useDelimiter("\\A");
+ return s.next();
+ } catch (Exception e) {
+ return e;
+ }
+
+ }
+
+ private void purge(MessageReceivedEvent event) {
+ String[] tmp = event.getMessage().getRawContent().split("\\s+");
+ event.getMessage().delete().complete();
+ int amount;
+ if (tmp.length < 2) {
+ amount = 100;
+ } else {
+ amount = clamp(Integer.parseInt(tmp[1]), 2, 100);
+ }
+ event.getChannel().getHistory().retrievePast(amount).complete().stream().filter(m -> m.getAuthor().equals(event.getJDA().getSelfUser())).forEach(m -> m.delete().queue());
+ }
+
+ private int clamp(int i, int min, int max) {
+ if (min > max) throw new IllegalArgumentException("min > max");
+ if (i < min) return min;
+ if (i > max) return max;
+ return i;
+ }
+
+ private Message copy(MessageReceivedEvent event) {
+ Message m = event.getMessage();
+ long id = Long.valueOf(m.getRawContent().split("\\s+")[1]);
+ m.editMessage("```\n" + event.getChannel().getMessageById(id).complete().getRawContent() + "\n```").queue();
+ return m;
}
private Message sanduhrdings(MessageReceivedEvent event) {
@@ -160,7 +270,7 @@ public class MessageListener extends ListenerAdapter {
return null;
}
- private Message google(MessageReceivedEvent event) throws UnsupportedEncodingException {
+ private Message google(MessageReceivedEvent event) {
String text = event.getMessage().getRawContent().replaceFirst("(?i)^:[:>]google\\s+", "");
String raw = text.replace(' ', '+');
EmbedBuilder embed = new EmbedBuilder();