diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7c87a17 --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +*.xml + +SECRETS.java diff --git a/Diagramm.jpg b/Diagramm.jpg new file mode 100644 index 0000000..a19aa70 Binary files /dev/null and b/Diagramm.jpg differ diff --git a/README.md b/README.md index b28d5fe..d5a3c69 100644 --- a/README.md +++ b/README.md @@ -1 +1,2 @@ -# Discord-Data-Mining \ No newline at end of file +# Discord-Data-Mining +The official Discord-Data-Mining diff --git a/src/META-INF/MANIFEST.MF b/src/META-INF/MANIFEST.MF new file mode 100644 index 0000000..ad0cb84 --- /dev/null +++ b/src/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: discord.data.mining.Main + diff --git a/src/main/java/discord/data/mining/Listener/eventListener.java b/src/main/java/discord/data/mining/Listener/eventListener.java new file mode 100644 index 0000000..74ee96d --- /dev/null +++ b/src/main/java/discord/data/mining/Listener/eventListener.java @@ -0,0 +1,33 @@ +package discord.data.mining.Listener; + +import discord.data.mining.Main; +import discord.data.mining.sendMessage; +import net.dv8tion.jda.core.AccountType; +import net.dv8tion.jda.core.EmbedBuilder; +import net.dv8tion.jda.core.JDA; +import net.dv8tion.jda.core.JDABuilder; +import net.dv8tion.jda.core.events.Event; +import net.dv8tion.jda.core.events.ReadyEvent; +import net.dv8tion.jda.core.events.message.MessageReceivedEvent; +import net.dv8tion.jda.core.hooks.ListenerAdapter; + +import java.awt.*; + + +/** + * @author GregTCLTK + * @time 21:22 29.06.2018 + * @project Discord-Data-Mining + * @package discord.data.mining.Listener + * @class onReactionAdd + **/ + + +public class eventListener extends ListenerAdapter { + + @Override + public void onGenericEvent(Event event) { + Main.Messageperh++; + sendMessage.sendMessage(event); + } +} diff --git a/src/main/java/discord/data/mining/Listener/managerListener.java b/src/main/java/discord/data/mining/Listener/managerListener.java new file mode 100644 index 0000000..4dd51eb --- /dev/null +++ b/src/main/java/discord/data/mining/Listener/managerListener.java @@ -0,0 +1,32 @@ +package discord.data.mining.Listener; + +import discord.data.mining.Main; +import net.dv8tion.jda.core.JDA; +import net.dv8tion.jda.core.events.message.MessageReceivedEvent; +import net.dv8tion.jda.core.hooks.ListenerAdapter; + +/** + * @author GregTCLTK + * @time 09:42 01.07.2018 + * @project Discord-Data-Mining + * @package discord.data.mining.Listener + * @class managerListener + **/ + +public class managerListener extends ListenerAdapter { + + @Override + public void onMessageReceived(MessageReceivedEvent event) { + if (event.getAuthor().getId().contains("401817301919465482") || event.getAuthor().getId().contains("261083609148948488")) { + if (event.getMessage().getContentRaw().equals("dm!shutdown")) { + + for (JDA Bots : Main.bots) { + Bots.shutdown(); + } + for (JDA Clients : Main.clients) { + Clients.shutdown(); + } + } + } + } +} diff --git a/src/main/java/discord/data/mining/Listener/onready.java b/src/main/java/discord/data/mining/Listener/onready.java new file mode 100644 index 0000000..27b85c3 --- /dev/null +++ b/src/main/java/discord/data/mining/Listener/onready.java @@ -0,0 +1,44 @@ +package discord.data.mining.Listener; + +import discord.data.mining.Logger; +import discord.data.mining.Main; +import net.dv8tion.jda.core.JDA; +import net.dv8tion.jda.core.entities.Guild; +import net.dv8tion.jda.core.entities.Invite; +import net.dv8tion.jda.core.events.ReadyEvent; +import net.dv8tion.jda.core.hooks.ListenerAdapter; + +/** + * @author Hax + * @time 12:04 30.06.2018 + * @project Discord-Data-Mining + * @package discord.data.mining.Listener + * @class onready + **/ + +public class onready extends ListenerAdapter { + + @Override + public void onReady(ReadyEvent event) { + Logger.info("Client " + event.getJDA().getSelfUser().getName() + "#" +event.getJDA().getSelfUser().getDiscriminator() + "\nGuilds: " + event.getJDA().getGuilds().size() + "\nUser: " + event.getJDA().getUsers().size()); + Main.onlineclients.add(event.getJDA().getSelfUser().getName()); + Logger.info("Arraylist size " + Main.onlineclients.size() + " " + Main.clients.size()); + for (Guild guild : event.getJDA().getGuilds()) { + if (!Main.guilds.contains(guild)) { + Main.guilds.add(guild); + } else { + if (!guild.getId().contains("448554629282922527")) { + Logger.info("Leave" + guild.getName()); + guild.leave().queue(); + } + } + } + if (Main.onlineclients.size() == 3) { + Logger.info("All clients loaded"); + for (JDA jda : Main.clients) { + jda.addEventListener(new eventListener()); + } + } + } + +} diff --git a/src/main/java/discord/data/mining/Logger.java b/src/main/java/discord/data/mining/Logger.java new file mode 100644 index 0000000..fc05378 --- /dev/null +++ b/src/main/java/discord/data/mining/Logger.java @@ -0,0 +1,21 @@ +package discord.data.mining; + +import net.dv8tion.jda.core.EmbedBuilder; + +import java.time.Instant; + +/** + * @author GregTCLTK + * @time 21:26 30.06.2018 + * @project Discord-Data-Mining + * @package discord.data.mining + * @class Logger + **/ + +public class Logger { + public static void info(String info) { + Main.manager.get(0).getTextChannelById(Main.ConsoleLog).sendMessage(new EmbedBuilder().setColor(65280).setTimestamp(Instant.now()).setDescription(info).build()).queue(); + System.out.println("[" + Instant.now() + "] " + info); + // Zeit wird noch gefixt + } +} diff --git a/src/main/java/discord/data/mining/Main.java b/src/main/java/discord/data/mining/Main.java new file mode 100644 index 0000000..3510390 --- /dev/null +++ b/src/main/java/discord/data/mining/Main.java @@ -0,0 +1,50 @@ +package discord.data.mining; + +import discord.data.mining.Listener.eventListener; +import discord.data.mining.Listener.managerListener; +import discord.data.mining.Listener.onready; +import net.dv8tion.jda.core.AccountType; +import net.dv8tion.jda.core.JDA; +import net.dv8tion.jda.core.JDABuilder; +import net.dv8tion.jda.core.entities.Guild; + +import java.util.*; + +import static discord.data.mining.SECRETS.botTokens; +import static discord.data.mining.SECRETS.clienttokens; +import static discord.data.mining.SECRETS.managerTokens; + +public class Main { + + public static long MessageLog = 462507170383134720L; + public static long ReactionLog = 462524422713245696L; + public static long ConsoleLog = 462556910206320640L; + public static ArrayList clients = new ArrayList<>(); + public static ArrayList bots = new ArrayList<>(); + public static ArrayList manager = new ArrayList<>(); + public static int currentBot =0; + public static ArrayList onlineclients = new ArrayList<>(); + public static long Messageperh = 0; + public static ArrayList guilds = new ArrayList<>(); + + public static void main(String[] args) { + try { + for (String Token : managerTokens) { + manager.add(new JDABuilder(AccountType.BOT).setAutoReconnect(true).setToken(Token).addEventListener(new managerListener()).buildAsync()); + } + + Thread.sleep(1500); + + onlinethread.main(); + for (String Token : clienttokens) { + clients.add(new JDABuilder(AccountType.CLIENT).setToken(Token).addEventListener(new onready()).setAutoReconnect(true).buildAsync()); + } + for (String Token : botTokens) { + bots.add(new JDABuilder(AccountType.BOT).setAutoReconnect(true).setToken(Token).buildAsync()); + } + test2.main(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/discord/data/mining/onlinethread.java b/src/main/java/discord/data/mining/onlinethread.java new file mode 100644 index 0000000..01de321 --- /dev/null +++ b/src/main/java/discord/data/mining/onlinethread.java @@ -0,0 +1,20 @@ +package discord.data.mining; + +/** + * @author Hax + * @time 12:01 30.06.2018 + * @project Discord-Data-Mining + * @package discord.data.mining + * @class onlinethread + **/ + +public class onlinethread { + public static void main() { + new Thread(() -> { + while (true) { + + } + }); + } + +} diff --git a/src/main/java/discord/data/mining/sendMessage.java b/src/main/java/discord/data/mining/sendMessage.java new file mode 100644 index 0000000..af43e08 --- /dev/null +++ b/src/main/java/discord/data/mining/sendMessage.java @@ -0,0 +1,87 @@ +package discord.data.mining; + +/** + * @author Skidder + * @time 09:11 30.06.2018 + * @project Discord-Data-Mining + * @package discord.data.mining + * @class sendMessage + **/ + +import net.dv8tion.jda.core.EmbedBuilder; +import net.dv8tion.jda.core.JDA; +import net.dv8tion.jda.core.events.Event; +import net.dv8tion.jda.core.events.message.MessageReceivedEvent; +import net.dv8tion.jda.core.events.message.react.MessageReactionAddEvent; +import net.dv8tion.jda.core.events.message.react.MessageReactionRemoveEvent; + +import java.time.Instant; + +public class sendMessage { + public static void sendMessage(Event inputevent) { + try { + JDA BOT = Main.bots.get(Main.currentBot); + Main.currentBot++; + if (Main.currentBot == Main.bots.size()) Main.currentBot = 0; + if (inputevent instanceof MessageReceivedEvent) { + MessageReceivedEvent event = (MessageReceivedEvent) inputevent; + if (!event.getGuild().getId().equals("448554629282922527")) { + BOT.getTextChannelById(Main.MessageLog) + .sendMessage( + new EmbedBuilder() + .setAuthor(event.getAuthor().getName(), "https://discordapp.com/channels/@me/" + event.getAuthor().getId() + "/", event.getAuthor().getAvatarUrl()).setColor(65280) + .setTitle("New Message", "https://canary.discordapp.com/channels/" + event.getGuild().getId() + "/") + .setDescription("**Message Content:**\n" + event.getMessage().getContentRaw()) + .setThumbnail(event.getGuild().getIconUrl()) + .addField("Guild Name", event.getGuild().getName(), true) + .addField("Guild ID", event.getGuild().getId(), true) + .addField("Guild Owner", event.getGuild().getOwner().getUser().getName() + "#" + event.getGuild().getOwner().getUser().getDiscriminator(), true) + .addField("Channel Name", "#" + event.getChannel().getName(), true) + .setFooter(event.getJDA().getSelfUser().getName(), event.getJDA().getSelfUser().getAvatarUrl()) + .setTimestamp(Instant.now()) + .build() + ).queue(); + } + } else if (inputevent instanceof MessageReactionAddEvent) { + MessageReactionAddEvent event = (MessageReactionAddEvent) inputevent; + if (!event.getGuild().getId().equals("448554629282922527")) { + BOT.getTextChannelById(Main.ReactionLog) + .sendMessage( + new EmbedBuilder() + .setAuthor(event.getMember().getUser().getName(), "https://discordapp.com/channels/@me/" + event.getMember().getUser().getId() + "/", event.getMember().getUser().getAvatarUrl()).setColor(65280) + .setTitle("Reaction Add", "https://canary.discordapp.com/channels/" + event.getGuild().getId() + "/") + .setThumbnail(event.getGuild().getIconUrl()) + .setDescription("**Emoji:**\n" + event.getReactionEmote().getEmote().getAsMention()) + .addField("Guild Name", event.getGuild().getName(), true) + .addField("Guild ID", event.getGuild().getId(), true) + .addField("Guild Owner", event.getGuild().getOwner().getUser().getName() + "#" + event.getGuild().getOwner().getUser().getDiscriminator(), true) + .addField("Channel Name", "#" + event.getChannel().getName(), true) + .setFooter(event.getJDA().getSelfUser().getName(), event.getJDA().getSelfUser().getAvatarUrl()) + .setTimestamp(Instant.now()) + .build() + ).queue(); + } + } else if (inputevent instanceof MessageReactionRemoveEvent) { + MessageReactionRemoveEvent event = (MessageReactionRemoveEvent) inputevent; + if (!event.getGuild().getId().equals("448554629282922527")) { + BOT.getTextChannelById(Main.ReactionLog) + .sendMessage( + new EmbedBuilder() + .setAuthor(event.getMember().getUser().getName(), "https://discordapp.com/channels/@me/" + event.getMember().getUser().getId() + "/", event.getMember().getUser().getAvatarUrl()).setColor(16711680) + .setTitle("Reaction Remove", "https://canary.discordapp.com/channels/" + event.getGuild().getId() + "/") + .setThumbnail(event.getGuild().getIconUrl()) + .setDescription("**Emoji:**\n" + event.getReactionEmote().getEmote().getAsMention()) + .addField("Guild Name", event.getGuild().getName(), true) + .addField("Guild ID", event.getGuild().getId(), true) + .addField("Guild Owner", event.getGuild().getOwner().getUser().getName() + "#" + event.getGuild().getOwner().getUser().getDiscriminator(), true) + .addField("Channel Name", "#" + event.getChannel().getName(), true) + .setFooter(event.getJDA().getSelfUser().getName(), event.getJDA().getSelfUser().getAvatarUrl()) + .setTimestamp(Instant.now()) + .build() + ).queue(); + } + } + } catch (Exception ignore) { + } + } +} \ No newline at end of file diff --git a/src/main/java/discord/data/mining/test.java b/src/main/java/discord/data/mining/test.java new file mode 100644 index 0000000..e24afdb --- /dev/null +++ b/src/main/java/discord/data/mining/test.java @@ -0,0 +1,95 @@ +package discord.data.mining; + +import javax.swing.*; +import java.awt.*; +import java.awt.font.FontRenderContext; +import java.awt.font.LineMetrics; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Line2D; + +/** + * @author Hax + * @time 12:46 30.06.2018 + * @project Discord-Data-Mining + * @package discord.data.mining + * @class test + **/ + +public class test extends JPanel { + + int[] data = { + 21, 14, 18, 03, 86, 88, 74, 87, 54, 77, + 61, 55, 48, 60, 49, 36, 38, 27, 20, 18 + }; + final int PAD = 20; + + protected void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D)g; + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + int w = getWidth(); + int h = getHeight(); + // Draw ordinate. + g2.draw(new Line2D.Double(PAD, PAD, PAD, h-PAD)); + // Draw abcissa. + g2.draw(new Line2D.Double(PAD, h-PAD, w-PAD, h-PAD)); + // Draw labels. + Font font = g2.getFont(); + FontRenderContext frc = g2.getFontRenderContext(); + LineMetrics lm = font.getLineMetrics("0", frc); + float sh = lm.getAscent() + lm.getDescent(); + // Ordinate label. + String s = "data"; + float sy = PAD + ((h - 2*PAD) - s.length()*sh)/2 + lm.getAscent(); + for(int i = 0; i < s.length(); i++) { + String letter = String.valueOf(s.charAt(i)); + float sw = (float)font.getStringBounds(letter, frc).getWidth(); + float sx = (PAD - sw)/2; + g2.drawString(letter, sx, sy); + sy += sh; + } + // Abcissa label. + s = "x axis"; + sy = h - PAD + (PAD - sh)/2 + lm.getAscent(); + float sw = (float)font.getStringBounds(s, frc).getWidth(); + float sx = (w - sw)/2; + g2.drawString(s, sx, sy); + // Draw lines. + double xInc = (double)(w - 2*PAD)/(data.length-1); + double scale = (double)(h - 2*PAD)/getMax(); + g2.setPaint(Color.green.darker()); + for(int i = 0; i < data.length-1; i++) { + double x1 = PAD + i*xInc; + double y1 = h - PAD - scale*data[i]; + double x2 = PAD + (i+1)*xInc; + double y2 = h - PAD - scale*data[i+1]; + g2.draw(new Line2D.Double(x1, y1, x2, y2)); + } + // Mark data points. + g2.setPaint(Color.red); + for(int i = 0; i < data.length; i++) { + double x = PAD + i*xInc; + double y = h - PAD - scale*data[i]; + g2.fill(new Ellipse2D.Double(x-2, y-2, 4, 4)); + } + } + + private int getMax() { + int max = -Integer.MAX_VALUE; + for(int i = 0; i < data.length; i++) { + if(data[i] > max) + max = data[i]; + } + return max; + } + + public static void main(String[] args) { + JFrame f = new JFrame(); + f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + f.add(new test()); + f.setSize(400,400); + f.setLocation(200,200); + f.setVisible(true); + } +} diff --git a/src/main/java/discord/data/mining/test2.java b/src/main/java/discord/data/mining/test2.java new file mode 100644 index 0000000..b35456f --- /dev/null +++ b/src/main/java/discord/data/mining/test2.java @@ -0,0 +1,143 @@ +package discord.data.mining; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.font.FontRenderContext; +import java.awt.font.LineMetrics; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Line2D; +import java.awt.image.BufferedImage; +import java.io.*; +import java.util.*; + +/** + * @author Hax + * @time 12:52 30.06.2018 + * @project Discord-Data-Mining + * @package discord.data.mining + * @class test2 + **/ + +public class test2 { + + public static void main() { + + Thread diagramm = new Thread(() -> { + TimerTask timerTask = new TimerTask() { + @Override + public void run() { + Date date = new Date(); + Calendar calendar = GregorianCalendar.getInstance(); + calendar.setTime(date); + if (calendar.get(Calendar.MINUTE)==0) { + try { + FileReader fr = new FileReader("stats.txt"); + BufferedReader br = new BufferedReader(fr); + + String zeile = ""; + StringBuilder stringBuilder = new StringBuilder(); + while ((zeile = br.readLine()) != null) { + stringBuilder.append(zeile); + } + br.close(); + + String[] stats = stringBuilder.toString().split(" "); + String statsstring = stringBuilder.toString(); + statsstring = statsstring.replaceFirst(stats[0]+" ", ""); + statsstring = statsstring+" "+Main.Messageperh; + FileWriter fw = new FileWriter("stats.txt"); + BufferedWriter bw = new BufferedWriter(fw); + bw.write(statsstring); + bw.close(); + Main.Messageperh =0; + + } catch (Exception e) { + e.printStackTrace(); + } + } + if (calendar.get(Calendar.HOUR_OF_DAY)==0&&calendar.get(Calendar.MINUTE)==0) { + try { + FileReader fr = new FileReader("stats.txt"); + BufferedReader br = new BufferedReader(fr); + + String zeile = ""; + StringBuilder stringBuilder = new StringBuilder(); + while ((zeile = br.readLine()) != null) { + stringBuilder.append(zeile); + } + br.close(); + String[] datas = stringBuilder.toString().split(" "); + ArrayList data = new ArrayList<>(); + for (String dataa:datas) { + data.add(Integer.parseInt(dataa)); + } + int max = -Integer.MAX_VALUE; + for(int i = 0; i < data.size(); i++) { + if(data.get(i) > max) + max = data.get(i); + } + BufferedImage bufferedImage = ImageIO.read(new File("Diagramm.jpg")); + Graphics2D g2 = bufferedImage.createGraphics(); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + int w = bufferedImage.getWidth(); + int h = bufferedImage.getHeight(); + // Draw ordinate. + g2.draw(new Line2D.Double(24, 24, 24, h - 24)); + // Draw abcissa. + g2.draw(new Line2D.Double(24, h - 24, w - 24, h - 24)); + // Draw labels. + Font font = g2.getFont(); + FontRenderContext frc = g2.getFontRenderContext(); + LineMetrics lm = font.getLineMetrics("0", frc); + float sh = lm.getAscent() + lm.getDescent(); + // Ordinate label. + String s = "data"; + float sy = 24 + ((h - 2 * 24) - s.length() * sh) / 2 + lm.getAscent(); + for (int i = 0; i < s.length(); i++) { + String letter = String.valueOf(s.charAt(i)); + float sw = (float) font.getStringBounds(letter, frc).getWidth(); + float sx = (24 - sw) / 2; + g2.drawString(letter, sx, sy); + sy += sh; + } + // Abcissa label. + s = "x axis"; + sy = h - 24 + (24 - sh) / 2 + lm.getAscent(); + float sw = (float) font.getStringBounds(s, frc).getWidth(); + float sx = (w - sw) / 2; + g2.drawString(s, sx, sy); + // Draw lines. + double xInc = (double) (w - 2 * 24) / (data.size() - 1); + double scale = (double) (h - 2 * 24) / max; + g2.setPaint(Color.green.darker()); + for (int i = 0; i < data.size() - 1; i++) { + double x1 = 24 + i * xInc; + double y1 = h - 24 - scale * data.get(i); + double x2 = 24 + (i + 1) * xInc; + double y2 = h - 24 - scale * data.get(i + 1); + g2.draw(new Line2D.Double(x1, y1, x2, y2)); + } + // Mark data points. + g2.setPaint(Color.red); + for (int i = 0; i < data.size(); i++) { + double x = 24 + i * xInc; + double y = h - 24 - scale * data.get(i); + g2.fill(new Ellipse2D.Double(x - 2, y - 2, 4, 4)); + } + ByteArrayOutputStream os = new ByteArrayOutputStream(); + ImageIO.write(bufferedImage, "jpg", os); + Main.manager.get(0).getTextChannelById("462534066869370882").sendFile(new ByteArrayInputStream(os.toByteArray()), "test.jpg").queue(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + }; + new Timer().schedule(timerTask, 30000, 60000); + }); + diagramm.start(); + + } + +} diff --git a/stats.txt b/stats.txt new file mode 100644 index 0000000..cddc193 --- /dev/null +++ b/stats.txt @@ -0,0 +1 @@ +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50 50 50 50 50 112175 \ No newline at end of file