diff options
-rw-r--r-- | .idea/artifacts/Selfbot_jar.xml | 21 | ||||
-rw-r--r-- | Selfbot.iml | 2 | ||||
-rw-r--r-- | pom.xml | 12 | ||||
-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.java | 8 | ||||
-rw-r--r-- | src/main/java/de/romjaki/selfbot/Main.java | 96 | ||||
-rw-r--r-- | src/main/java/de/romjaki/selfbot/MessageListener.java | 124 |
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 @@ -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(); |