diff --git a/src/main/java/Shadowrun/db_connect.java b/src/main/java/Shadowrun/db_connect.java index b459680..226812f 100755 --- a/src/main/java/Shadowrun/db_connect.java +++ b/src/main/java/Shadowrun/db_connect.java @@ -29,14 +29,14 @@ public class db_connect extends DB.base { close(); } - public void insertDice(String userName, String userId, String command, String result, String kanal) { + public void insertDice(String userName, String userId, String command, String result, String kanal, long MsgID, String wurfdaten) { if(!isActive()) return; open(); try { conn = getConn(); - String SQL_INSERT = "INSERT INTO shadowrun_log (benutzer, benutzerId, wurf, ergebnis, kanal) VALUES (?,?,?,?,?)"; + String SQL_INSERT = "INSERT INTO shadowrun_log (benutzer, benutzerId, wurf, ergebnis, kanal, msgId, wurfdaten) VALUES (?,?,?,?,?,?,?)"; PreparedStatement preparedStatement = conn.prepareStatement(SQL_INSERT); preparedStatement.setString(1, userName); @@ -44,6 +44,8 @@ public class db_connect extends DB.base { preparedStatement.setString(3, command); preparedStatement.setString(4, result); preparedStatement.setString(5, kanal); + preparedStatement.setLong(6, MsgID); + preparedStatement.setString(7, wurfdaten); preparedStatement.executeUpdate(); } @@ -131,6 +133,36 @@ public class db_connect extends DB.base { close(); return; } + + public Map getMesssage(Long MsgId) { + Map result = new HashMap<>(); + + if(!isActive()) { + return result; + } + result.put("lang", "de"); + + open(); + try { + conn = getConn(); + String SQL_SELECT = "SELECT * FROM shadowrun_log where MsgID = ?"; + + PreparedStatement preparedStatement = conn.prepareStatement(SQL_SELECT); + preparedStatement.setLong(1, MsgId); + ResultSet rs = preparedStatement.executeQuery(); + + while (rs.next()) { + result.put("benutzerId", rs.getString("benutzerId")); + result.put("wurfdaten", rs.getString("wurfdaten")); + } + + } + catch (SQLException e) { + e.printStackTrace(); + } + close(); + return result; + } } /* diff --git a/src/main/java/Shadowrun/dice.java b/src/main/java/Shadowrun/dice.java index 3f69bd7..7e124b4 100755 --- a/src/main/java/Shadowrun/dice.java +++ b/src/main/java/Shadowrun/dice.java @@ -1,10 +1,15 @@ 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 net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.entities.ChannelType; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.MessageChannel; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.events.message.react.MessageReactionAddEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import net.dv8tion.jda.api.requests.restaction.MessageAction; import java.awt.*; @@ -45,6 +50,7 @@ public class dice extends ListenerAdapter { this.prefixZitat = "/zitat"; this.prefixCId = "/cid"; + helpDe.add("Alle Befehle können in einen Channel geschrieben werden oder per Direkt Nachricht gesender werden"); helpDe.add(this.prefixSr + "Zahl", "Würfelt Zahl x W6. Gewürfelte 5. und 6. Werden als Erfolge gezählt, 1. als Misserfolge.\n" + "Erreicht oder übersteigt die Anzhal der 1. die hälfte der gewürfelten Würfel, zählt dies als ein Patzer. Gibt es mind. 1 Erfolg wird die Markierung der Ausgabe Gelb." + @@ -89,9 +95,9 @@ public class dice extends ListenerAdapter { } User author = event.getAuthor(); - if (!author.isBot()) { + if (event.getMessage().getContentRaw().startsWith(this.prefixSr)) - this.roll(event); + this.srroll(event); else if (event.getMessage().getContentRaw().startsWith(this.prefixIni)) this.ini(event); else if (event.getMessage().getContentRaw().startsWith(this.prefixTest)) @@ -100,9 +106,36 @@ public class dice extends ListenerAdapter { this.zitat(event); else if (event.getMessage().getContentRaw().startsWith(this.prefixCId)) this.cid(event); - } } + /*@Override + public void onMessageReactionAdd(MessageReactionAddEvent event) { + User user = event.getUser(); + if(!channelList.containsKey(event.getChannel().getId())) { + Map Einstellungen = db.getChannelSettings(event.getChannel().getId()); + channelList.put(event.getChannel().getId(), Einstellungen.get("lang").toString()); + } + switch (channelList.get(event.getChannel().getId())) { + case "de": + activLang = langDe; + break; + case "en": + activLang = langEn; + break; + default: + activLang = langDe; + + } + if (!user.isBot()) { + if(event.getReactionEmote().getId().equals("517528156014510111")) { // SR Reaktion - reroll + reaktionRerollEdge(event); + } + else if(event.getReactionEmote().getId().equals("517545127376322596")) { // ausgedehnte probe + extensionroll(event); + } + } + }*/ + /** * rolltest * @@ -164,23 +197,17 @@ public class dice extends ListenerAdapter { } } + /** * rolltest * * @param event JDA Event */ - private void roll(MessageReceivedEvent event) { + private void srroll(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; @@ -232,7 +259,6 @@ public class dice extends ListenerAdapter { try { diceart = Integer.parseInt(diceInterpreter[1]); numberOfDice = Integer.parseInt(diceInterpreter[0]); - verteilung = new int[diceart]; } catch (NumberFormatException e) { String message = activLang.error; @@ -260,14 +286,53 @@ public class dice extends ListenerAdapter { } } + srrollOut(numberOfDice, diceart, edge, event.getChannel(), event.getAuthor(), getEffectiveName(event), event.getMessage().getContentRaw(), -1, 0, event.getJDA()); + + } + catch (NumberFormatException e) { + event.getChannel().sendMessage("Nope").queue(); + } + catch (Exception e) { + System.out.println("problem: " + e.getMessage()); + } + + } + + /** + * srrollOut + * + * @param numberOfDice + * @param diceart + * @param edge + * @param channel + * @param user + * @param effectiveName + * @param inputMessage + * @param hitBasis + * @param type + */ + private void srrollOut(int numberOfDice, int diceart, boolean edge, MessageChannel channel, User user, String effectiveName, String inputMessage, int hitBasis, int type, JDA jda) { + + EmbedBuilder outputBox = new EmbedBuilder(); + + int[] verteilung = new int[diceart]; + int dice1; + StringBuilder result = new StringBuilder(""); + StringBuilder rollString = new StringBuilder(""); + + int hits = 0; + boolean glitches = false; + + try { if(numberOfDice <= 0) { String message = activLang.noNegativ; - event.getChannel().sendMessage(getAsMention(event) + message).queue(); + channel.sendMessage(user.getAsMention() + message).queue(); return; } int bonusEdegeDice = 0; + int dicecorrection = hitBasis < 0 ? 0 : hitBasis; for(int i = 0; i < numberOfDice+bonusEdegeDice; i++) { dice1 = new Random().nextInt(diceart); if(edge && dice1 == 5) @@ -282,15 +347,15 @@ public class dice extends ListenerAdapter { result.append(dice1+1); result.append(" "); } - if (verteilung[0] > (numberOfDice+bonusEdegeDice)/2f) { // Patzer nur bei über er Hälfte an 1er + if (verteilung[0] > (numberOfDice+bonusEdegeDice+dicecorrection)/2f) { // Patzer nur bei über er Hälfte an 1er glitches = true; } - if(hits == 0 && !glitches) { // kein Erfolg, kein Patzer + if(hits+dicecorrection == 0 && !glitches) { // kein Erfolg, kein Patzer outputBox.setColor(Color.gray); } - else if(hits == 0 && glitches) { // kritischer Patzer + else if(hits+dicecorrection == 0 && glitches) { // kritischer Patzer outputBox.setColor(Color.red); } else if(glitches) { // Patzer @@ -304,30 +369,64 @@ public class dice extends ListenerAdapter { if(bonusEdegeDice > 0) { addition = " + " + bonusEdegeDice + activLang.dice + diceart; } + String message = ""; + if(type == 1) { + 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) + "\t Gesamt: " + (hits + hitBasis)).replace("%oneHits%", String.valueOf(verteilung[0])); + outputBox.setTitle(effectiveName + " Edgereroll " + message); + } + if(type == 2) { + message = activLang.resultTextExtent; + //%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) + "\t Gesamt: " + (hits + hitBasis)).replace("%oneHits%", String.valueOf(verteilung[0])); + outputBox.setTitle(effectiveName + " Ausgedehnt " + message); + } + else { + 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(effectiveName + message); + } - 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(getEffectiveName(event) + message); outputBox.setDescription("(" + result.toString().trim() + ")"); + //outputBox.appendDescription("\r" + jda.getEmoteById("517528156014510111").getAsMention() + " Edge reroll"); + //outputBox.appendDescription("\r" + jda.getEmoteById("517545127376322596").getAsMention() + " Ausgedehnte Probe"); + //JDA::getEmoteById(); 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(); - if(event.getChannelType() == ChannelType.PRIVATE) { - db.insertDice(event.getAuthor().getName(), event.getAuthor().getId(), event.getMessage().getContentRaw(), result.toString().trim(), event.getChannel().getId()); - } - else { - db.insertDice(event.getMember().getEffectiveName(), event.getMember().getUser().getId(), event.getMessage().getContentRaw(), result.toString().trim(), event.getChannel().getId()); - } + rollString.append(numberOfDice).append("|").append(hits+dicecorrection).append("|").append(verteilung[0]); + + //event.getChannel().sendMessage(outputBox.build()).queue(); + long[] messageId = new long[1]; + boolean finalEdge = edge; + String finalRollData = rollString.toString(); + channel.sendMessage(outputBox.build()).queue(message1 -> { + if(!finalEdge && type == 0) { + //message1.addReaction("sr:517528156014510111").queue(); + } + if(!finalEdge && (type == 0 || type == 2)) { + //message1.addReaction("test:517545127376322596").queue(); + } + messageId[0] = message1.getIdLong(); + if(channel.getType() == ChannelType.PRIVATE) { + db.insertDice(user.getName(), user.getId(), inputMessage, result.toString().trim(), channel.getId(), messageId[0], finalRollData); + } + else { + db.insertDice(user.getName(), user.getId(), inputMessage, result.toString().trim(), channel.getId(), messageId[0], finalRollData); + } + }); + + } catch (NumberFormatException e) { - event.getChannel().sendMessage("Nope").queue(); + channel.sendMessage("Nope").queue(); } catch (Exception e) { System.out.println("problem: " + e.getMessage()); @@ -489,4 +588,49 @@ public class dice extends ListenerAdapter { } return event.getMember().getAsMention() + " "; } + + private void reaktionRerollEdge(MessageReactionAddEvent event) { + Map wurf = db.getMesssage(event.getMessageIdLong()); + if(!wurf.containsKey("benutzerId")) { + return; + } + else if(!wurf.get("benutzerId").equals(event.getUserId())) { + return; + } + String[] wurfParts = wurf.get("wurfdaten").split("\\|"); + int dice = Integer.parseInt(wurfParts[0]); + int hits = Integer.parseInt(wurfParts[1]); + int miss = Integer.parseInt(wurfParts[2]); + String effectName = ""; + if(event.getMember().getEffectiveName() != "") { + effectName = event.getMember().getEffectiveName(); + } + srrollOut(dice-hits, 6, false, event.getChannel(), event.getUser(), effectName, "Edege Reroll", hits, 1, event.getJDA()); + + } + + private void extensionroll(MessageReactionAddEvent event) { + Map wurf = db.getMesssage(event.getMessageIdLong()); + if(!wurf.containsKey("benutzerId")) { + return; + } + else if(!wurf.get("benutzerId").equals(event.getUserId())) { + return; + } + String[] wurfParts = wurf.get("wurfdaten").split("\\|"); + int dice = Integer.parseInt(wurfParts[0]); + int hits = Integer.parseInt(wurfParts[1]); + int miss = Integer.parseInt(wurfParts[2]); + String effectName = ""; + if(event.getMember().getEffectiveName() != "") { + effectName = event.getMember().getEffectiveName(); + } + if(dice == 1) { + event.getChannel().sendMessage(event.getUser().getAsMention() + " mehr geht nicht, du hast **" + hits + "** Erfolge").queue(); + } + else { + srrollOut(dice - 1, 6, false, event.getChannel(), event.getUser(), effectName, "Extent Roll", hits, 2, event.getJDA()); + } + + } } diff --git a/src/main/java/Shadowrun/help.java b/src/main/java/Shadowrun/help.java index bbaa87e..6653949 100755 --- a/src/main/java/Shadowrun/help.java +++ b/src/main/java/Shadowrun/help.java @@ -1,6 +1,6 @@ package Shadowrun; -import net.dv8tion.jda.core.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; public class help { diff --git a/src/main/java/Shadowrun/language.java b/src/main/java/Shadowrun/language.java index dd1a584..4dfafae 100755 --- a/src/main/java/Shadowrun/language.java +++ b/src/main/java/Shadowrun/language.java @@ -13,6 +13,8 @@ public class language { public String noNegativ = " es darf kein Negativen Wurf geben"; public String dice = "w"; public String resultText = " %numberOfDice%w%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%"; + public String resultTextExtent = " %numberOfDice%w%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%"; + public String basisresultText = " %numberOfDice%w%diceart%:"; public language() { this.readConfig(); @@ -54,6 +56,10 @@ public class language { this.dice = config.getProperty(lang + ".dice"); if(config.containsKey(lang + ".resultText")) this.resultText = config.getProperty(lang + ".resultText"); + if(config.containsKey(lang + ".resultTextExtent")) + this.resultText = config.getProperty(lang + ".resultTextExtent"); + if(config.containsKey(lang + ".basisresultText")) + this.resultText = config.getProperty(lang + ".basisresultText"); } else { @@ -65,6 +71,8 @@ public class language { config.setProperty(lang + ".noNegativ", this.noNegativ); config.setProperty(lang + ".dice", this.dice); config.setProperty(lang + ".resultText", this.resultText); + config.setProperty(lang + ".resultTextExtent", this.resultTextExtent); + config.setProperty(lang + ".basisresultText", this.basisresultText); config.store(output, null); } diff --git a/src/main/java/Shadowrun/messageInterpreter.java b/src/main/java/Shadowrun/messageInterpreter.java index 1b481c0..3548b5d 100644 --- a/src/main/java/Shadowrun/messageInterpreter.java +++ b/src/main/java/Shadowrun/messageInterpreter.java @@ -1,6 +1,6 @@ package Shadowrun; -import net.dv8tion.jda.core.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import java.util.Scanner;