From 816d802b133cbc3f9eeb7d9cd2f12dcadf95ed06 Mon Sep 17 00:00:00 2001 From: mdway Date: Mon, 5 Jun 2017 19:17:57 +0200 Subject: Initial commit --- .idea/artifacts/Selfbot_jar.xml | 10 + .idea/compiler.xml | 16 ++ .idea/kotlinc.xml | 7 + .idea/libraries/JDA_3_1_0_204_javadoc.xml | 13 ++ ...ven__com_mashape_unirest_unirest_java_1_4_9.xml | 13 ++ ..._com_neovisionaries_nv_websocket_client_2_0.xml | 13 ++ .../Maven__commons_codec_commons_codec_1_9.xml | 13 ++ .../Maven__commons_logging_commons_logging_1_2.xml | 13 ++ .../libraries/Maven__net_dv8tion_JDA_3_1_1_212.xml | 13 ++ .../Maven__net_java_dev_jna_jna_4_4_0.xml | 13 ++ .../Maven__net_sf_trove4j_trove4j_3_0_3.xml | 13 ++ ...org_apache_commons_commons_collections4_4_1.xml | 13 ++ ...Maven__org_apache_commons_commons_lang3_3_5.xml | 13 ++ ...apache_httpcomponents_httpasyncclient_4_1_1.xml | 13 ++ ..._org_apache_httpcomponents_httpclient_4_5_2.xml | 13 ++ ...n__org_apache_httpcomponents_httpcore_4_4_4.xml | 13 ++ ...rg_apache_httpcomponents_httpcore_nio_4_4_4.xml | 13 ++ ...n__org_apache_httpcomponents_httpmime_4_5_2.xml | 13 ++ .idea/libraries/Maven__org_json_json_20160810.xml | 13 ++ .idea/misc.xml | 13 ++ .idea/modules.xml | 8 + Selfbot.iml | 40 ++++ pom.xml | 43 +++++ src/main/java/META-INF/MANIFEST.MF | 3 + src/main/java/de/romjaki/selfbot/Config.java | 85 +++++++++ src/main/java/de/romjaki/selfbot/Configurable.java | 14 ++ src/main/java/de/romjaki/selfbot/Main.java | 34 ++++ .../java/de/romjaki/selfbot/MessageListener.java | 206 +++++++++++++++++++++ src/main/java/de/romjaki/selfbot/Rot.java | 140 ++++++++++++++ src/main/java/de/romjaki/selfbot/Util.java | 34 ++++ 30 files changed, 861 insertions(+) create mode 100644 .idea/artifacts/Selfbot_jar.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/kotlinc.xml create mode 100644 .idea/libraries/JDA_3_1_0_204_javadoc.xml create mode 100644 .idea/libraries/Maven__com_mashape_unirest_unirest_java_1_4_9.xml create mode 100644 .idea/libraries/Maven__com_neovisionaries_nv_websocket_client_2_0.xml create mode 100644 .idea/libraries/Maven__commons_codec_commons_codec_1_9.xml create mode 100644 .idea/libraries/Maven__commons_logging_commons_logging_1_2.xml create mode 100644 .idea/libraries/Maven__net_dv8tion_JDA_3_1_1_212.xml create mode 100644 .idea/libraries/Maven__net_java_dev_jna_jna_4_4_0.xml create mode 100644 .idea/libraries/Maven__net_sf_trove4j_trove4j_3_0_3.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_collections4_4_1.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml create mode 100644 .idea/libraries/Maven__org_apache_httpcomponents_httpasyncclient_4_1_1.xml create mode 100644 .idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_2.xml create mode 100644 .idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_4.xml create mode 100644 .idea/libraries/Maven__org_apache_httpcomponents_httpcore_nio_4_4_4.xml create mode 100644 .idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_2.xml create mode 100644 .idea/libraries/Maven__org_json_json_20160810.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 Selfbot.iml create mode 100644 pom.xml create mode 100644 src/main/java/META-INF/MANIFEST.MF create mode 100644 src/main/java/de/romjaki/selfbot/Config.java create mode 100644 src/main/java/de/romjaki/selfbot/Configurable.java create mode 100644 src/main/java/de/romjaki/selfbot/Main.java create mode 100644 src/main/java/de/romjaki/selfbot/MessageListener.java create mode 100644 src/main/java/de/romjaki/selfbot/Rot.java create mode 100644 src/main/java/de/romjaki/selfbot/Util.java diff --git a/.idea/artifacts/Selfbot_jar.xml b/.idea/artifacts/Selfbot_jar.xml new file mode 100644 index 0000000..9a321aa --- /dev/null +++ b/.idea/artifacts/Selfbot_jar.xml @@ -0,0 +1,10 @@ + + + $PROJECT_DIR$/out/artifacts/Selfbot_jar + + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..8e66cc3 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 0000000..1c24f9a --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/libraries/JDA_3_1_0_204_javadoc.xml b/.idea/libraries/JDA_3_1_0_204_javadoc.xml new file mode 100644 index 0000000..2b515a5 --- /dev/null +++ b/.idea/libraries/JDA_3_1_0_204_javadoc.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_mashape_unirest_unirest_java_1_4_9.xml b/.idea/libraries/Maven__com_mashape_unirest_unirest_java_1_4_9.xml new file mode 100644 index 0000000..d7792cc --- /dev/null +++ b/.idea/libraries/Maven__com_mashape_unirest_unirest_java_1_4_9.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_neovisionaries_nv_websocket_client_2_0.xml b/.idea/libraries/Maven__com_neovisionaries_nv_websocket_client_2_0.xml new file mode 100644 index 0000000..40e5e15 --- /dev/null +++ b/.idea/libraries/Maven__com_neovisionaries_nv_websocket_client_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_codec_commons_codec_1_9.xml b/.idea/libraries/Maven__commons_codec_commons_codec_1_9.xml new file mode 100644 index 0000000..a66d039 --- /dev/null +++ b/.idea/libraries/Maven__commons_codec_commons_codec_1_9.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_logging_commons_logging_1_2.xml b/.idea/libraries/Maven__commons_logging_commons_logging_1_2.xml new file mode 100644 index 0000000..eab40b3 --- /dev/null +++ b/.idea/libraries/Maven__commons_logging_commons_logging_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_dv8tion_JDA_3_1_1_212.xml b/.idea/libraries/Maven__net_dv8tion_JDA_3_1_1_212.xml new file mode 100644 index 0000000..c33b566 --- /dev/null +++ b/.idea/libraries/Maven__net_dv8tion_JDA_3_1_1_212.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_java_dev_jna_jna_4_4_0.xml b/.idea/libraries/Maven__net_java_dev_jna_jna_4_4_0.xml new file mode 100644 index 0000000..497fb5f --- /dev/null +++ b/.idea/libraries/Maven__net_java_dev_jna_jna_4_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_sf_trove4j_trove4j_3_0_3.xml b/.idea/libraries/Maven__net_sf_trove4j_trove4j_3_0_3.xml new file mode 100644 index 0000000..72d4d7e --- /dev/null +++ b/.idea/libraries/Maven__net_sf_trove4j_trove4j_3_0_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_1.xml b/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_1.xml new file mode 100644 index 0000000..1e0b53d --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml new file mode 100644 index 0000000..666266c --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpasyncclient_4_1_1.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpasyncclient_4_1_1.xml new file mode 100644 index 0000000..8484ecb --- /dev/null +++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpasyncclient_4_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_2.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_2.xml new file mode 100644 index 0000000..fdb7ead --- /dev/null +++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_4.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_4.xml new file mode 100644 index 0000000..3a5aa19 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_nio_4_4_4.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_nio_4_4_4.xml new file mode 100644 index 0000000..1dab39e --- /dev/null +++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_nio_4_4_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_2.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_2.xml new file mode 100644 index 0000000..4b2025a --- /dev/null +++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_json_json_20160810.xml b/.idea/libraries/Maven__org_json_json_20160810.xml new file mode 100644 index 0000000..774f062 --- /dev/null +++ b/.idea/libraries/Maven__org_json_json_20160810.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..5755a99 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..3decb3b --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Selfbot.iml b/Selfbot.iml new file mode 100644 index 0000000..34029bd --- /dev/null +++ b/Selfbot.iml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..315fecb --- /dev/null +++ b/pom.xml @@ -0,0 +1,43 @@ + + + 4.0.0 + + discordjda + Selfbot + 1.0-SNAPSHOT + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + + + net.dv8tion + JDA + ${jda.version} + + + + + + jcenter + jcenter-bintray + http://jcenter.bintray.com + + + + + 3.1.1_212 + + + \ No newline at end of file diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF new file mode 100644 index 0000000..7d5fa1c --- /dev/null +++ b/src/main/java/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..26bbd38 --- /dev/null +++ b/src/main/java/de/romjaki/selfbot/Config.java @@ -0,0 +1,85 @@ +package de.romjaki.selfbot; + +import net.dv8tion.jda.core.utils.SimpleLog; + +import java.io.*; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.Scanner; +import java.util.stream.Stream; + +/** + * Created by RGR on 21.05.2017. + */ +public class Config { + @Configurable + public String TOKEN; + @Configurable + public String NAME; + @Configurable + public String WEBLINK; + + + private Config() { + } + + public static Config getConfig(String file) { + return getConfig(new File(file)); + } + + public static Config getConfig(File file) { + if (file.isDirectory()) { + SimpleLog.getLog("startup").fatal("Config file is a directory"); + System.exit(1); + } + try (Scanner s = new Scanner(file)) { + Config c = new Config(); + Class clazz = c.getClass(); + while (s.hasNextLine()) { + String line = s.nextLine(); + String[] tmp = line.split(":", 2); + String key = tmp[0].trim(); + String val = tmp[1].trim(); + if (val.isEmpty()) continue; + try { + Field f = clazz.getField(key.toUpperCase()); + if (f == null || !f.isAnnotationPresent(Configurable.class) || Modifier.isStatic(f.getModifiers())) + continue; + f.set(c, val); + } catch (Exception e) { + continue; + } + } + return c; + } catch (FileNotFoundException e) { + SimpleLog.getLog("startup").fatal("Config not found. Trying to generate file. Fill in the information and restart."); + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + if (!file.getParentFile().exists()) { + SimpleLog.getLog("startup").fatal(String.format("Failed to create config directory. %s", e)); + System.exit(1); + } + } + if (!file.exists()) { + Config.writeTemplateToFile(file); + } + System.exit(1); + } + return null; + } + + private static void writeTemplateToFile(File file) { + try (PrintStream ps = new PrintStream(new BufferedOutputStream(new FileOutputStream(file)))) { + ps.print(buildTemplate()); + } catch (IOException e) { + SimpleLog.getLog("startup").fatal(String.format("Failed to write template to file. %s", e)); + System.exit(1); + } + } + + private static String buildTemplate() { + StringBuilder sb = new StringBuilder(); + Stream.of(Config.class.getFields()).forEach(s -> sb.append(s.getName().toUpperCase()).append(':').append(System.lineSeparator())); + return sb.toString(); + } +} diff --git a/src/main/java/de/romjaki/selfbot/Configurable.java b/src/main/java/de/romjaki/selfbot/Configurable.java new file mode 100644 index 0000000..f690a4a --- /dev/null +++ b/src/main/java/de/romjaki/selfbot/Configurable.java @@ -0,0 +1,14 @@ +package de.romjaki.selfbot; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Created by RGR on 21.05.2017. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +public @interface Configurable { +} diff --git a/src/main/java/de/romjaki/selfbot/Main.java b/src/main/java/de/romjaki/selfbot/Main.java new file mode 100644 index 0000000..69ccdbc --- /dev/null +++ b/src/main/java/de/romjaki/selfbot/Main.java @@ -0,0 +1,34 @@ +package de.romjaki.selfbot; + +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.security.auth.login.LoginException; + +/** + * Created by RGR on 21.05.2017. + */ +public class Main { + private Main() { + Util.singleton(Main.class); + } + + public static void main(String[] args) { + Config c = Config.getConfig(String.join(" ", args)); + JDA jda = null; + try { + jda = new JDABuilder(AccountType.CLIENT) + .setToken(c.TOKEN) + .addEventListener(new MessageListener(c)) + .buildAsync(); + } catch (LoginException | RateLimitedException e) { + SimpleLog.getLog("startup").fatal(String.format("Failed to connect: %s", e)); + System.exit(1); + } + + } + +} diff --git a/src/main/java/de/romjaki/selfbot/MessageListener.java b/src/main/java/de/romjaki/selfbot/MessageListener.java new file mode 100644 index 0000000..ac166e1 --- /dev/null +++ b/src/main/java/de/romjaki/selfbot/MessageListener.java @@ -0,0 +1,206 @@ +package de.romjaki.selfbot; + +import net.dv8tion.jda.core.EmbedBuilder; +import net.dv8tion.jda.core.entities.Game; +import net.dv8tion.jda.core.entities.Message; +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 java.awt.*; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Field; +import java.text.SimpleDateFormat; +import java.util.Date; + +import static java.util.concurrent.TimeUnit.SECONDS; + +/** + * Created by RGR on 21.05.2017. + */ +public class MessageListener extends ListenerAdapter { + private static final Rot rotter = new Rot(); + private Config config; + + public MessageListener(Config c) { + this.config = c; + } + + @Override + public void onMessageReceived(MessageReceivedEvent event) { + if (!event.getAuthor().equals(event.getJDA().getSelfUser())) { + return; + } + Message message = event.getMessage(); + String raw = message.getRawContent(); + Message mes = null; + boolean deleteAfter = false; + if (raw.startsWith(":>")) { + raw = raw.replaceFirst(":>", "::"); + deleteAfter = true; + } + if (raw.matches("(?si)^::embed\\s.*")) { + mes = embed(event); + } + if (raw.matches("(?is)^::cite\\s.*")) { + mes = cite(event); + } + if (raw.matches("(?si)^::game\\s.*")) { + mes = game(event); + } + if (raw.matches("(?is)^::time.*")) { + mes = time(event); + } + if (raw.matches("(?is)^::google\\s.*")) { + try { + mes = google(event); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + if (raw.matches("(?is)^::spam\\s.*")) { + mes = spam(event); + } + if (raw.matches("(?is)^::rot\\s.+")) { + mes = rot(event); + } + if (deleteAfter && mes != null) { + mes.delete().queueAfter(5, SECONDS); + } + } + + private Message rot(MessageReceivedEvent event) { + String[] parts = event.getMessage().getRawContent().replaceFirst("(?i)^:[:>]rot\\s+", "").split("\\s+", 2); + event.getMessage().delete().queue(); + if (parts.length < 2) { + return event.getChannel().sendMessage(new EmbedBuilder() + .setTitle("Error") + .setColor(Color.red) + .setDescription("Too few arguments: `::rot `") + .build()).complete(); + } + int rot = Integer.parseInt(parts[0]) % 26; + String message = parts[1]; + + return event.getChannel().sendMessage(rotter.encrypt(message, rot * 2, false)).complete(); + } + + private Message spam(MessageReceivedEvent event) { + String[] tmp = event.getMessage().getRawContent().replaceFirst("(?i)^:[:>]spam\\s+", "").split("\\s+", 2); + if (tmp.length == 0) { + return null; + } + String rep = ""; + int repc = 16; + if (tmp.length == 1) { + rep = tmp[0]; + } + if (tmp.length == 2) { + rep = tmp[1]; + repc = Integer.parseInt(tmp[0]); + } + if (repc > 0) { + StringBuilder txt = new StringBuilder(repc * rep.length()); + for (int i = 0; i < repc; i++) { + txt.append(rep + "\n"); + } + event.getMessage().delete().queue(); + SimpleLog.getLog("command").info(String.format("Command spam executed: {\"text\":\"%s\",count=%d}", rep, repc)); + return event.getChannel().sendMessage(txt.toString()).complete(); + } + if (repc < 0) { + SimpleLog.getLog("command").info(String.format("Command spam executed with separated messages: {\"text\":\"%s\",count=%d}", rep, -repc)); + event.getMessage().delete().queue(); + for (int i = 0; i < -repc; i++) { + event.getChannel().sendMessage(rep).queue(); + } + } + return null; + } + + private Message google(MessageReceivedEvent event) throws UnsupportedEncodingException { + String text = event.getMessage().getRawContent().replaceFirst("(?i)^:[:>]google\\s+", ""); + String raw = text.replace(' ', '+'); + EmbedBuilder embed = new EmbedBuilder(); + embed.setColor(Color.red); + embed.setTitle(text, "https://google.com/search?q=" + raw); + embed.setImage("https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAADwG4/8CFr3X3I_Fs/s0-c-k-no-ns/photo.jpg"); + event.getMessage().delete().queue(); + SimpleLog.getLog("command").info(String.format("Executed command google: {text:\"%s\"", text)); + return event.getChannel().sendMessage(embed.build()).complete(); + } + + private Message time(MessageReceivedEvent event) { + EmbedBuilder embed = new EmbedBuilder(); + embed.setColor(Color.cyan); + embed.setTitle("Uhrzeit", "https://www.google.de/search?q=uhrzeit"); + embed.addField(":timer:", new SimpleDateFormat("HH:mm:ss.SSS").format(new Date()), true); + event.getMessage().delete().queue(); + SimpleLog.getLog("command").info("Executed command time."); + Message ret = event.getChannel().sendMessage(embed.build()).complete(); + return ret; + } + + private Message game(MessageReceivedEvent event) { + String line = event.getMessage().getRawContent(); + String args = line.replaceFirst("(?i)^:[>:]game\\s+", ""); + Game g = Game.of(args); + event.getJDA().getPresence().setGame(g); + SimpleLog.getLog("command").info(String.format("Executed command game: {name: \"%s\"}", args)); + event.getMessage().delete().queue(); + return null; + } + + + private Message cite(MessageReceivedEvent event) { + String line = event.getMessage().getRawContent(); + String[] args = line.replaceFirst("^(?i):[:>]cite\\s+", "").split("\\s+", 2); + EmbedBuilder embed = new EmbedBuilder(); + MessageHistory h = event.getChannel().getHistoryAround(args[0], 2).complete(); + Message cited = h.getMessageById(args[0]); + embed.setAuthor(cited.getAuthor().getName(), "https://discordapp.com", cited.getAuthor().getAvatarUrl()); + embed.setColor(Color.CYAN); + embed.setDescription(cited.getContent()); + embed.addField("**" + event.getJDA().getSelfUser().getName() + "** kommentiert:", args[1], true); + event.getMessage().delete().queue(); + SimpleLog.getLog("command").info(String.format("Executed command cite: {messageId: %s, description:\"%s\"}", cited.getId(), args[1])); + return event.getChannel().sendMessage(embed.build()).complete(); + } + + private Message embed(MessageReceivedEvent event) { + + String line = event.getMessage().getRawContent(); + String[] args = line.replaceFirst("^(?i):[>:]embed\\s+", "").split("\\s+", 2); + EmbedBuilder embed = new EmbedBuilder(); + String text = args[1]; + String color = args[0]; + Color col = Color.green; + if (color.startsWith("#")) { + col = new Color(Integer.parseInt(color.replaceFirst("#", ""), 16)); + } else if (color.matches("^(?i)[a-z]+$")) { + Class clazz = Color.class; + try { + Field f = clazz.getField(color.toLowerCase()); + col = (Color) f.get(null); + } catch (Exception e) { + SimpleLog.getLog("command").info(String.format("Color %s not found.", color)); + } + } else if (color.matches("^[0-9]+$")) { + col = new Color(Integer.valueOf(color)); + } else { + SimpleLog.getLog("command").info(String.format("No match found: %s", color)); + } + embed.setColor(col); + if (text.contains("\n")) { + String[] tmp = text.split("\n", 2); + embed.setTitle(tmp[0], config.WEBLINK); + embed.setDescription(tmp[1]); + } else { + embed.setDescription(text); + } + event.getMessage().delete().queue(); + SimpleLog.getLog("command").info(String.format("Executed \"embed\" command: {color:\"%s\",text:\"%s\"}", col, text)); + return event.getChannel().sendMessage(embed.build()).complete(); + } +} diff --git a/src/main/java/de/romjaki/selfbot/Rot.java b/src/main/java/de/romjaki/selfbot/Rot.java new file mode 100644 index 0000000..5dfb44f --- /dev/null +++ b/src/main/java/de/romjaki/selfbot/Rot.java @@ -0,0 +1,140 @@ +package de.romjaki.selfbot; + +import java.util.ArrayList; + +/** + * COMP 249 - Assignment 4 Q1 + * Due Friday, April 11, 2014 + * + * Rot-N algorithm, Encryption / Decryption + * @version 1.0 + * */ +public class Rot { + private ArrayList letters; + private ArrayList encryptedLetters; + + public Rot(){ + letters = new ArrayList(); + encryptedLetters = new ArrayList(); + } + + /** + * Encrypt text + * @param message Message to encrypt + * @param rotN Rot number + * @param encryptDigit True or False + * @return encrypted message + * */ + public String encrypt(String message, int rotN, boolean encryptDigit){ + String out = ""; + char encryptedCurrent; + char current; + int typeAlpha; + + //clear arrays + letters.clear(); + encryptedLetters.clear(); + + for(int i=0; i 'z' || typeAlpha == 2 && encryptedCurrent > 'Z') + encryptedCurrent -= 'z' - 'a' + 1; + }else if(encryptDigit && isNumeric(current)){ + encryptedCurrent = (char) (current + rotN%10); + if(encryptedCurrent > '9') + encryptedCurrent -= '9' - '0' + 1; + } else { + encryptedCurrent = current; + } + + if((typeAlpha != 0 || (isNumeric(current) && encryptDigit)) && letters.indexOf(current+"") == -1){ + letters.add(current+""); + encryptedLetters.add(encryptedCurrent+""); + } + + out += encryptedCurrent; + } + return out; + } + + /** + * Decrypt text + * @param message Message to decrypt + * @param rotN Rot number + * @param decryptDigit True or False + * @return decrypted message + * */ + public String decrypt(String message, int rotN, boolean decryptDigit){ + String out = ""; + char encryptedCurrent; + char current; + int typeAlpha; + + //clear arrays + letters.clear(); + encryptedLetters.clear(); + + for(int i=0; i Lowercase, 2 => Uppercase, 3 => Not alpha + * */ + public int typeAlpha(char c) { + if(c >= 'a' && c <= 'z') + return 1; + if(c >= 'A' && c <= 'Z') + return 2; + return 0; + } + + /** + * Check if character is a number + * @param c Character + * @return true or false + * */ + public boolean isNumeric(char c) { + return c >= '0' && c <= '9'; + } + + /** + * Get original letters + * @return original letters + * */ + public ArrayList getLetters(){ + return letters; + } + + /** + * Get encrypted letters + * @return encrypted/decrypted letters + * */ + public ArrayList getEncryptedLetters(){ + return encryptedLetters; + } +} \ No newline at end of file diff --git a/src/main/java/de/romjaki/selfbot/Util.java b/src/main/java/de/romjaki/selfbot/Util.java new file mode 100644 index 0000000..892ca15 --- /dev/null +++ b/src/main/java/de/romjaki/selfbot/Util.java @@ -0,0 +1,34 @@ +package de.romjaki.selfbot; + +import net.dv8tion.jda.core.entities.TextChannel; +import org.jetbrains.annotations.Contract; + +/** + * Created by RGR on 19.05.2017. + */ +public class Util { + @Contract(value = " -> fail", pure = true) + private Util() { + Util.singleton(Util.class); + } + + @Contract(pure = true, value = "_ -> fail") + public static void singleton(Class clazz) { + throw new Error("No " + clazz.toGenericString() + " instances for you!"); + } + + @Contract(pure = true, value = "null -> fail") + public static boolean isBotChannel(TextChannel channel) { + return channel.getName().toLowerCase().contains("bot"); + } + + + @Contract(pure = true, value = "null -> fail ; !null -> !null") + public static String escape(String join) { + return join.replace("\\", "\\\\").replace("\"", "\\\"").replace("\n", "\\n").replace("\t", "\\t"); + } + + public static int clamp(int min, int max, int val) { + return val < min ? min : (val > max ? max : val); + } +} -- cgit