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 okhttp3.internal.Internal; import org.json.JSONArray; import org.json.JSONObject; import java.awt.*; import java.security.SecureRandom; import java.util.HashMap; import java.util.Map; import java.util.Random; import java.util.Scanner; import java.util.concurrent.ThreadLocalRandom; public class dice extends ListenerAdapter { private String prefixSr; private String prefixIni; private String prefixZitat; private String prefixTest; private language langDe = new language("de"); private language langEn = new language("en"); private language activLang; private db_connect db; private Map channelList = new HashMap<>(); public dice() { this.prefixSr = "/sr"; this.prefixIni = "/ini"; this.prefixTest = "/rollTest"; this.prefixZitat = "/zitat"; this.db = new db_connect(); } @Override public void onMessageReceived(MessageReceivedEvent event) { if ((!event.getMessage().getContentRaw().startsWith(this.prefixSr) && !event.getMessage().getContentRaw().startsWith(this.prefixIni) && !event.getMessage().getContentRaw().startsWith(this.prefixZitat) && !event.getMessage().getContentRaw().startsWith(this.prefixTest)) || event.getChannelType() != ChannelType.TEXT) { return; } if(!channelList.containsKey(event.getChannel().getId())) { channelList.put(event.getChannel().getId(), "de"); activLang = langDe; } else { switch (channelList.get(event.getChannel().getId())) { case "de": activLang = langDe; break; case "en": activLang = langEn; break; default: activLang = langDe; } } User author = event.getAuthor(); if (!author.isBot()) { if (event.getMessage().getContentRaw().startsWith(this.prefixSr)) this.roll(event); else if (event.getMessage().getContentRaw().startsWith(this.prefixIni)) this.ini(event); else if (event.getMessage().getContentRaw().startsWith(this.prefixTest)) this.rollTest(event); else if (event.getMessage().getContentRaw().startsWith(this.prefixZitat)) this.zitat(event); } } /** * rolltest * * @param event JDA Event */ private void rollTest(MessageReceivedEvent event) { 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[] verteilung2 = new int[6]; int[] verteilung3 = new int[6]; int dice1, dice2, dice3; 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); dice2 = new SecureRandom().nextInt(6); //dice3 = new ThreadLocalRandom().current().nextInt(6); dice3 = ThreadLocalRandom.current().nextInt(0, 6); verteilung[dice1]++; verteilung2[dice2]++; verteilung3[dice3]++; } 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); } test.addBlankField(false); for(int i = 0; i < 6; i++) { float pro = verteilung2[i]*100f/rounds; test.addField(Integer.toString(i+1), Integer.toString(verteilung2[i]) + " - " + String.format("%.2f", pro) + "%", true); } test.addBlankField(false); for(int i = 0; i < 6; i++) { float pro = verteilung3[i]*100f/rounds; test.addField(Integer.toString(i+1), Integer.toString(verteilung3[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()); } } /** * rolltest * * @param event JDA Event */ private void roll(MessageReceivedEvent event) { EmbedBuilder outputBox = new EmbedBuilder(); int[] verteilung = new int[6]; int dice1; int numberOfDice = 1; int diceart = 6; StringBuilder result = new StringBuilder(""); int hits = 0; boolean glitches = false; boolean edge = false; try { // Prüfen ob Edge wurf if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"+") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" +")) { edge = true; } // korrikiert Edge eingabe von /sr + zu /sr+ String ContentRaw = event.getMessage().getContentRaw(); if(event.getMessage().getContentRaw().startsWith(this.prefixSr+" +")) { ContentRaw = ContentRaw.replace(this.prefixSr+" +", this.prefixSr+"+ ").replace(" ", " "); } // Prüfen ob Leerer Command gesendet wird String[] MsgParts = ContentRaw.split(" ", 2); if(MsgParts.length < 2) { String message = activLang.emptyCommand; message = message.replace("%command%", this.prefixSr); event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); return; } if(MsgParts[1].trim().matches(".*[^0-9].*")) { // es wurden andere zeichen als Zahlen gefunden if(MsgParts[1].trim().toLowerCase().equals("de")) { activLang = langDe; channelList.put(event.getChannel().getId(), "de"); event.getChannel().sendMessage(event.getMember().getAsMention() + activLang.language).queue(); return; } else if(MsgParts[1].trim().toLowerCase().equals("en")) { activLang = langEn; channelList.put(event.getChannel().getId(), "en"); event.getChannel().sendMessage(event.getMember().getAsMention() + activLang.language).queue(); return; } if(MsgParts[1].trim().toLowerCase().replace(" ", "").matches("([0-9]*)[dw]([0-9].*)")) { // format besteh aus (Zahlen)d(Zahlen) oder (Zahlen)w(Zahlen) String[] diceInterpreter = MsgParts[1].trim().toLowerCase().replace(" ", "").split("[wd]"); try { diceart = Integer.parseInt(diceInterpreter[1]); numberOfDice = Integer.parseInt(diceInterpreter[0]); verteilung = new int[diceart]; } catch (NumberFormatException e) { String message = activLang.error; message = message.replace("%command%", MsgParts[1].trim().toLowerCase()); event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); return; } } else { String message = activLang.error; message = message.replace("%command%", MsgParts[1].trim()); event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); return; } } else { try { numberOfDice = Integer.parseInt(MsgParts[1].trim().replace(" ", "")); } catch (NumberFormatException e) { String message = activLang.error; message = message.replace("%command%", MsgParts[1].trim()); event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); return; } } if(numberOfDice <= 0) { String message = activLang.noNegativ; event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); return; } int bonusEdegeDice = 0; for(int i = 0; i < numberOfDice+bonusEdegeDice; i++) { dice1 = new Random().nextInt(diceart); if(edge && dice1 == 5) bonusEdegeDice++; if(dice1 >= 4) { hits++; } verteilung[dice1]++; if((dice1 >= 4) || (dice1 == 0)) result.append("**").append(dice1+1).append("**"); else result.append(dice1+1); result.append(" "); } if (verteilung[0] >= (numberOfDice+bonusEdegeDice)/2f) { glitches = true; } if(hits == 0 && !glitches) { // kein Erfolg, kein Patzer outputBox.setColor(Color.gray); } else if(hits == 0 && glitches) { // kritischer Patzer outputBox.setColor(Color.red); } else if(glitches) { // Patzer outputBox.setColor(Color.yellow); } else { // Erfolg outputBox.setColor(Color.green); } String addition = ""; if(bonusEdegeDice > 0) { addition = " + " + bonusEdegeDice + activLang.dice + diceart; } String message = activLang.resultText; //%numberOfDice%%dice%%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%"; message = message.replace("%numberOfDice%", String.valueOf(numberOfDice)).replace("%diceart%", String.valueOf(diceart)).replace("%EdgeDice%", addition).replace("%hits%", String.valueOf(hits)).replace("%oneHits%", String.valueOf(verteilung[0])); outputBox.setTitle(event.getMember().getEffectiveName() + " " + message); outputBox.setDescription("(" + result.toString().trim() + ")"); for(int i = 0; i < diceart; i++) { float pro = verteilung[i]*100f/numberOfDice; //outputBox.addField(Integer.toString(i+1), Integer.toString(verteilung[i]) + " - " + String.format("%.2f", pro) + "%", true); } event.getChannel().sendMessage(outputBox.build()).queue(); db.insertDice(event.getMember().getEffectiveName(), event.getMember().getUser().getId(),event.getMessage().getContentRaw(),result.toString().trim(), event.getChannel().getId()); } catch (NumberFormatException e) { event.getChannel().sendMessage("Nope").queue(); } catch (Exception e) { System.out.println("problem: " + e.getMessage()); } } private void ini(MessageReceivedEvent event) { EmbedBuilder outputBox = new EmbedBuilder(); int dice1; int numberOfDice = 1; int diceart = 6; int iniBase = 0; int ini = 0; StringBuilder result = new StringBuilder(""); try { String[] MsgParts = event.getMessage().getContentRaw().split(" ", 2); if(MsgParts.length < 2) { // Leerer Befehl String message = activLang.emptyCommand; message = message.replace("%command%", this.prefixIni); event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); return; } if(MsgParts[1].trim().matches(".*[^0-9].*")) { // es wurden andere zeichen als Zahlen gefunden if(MsgParts[1].trim().toLowerCase().equals("de")) { activLang = langDe; channelList.put(event.getChannel().getId(), "de"); event.getChannel().sendMessage(event.getMember().getAsMention() + activLang.language).queue(); return; } else if(MsgParts[1].trim().toLowerCase().equals("en")) { activLang = langEn; channelList.put(event.getChannel().getId(), "en"); event.getChannel().sendMessage(event.getMember().getAsMention() + activLang.language).queue(); return; } String[] iniParts = MsgParts[1].trim().toLowerCase().split("\\+", 2); messageInterpreter mI = new messageInterpreter(event, activLang); if(iniParts.length == 1) { // Nachricht hat kein + Zeichen mI.inputInterpreter(iniParts[0]); if(mI.isNum()) { numberOfDice = mI.getIntResult(); } else if(mI.isDice()) { diceart = mI.getDiceart(); numberOfDice = mI.getNumberOfDice(); } } else { mI.inputInterpreter(iniParts[0]); // Vor dem + if(mI.isNum()) { iniBase = mI.getIntResult(); } else if(mI.isDice()) { iniBase = mI.getNumberOfDice(); } mI.inputInterpreter(iniParts[1]); // Nach dem + if(mI.isNum()) { numberOfDice = mI.getIntResult(); } else if(mI.isDice()) { diceart = mI.getDiceart(); numberOfDice = mI.getNumberOfDice(); } } } else { try { numberOfDice = Integer.parseInt(MsgParts[1].trim().replace(" ", "")); } catch (NumberFormatException e) { String message = activLang.error; message = message.replace("%command%", MsgParts[1].trim()); event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); return; } } if(numberOfDice <= 0) { String message = activLang.noNegativ; event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); return; } ini += iniBase; for(int i = 0; i < numberOfDice; i++) { dice1 = new Random().nextInt(diceart); result.append(dice1+1).append(" "); ini += (dice1+1); } outputBox.setColor(new Color(104, 34, 139)); String message = "%iniBase%+%numberOfDice%w%diceart%\tIni: %ini%"; //activLang.resultText; //%numberOfDice%%dice%%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%"; message = message.replace("%numberOfDice%", String.valueOf(numberOfDice)).replace("%diceart%", String.valueOf(diceart)) .replace("%iniBase%", String.valueOf(iniBase)).replace("%ini%", String.valueOf(ini)); outputBox.setTitle(event.getMember().getEffectiveName() + " " + message); outputBox.setDescription(String.valueOf(iniBase) + " + (" + result.toString().trim().replace(" ", "+") + ")"); event.getChannel().sendMessage(outputBox.build()).queue(); } catch (NumberFormatException e) { event.getChannel().sendMessage("Nope").queue(); } catch (IllegalArgumentException e) { event.getChannel().sendMessage(e.getMessage()).queue(); } catch (Exception e) { System.out.println("problem: " + e.getMessage()); } } private void zitat(MessageReceivedEvent event) { String[] quotes = new String[7]; quotes[0] = "*quiek quiek quiek*"; quotes[1] = "" + "(\\\\______/)\n" + "( ͡ ͡° ͜ ʖ ͡ ͡°) *snuff snuff*\n" + "\\\\╭☞ \\\\╭☞\n" + ""; quotes[2] = "(づ。◕‿‿◕。)づ"; quotes[3] = "zzzZZZZZzzZZ"; quotes[4] = "piiiep"; quotes[5] = "grrrrr"; //quotes[6] = "ʕᵔᴥᵔʔ =*Auto translator*=> In meiner psychophysischen Konstituton manifestiert sich eine absolute Dominanz positiver Effekte für die Individualität Deiner Person. "; int dice = new Random().nextInt(600); event.getChannel().sendMessage(quotes[dice%6]).queue(); } }