From e5d9c703b5604e1905be8fd0c96b5ed0032a1a9e Mon Sep 17 00:00:00 2001 From: Ocame Date: Tue, 19 Feb 2019 05:15:53 +0100 Subject: [PATCH] =?UTF-8?q?SR=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Shadowrun/Shadowrun.java | 272 +++++++++++++++++++++++++ src/main/java/core/Main.java | 2 + 2 files changed, 274 insertions(+) create mode 100644 src/main/java/Shadowrun/Shadowrun.java diff --git a/src/main/java/Shadowrun/Shadowrun.java b/src/main/java/Shadowrun/Shadowrun.java new file mode 100644 index 0000000..ab8e1fc --- /dev/null +++ b/src/main/java/Shadowrun/Shadowrun.java @@ -0,0 +1,272 @@ +package Shadowrun; + +import net.dv8tion.jda.core.EmbedBuilder; +import net.dv8tion.jda.core.entities.ChannelType; +import net.dv8tion.jda.core.entities.User; +import net.dv8tion.jda.core.events.message.MessageReceivedEvent; +import net.dv8tion.jda.core.hooks.ListenerAdapter; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.awt.*; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.text.DecimalFormat; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Random; + +public class Shadowrun extends ListenerAdapter { + + private String prefixSr; + private String prefixDegradation; + private String prefixDetail; + + + public Shadowrun() { + this.prefixSr = "!sr"; + } + + @Override + public void onMessageReceived(MessageReceivedEvent event) { + if (event.getMessage().getContentRaw().startsWith("!ende")) { // nur zum Debugen #todo muss wieder raus + event.getJDA().shutdown(); + } + if ((!event.getMessage().getContentRaw().startsWith(this.prefixSr)) || event.getChannelType() != ChannelType.TEXT) { + return; + } + + User author = event.getAuthor(); + if (!author.isBot()) { + if (event.getMessage().getContentRaw().startsWith(this.prefixSr)) + this.getInfo(event); + } + } + + private void getInfo(MessageReceivedEvent event) { + this.getInfo(event, false); + } + + /** + * Holt Kontostand ab + * + * @param event JDA Event + * @param detail true = Abrufen der Detail, Chronologich, false = gesammt Kontostand + */ + private void getInfo(MessageReceivedEvent event, Boolean detail) { + + EmbedBuilder test = new EmbedBuilder(); + test.setTitle("Das ist ein Test"); + test.setColor(Color.red); + test.setDescription("Text " + event.getMember().getAsMention()); + + + + + int[] verteilung = new int[6]; + int dice1; + + try { + String[] MsgParts_exl_Mention = event.getMessage().getContentRaw().split(" "); + int rounds = Integer.parseInt(MsgParts_exl_Mention[1]); + if(rounds <= 0) { + event.getChannel().sendMessage("Nope").queue(); + return; + } + for(int i = 0; i < rounds; i++) { + dice1 = new Random().nextInt(6); + verteilung[dice1]++; + } + for(int i = 0; i < 6; i++) { + float pro = verteilung[i]*100f/rounds; + test.addField(Integer.toString(i+1), Integer.toString(verteilung[i]) + " - " + String.format("%.2f", pro), true); + } + event.getChannel().sendMessage(test.build()).queue(); + + } + catch (NumberFormatException e) { + event.getChannel().sendMessage("Nope").queue(); + } + catch (Exception e) { + System.out.println("problem: " + e.getMessage()); + } finally { + + } + + } + + /** + * Fügt neue Transaktion hinzu + * + * @param event JDA Event + */ + private void addTransaction(MessageReceivedEvent event) { + Map IdConvert = new HashMap<>(); + IdConvert.put("256888865103544321", 2); // Niclos + IdConvert.put("495895196685303818", 3); // Birgit + IdConvert.put("385865287586545676", 7); // Felix + IdConvert.put("493359873480720384", 5); // orko + IdConvert.put("339859242917953537", 4); // christian + IdConvert.put("397055491488088065", 6); // Filip + IdConvert.put(event.getJDA().getSelfUser().getId(), 1); // Schiff + + + Map currencyConvert = new HashMap<>(); + currencyConvert.put("credit", 1); + currencyConvert.put("c", 1); + currencyConvert.put("doller", 2); + currencyConvert.put("d", 2); + currencyConvert.put("$", 2); + currencyConvert.put("platinum", 3); + currencyConvert.put("p", 3); + currencyConvert.put("gold", 4); + currencyConvert.put("g", 4); + currencyConvert.put("silver", 5); + currencyConvert.put("s", 5); + + Map currencyConvert2 = new HashMap<>(); + currencyConvert2.put(1, "Credit"); + currencyConvert2.put(2, "Doller"); + currencyConvert2.put(3, "Platinum"); + currencyConvert2.put(4, "Gold"); + currencyConvert2.put(5, "Silver"); + + int[] ids; + StringBuilder result = new StringBuilder(""); + boolean allfound = true; + String[] MsgParts; + float ammount; + + HttpURLConnection con = null; + + try { + // Aufteilen Nachricht in Bennunungen und Rest + String[] MsgParts_exl_Mention = event.getMessage().getContentRaw().split(event.getMessage().getMentionedUsers().get(event.getMessage().getMentionedUsers().size() - 1).getAsMention(), 2); + MsgParts = MsgParts_exl_Mention[1].trim().split(" "); + + ids = new int[event.getMessage().getMentionedUsers().size()]; + + // Pürfen ob Angebe der Währung bekannt ist + if (!currencyConvert.containsKey(MsgParts[1].toLowerCase())) { + event.getChannel().sendMessage(event.getMember().getAsMention() + " " + MsgParts[1] + " ist keine bekannte Währung").queue(); + return; + } + + // Prüfen ob Zahl legal ist + try { + + ammount = Float.parseFloat(MsgParts[0]); + } catch (NumberFormatException e) { + event.getChannel().sendMessage(event.getMember().getAsMention() + " " + MsgParts[MsgParts.length - 2] + " ist keine gültige Zahl").queue(); + return; + + } + + + // Prüfen ob alle gennanten Personen zur Zahlung gehören + for (int i = 0; i < event.getMessage().getMentionedUsers().size(); i++) { + if (!IdConvert.containsKey(event.getMessage().getMentionedUsers().get(i).getId())) { + allfound = false; + result.append(" ").append(event.getMessage().getMentionedUsers().get(i).getName()); + } else { + ids[i] = IdConvert.get(event.getMessage().getMentionedUsers().get(i).getId()); + } + } + + if (!allfound) { + event.getChannel().sendMessage(event.getMember().getAsMention() + result.toString() + " wurde(n) nicht gefunden").queue(); + return; + } + + String reason = MsgParts_exl_Mention[1].trim().substring(MsgParts[0].length() + MsgParts[1].length() + 2); + + // Aufbau Payload zur übertragung an REST Schnittstelle + JSONObject payload = new JSONObject(); + payload.put("ammount", ammount); + payload.put("currency_id", currencyConvert.get(MsgParts[1].toLowerCase())); + payload.put("ids", ids); + payload.put("reason", reason); + + URL url = new URL("http://localhost/REST/balance"); + con = (HttpURLConnection) url.openConnection(); + con.setRequestMethod("POST"); + con.setConnectTimeout(3600); + con.setReadTimeout(3600); + con.setDoInput(true); + con.setDoOutput(true); + con.setDefaultUseCaches(false); + + // Übertragen der Payload + OutputStream os = con.getOutputStream(); + BufferedWriter writer = new BufferedWriter( + new OutputStreamWriter(os, "UTF-8")); + writer.write(payload.toString()); + writer.flush(); + writer.close(); + + int status = con.getResponseCode(); + + switch (status) { + case 200: + case 201: // Verarbeiten der Antwort + BufferedReader in = new BufferedReader( + new InputStreamReader(con.getInputStream())); + String inputLine; + StringBuffer content = new StringBuffer(); + while ((inputLine = in.readLine()) != null) { + content.append(inputLine); + } + in.close(); + JSONObject responseJson = new JSONObject(content.toString()); + Iterator keys = responseJson.keys(); + + result = new StringBuilder(""); + while (keys.hasNext()) { + String key = keys.next(); + String id = getKey(IdConvert, Integer.parseInt(key)); + + if (key.equals("1")) { + result.append("Das Schiff bekommt: ").append(responseJson.get(key)).append(" ").append(currencyConvert2.get(currencyConvert.get(MsgParts[1].toLowerCase()))).append(" "); + } else { + result.append(event.getGuild().getMemberById(id).getAsMention()).append(" bekommt ").append(responseJson.get(key)).append(" ").append(currencyConvert2.get(currencyConvert.get(MsgParts[1].toLowerCase()))).append(" "); + } + } + event.getChannel().sendMessage(event.getMember().getAsMention() + " " + result.toString()).queue(); + break; + default: + System.out.println(":("); + } + con.disconnect(); + + } catch (Exception e) { + System.out.println("problem: " + e.getMessage()); + } finally { + if (con != null) { // Verbindung schließen wenn noch offen + try { + con.disconnect(); + } catch (Exception ex) { + System.out.println("final fehler"); + } + } + } + } + + /** + * Sucht in einer Map nach Wert und gibt Schlüßel zurück + * @param map Map mit allen Werten + * @param value gesuchtet wert + * @param erste Typ + * @param zweiter typ + * @return |null + */ + private K getKey(Map map, V value) { + for (Map.Entry entry : map.entrySet()) { + if (entry.getValue().equals(value)) { + return entry.getKey(); + } + } + return null; + } +} diff --git a/src/main/java/core/Main.java b/src/main/java/core/Main.java index 3ce5563..e35fd52 100644 --- a/src/main/java/core/Main.java +++ b/src/main/java/core/Main.java @@ -2,6 +2,7 @@ package core; import Serenity.balance; +import Shadowrun.Shadowrun; import net.dv8tion.jda.core.JDA; import net.dv8tion.jda.core.JDABuilder; import net.dv8tion.jda.core.AccountType; @@ -27,6 +28,7 @@ public class Main { builder.setStatus(OnlineStatus.ONLINE); builder.setGame(Game.playing("mit den Würfeln")); builder.addEventListener(new balance()); + builder.addEventListener(new Shadowrun() ); try { JDA jda = builder.build();