From db63c3dfa743bb6f633a0b02f8df74dbd4bf3fe0 Mon Sep 17 00:00:00 2001 From: Ocame Date: Mon, 18 Feb 2019 06:20:00 +0100 Subject: [PATCH 01/28] =?UTF-8?q?Hinzuf=C3=BCgen=20!add,=20!info=20und=20!?= =?UTF-8?q?detail?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- src/main/java/AtlasGruppe/groupchange.java | 117 -------- src/main/java/Serenity/balance.java | 321 +++++++++++++++++++++ src/main/java/core/Main.java | 10 +- 4 files changed, 328 insertions(+), 122 deletions(-) delete mode 100644 src/main/java/AtlasGruppe/groupchange.java create mode 100644 src/main/java/Serenity/balance.java diff --git a/build.gradle b/build.gradle index 7ed7d4b..71c1d44 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { version '0.2' -def jdaVersion = '3.8.1_447' +def jdaVersion = '3.8.3_460' apply plugin: 'java' diff --git a/src/main/java/AtlasGruppe/groupchange.java b/src/main/java/AtlasGruppe/groupchange.java deleted file mode 100644 index 567e6d4..0000000 --- a/src/main/java/AtlasGruppe/groupchange.java +++ /dev/null @@ -1,117 +0,0 @@ -package AtlasGruppe; - -import net.dv8tion.jda.core.entities.ChannelType; -import net.dv8tion.jda.core.entities.Member; -import net.dv8tion.jda.core.entities.Role; -import net.dv8tion.jda.core.entities.User; -import net.dv8tion.jda.core.entities.impl.RoleImpl; -import net.dv8tion.jda.core.events.message.MessageReceivedEvent; -import net.dv8tion.jda.core.hooks.ListenerAdapter; -import net.dv8tion.jda.core.exceptions.InsufficientPermissionException; - - -public class groupchange extends ListenerAdapter { - - private String prefixPromote; - private String prefixDegradation; - - - public groupchange() { - this.prefixPromote = "!add"; - this.prefixDegradation = "!remove"; - - } - - @Override - public void onMessageReceived(MessageReceivedEvent event) { - if ((!event.getMessage().getContentRaw().startsWith(this.prefixPromote) && !event.getMessage().getContentRaw().startsWith(this.prefixDegradation)) || event.getChannelType() != ChannelType.TEXT) { - return; - } - - User author = event.getAuthor(); - if (!author.isBot()) { - if (event.getMessage().getContentRaw().startsWith(this.prefixPromote + " ")) { - this.changeGroup(event, true); - } else if (event.getMessage().getContentRaw().startsWith(this.prefixDegradation + " ")) { - this.changeGroup(event, false); - } - } - } - - private void changeGroup(MessageReceivedEvent event, Boolean promote) { - - Member MentionedMember = null; - User MentionedUser = null; - boolean roleCheck = false; - - try { - - Role targetRole = event.getGuild().getRolesByName("Test2", true).get(0); - Role authorizedRole = event.getGuild().getRolesByName("Test2", true).get(0); - - if (event.getMessage().getMentionedUsers().isEmpty()) { - event.getChannel().sendMessage(event.getMember().getAsMention() + " Benutzer nicht gefunden").queue(); - return; - } - - MentionedUser = event.getMessage().getMentionedUsers().get(0); - - if (MentionedUser.isBot()) { // Ziel darf kein Bot sein - event.getChannel().sendMessage(event.getMember().getAsMention() + " Finger weg von den Bots!").queue(); - return; - } - - MentionedMember = event.getGuild().getMemberById(MentionedUser.getId()); - - roleCheck = false; - for (Object x : event.getMember().getRoles().toArray()) { - if (((RoleImpl) x).getId().equals(authorizedRole.getId())) { // hat Absender die Notwendig Gruppe - roleCheck = true; - break; - } - } - if (!roleCheck) { - event.getChannel().sendMessage(event.getMember().getAsMention() + " Du bist nicht berechtigt den Befehl auszuführen").queue(); - return; - } - - if (promote) { - roleCheck = false; - for (Object x : MentionedMember.getRoles().toArray()) { - if (((RoleImpl) x).getId().equals(targetRole.getId())) { // hat Ziel bereits die Gruppe? - roleCheck = true; - break; - } - } - if (roleCheck) { - event.getChannel().sendMessage(event.getMember().getAsMention() + " " + MentionedMember.getEffectiveName() + " hat bereits die Gruppe " + targetRole.getName()).queue(); - return; - } - event.getGuild().getController().addSingleRoleToMember(MentionedMember, targetRole).queue(); - event.getChannel().sendMessage(event.getMember().getAsMention() + " " + MentionedMember.getEffectiveName() + " wurde der Gruppe " + targetRole.getName() + " zugeteilt").queue(); - } else { - roleCheck = false; - for (Object x : MentionedMember.getRoles().toArray()) { - if (((RoleImpl) x).getId().equals(targetRole.getId())) { // hat Ziel bereits die Gruppe? - roleCheck = true; - break; - } - } - if (!roleCheck) { - event.getChannel().sendMessage(event.getMember().getAsMention() + " " + MentionedMember.getEffectiveName() + " ist nicht in der Gruppe " + targetRole.getName()).queue(); - return; - } - event.getGuild().getController().removeSingleRoleFromMember(MentionedMember, targetRole).queue(); - event.getChannel().sendMessage(event.getMember().getAsMention() + " " + MentionedMember.getEffectiveName() + " wurde aus der Gruppe " + targetRole.getName() + " entfernt").queue(); - } - - } catch (InsufficientPermissionException e) { - event.getChannel().sendMessage(event.getMember().getAsMention() + " " + e.getMessage()).queue(); - } catch (Exception e) { - //System.out.println("problem: "+e.getMessage()); - } - - } - - -} diff --git a/src/main/java/Serenity/balance.java b/src/main/java/Serenity/balance.java new file mode 100644 index 0000000..ec4c548 --- /dev/null +++ b/src/main/java/Serenity/balance.java @@ -0,0 +1,321 @@ +package Serenity; + +import net.dv8tion.jda.core.entities.ChannelType; +import net.dv8tion.jda.core.entities.Member; +import net.dv8tion.jda.core.entities.Role; +import net.dv8tion.jda.core.entities.User; +import net.dv8tion.jda.core.entities.impl.RoleImpl; +import net.dv8tion.jda.core.events.message.MessageReceivedEvent; +import net.dv8tion.jda.core.exceptions.InsufficientPermissionException; +import net.dv8tion.jda.core.hooks.ListenerAdapter; +import org.json.JSONArray; +import org.json.JSONObject; + +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; + +public class balance extends ListenerAdapter { + + private String prefixPromote; + private String prefixDegradation; + private String prefixDetail; + + + public balance() { + this.prefixPromote = "!info"; + this.prefixDegradation = "!add "; + this.prefixDetail = "!detail"; + + } + + @Override + public void onMessageReceived(MessageReceivedEvent event) { + if(event.getMessage().getContentRaw().startsWith("!ende")) { + event.getJDA().shutdown(); + } + if ((!event.getMessage().getContentRaw().startsWith(this.prefixPromote) && + !event.getMessage().getContentRaw().startsWith(this.prefixDegradation) && + !event.getMessage().getContentRaw().startsWith(this.prefixDetail)) || event.getChannelType() != ChannelType.TEXT) { + return; + } + + User author = event.getAuthor(); + if (!author.isBot()) { + if(event.getMessage().getContentRaw().startsWith(this.prefixPromote)) + this.getInfo(event); + else if(event.getMessage().getContentRaw().startsWith(this.prefixDegradation)) + this.addTransaction(event); + else if(event.getMessage().getContentRaw().startsWith(this.prefixDetail)) + this.getInfo(event, true); + + } + } + private void getInfo(MessageReceivedEvent event) { + this.getInfo(event, false); + } + private void getInfo(MessageReceivedEvent event, Boolean detail) { + HttpURLConnection con = null; + String result = ""; + DecimalFormat myFormatter = new DecimalFormat(); + + 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 + + try { + String parameter = ""; + if(event.getMessage().getMentionedUsers().size() > 0) { + if(IdConvert.containsKey(event.getMessage().getMentionedUsers().get(0).getId())) + parameter = "?id=" + (IdConvert.get(event.getMessage().getMentionedUsers().get(0).getId())); + } + else { + parameter = "?id=1"; + } + if(detail) { + parameter += "&detail=1"; + } + URL url = new URL("http://localhost/REST/balance" + parameter); + con = (HttpURLConnection) url.openConnection(); + con.setRequestMethod("GET"); + con.setConnectTimeout(3600); + con.setReadTimeout(360); + con.setUseCaches(false); + con.connect(); + + int status = con.getResponseCode(); + switch (status) { + case 200: + case 201: + 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 testjason = new JSONObject(content.toString()); + Iterator keys = testjason.keys(); + + while(keys.hasNext()) { + String key = keys.next(); + if (testjason.get(key) instanceof JSONObject) { + result += "**" + ((JSONObject) testjason.get(key)).get("name").toString() + ":**\n"; + result += "```"; + JSONArray transaction = (JSONArray) ((JSONObject) testjason.get(key)).get("transaction"); + for(int i = 0; i < transaction.length(); i++) { + for (int j = 7-(myFormatter.format(Float.parseFloat(((JSONObject) transaction.get(i)).get("amount").toString()))).length(); j > 0; j--) { + result += " "; + } + result += (myFormatter.format(Float.parseFloat(((JSONObject) transaction.get(i)).get("amount").toString()))); + + + result += " " + ((JSONObject) transaction.get(i)).get("currency_name").toString() + " "; + if(detail) { + result += " - " + ((JSONObject) transaction.get(i)).get("reason").toString(); + } + result += "\n"; + } + result += "```"; + } + } + event.getChannel().sendMessage(event.getMember().getAsMention() + "\n" + result).queue(); + break; + default: + System.out.println(":("); + } + con.disconnect(); + + } catch (Exception e) { + System.out.println("problem: "+e.getMessage()); + } + finally { + if (con != null) { + try { + con.disconnect(); + } catch (Exception ex) { + System.out.println("final fehler"); + } + } + } + + } + + 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; + String result = ""; + boolean allfound = true; + String[] MsgParts; + String reason = ""; + float ammount = 0; + + HttpURLConnection con = null; + DecimalFormat myFormatter = new DecimalFormat(); + + try { + + 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()]; + + if(!currencyConvert.containsKey(MsgParts[1].toLowerCase())) { + event.getChannel().sendMessage(event.getMember().getAsMention() + " " + MsgParts[1] + " ist keine bekannte Währung").queue(); + return; + } + 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(); + + } + + reason = MsgParts_exl_Mention[1].trim().substring(MsgParts[0].length() + MsgParts[1].length()+2); + + for(int i = 0; i< event.getMessage().getMentionedUsers().size(); i++) { + if(!IdConvert.containsKey( event.getMessage().getMentionedUsers().get(i).getId())) { + allfound = false; + result = result + " " + event.getMessage().getMentionedUsers().get(i).getName(); + } + else { + ids[i] = (int) IdConvert.get(event.getMessage().getMentionedUsers().get(i).getId()); + } + } + + if(!allfound) { + event.getChannel().sendMessage(event.getMember().getAsMention() + result + " wurde(n) nicht gefunden").queue(); + return; + } + + 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); + + 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: + 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 testjason = new JSONObject(content.toString()); + Iterator keys = testjason.keys(); + + result = ""; + while(keys.hasNext()) { + String key = keys.next(); + String id = getKey(IdConvert, Integer.parseInt(key)).toString(); + + if(key.equals("1")) { + result += "Das Schiff bekommt: " + testjason.get(key) + " " + currencyConvert2.get(currencyConvert.get(MsgParts[1].toLowerCase())) + " "; + } + else { + result += event.getGuild().getMemberById(id).getAsMention() + " bekommt " + testjason.get(key) + " " + currencyConvert2.get(currencyConvert.get(MsgParts[1].toLowerCase())) + " "; + } + /*if (testjason.get(key) instanceof JSONObject) { + result = result + "**" + ((JSONObject) testjason.get(key)).get("name").toString() + ":**\n"; + JSONArray transaction = (JSONArray) ((JSONObject) testjason.get(key)).get("transaction"); + for(int i = 0; i < transaction.length(); i++) { + result = result + (myFormatter.format(Float.parseFloat(((JSONObject) transaction.get(i)).get("amount").toString()))); + result = result + " " + ((JSONObject) transaction.get(i)).get("currency_name").toString() + "\n"; + } + }*/ + } + event.getChannel().sendMessage(event.getMember().getAsMention() + " " + result).queue(); + break; + default: + System.out.println(":("); + } + con.disconnect(); + + //event.getJDA().getSelfUser(). + } + + catch (Exception e) { + System.out.println("problem: "+e.getMessage()); + } + finally { + if (con != null) { + try { + con.disconnect(); + } catch (Exception ex) { + System.out.println("final fehler"); + } + } + } + } + + 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 b32dfa5..3ce5563 100644 --- a/src/main/java/core/Main.java +++ b/src/main/java/core/Main.java @@ -1,7 +1,7 @@ package core; -import AtlasGruppe.groupchange; +import Serenity.balance; import net.dv8tion.jda.core.JDA; import net.dv8tion.jda.core.JDABuilder; import net.dv8tion.jda.core.AccountType; @@ -16,15 +16,17 @@ public class Main { public static void main(String[] args) { // Insert your bot's token here - String token = "NDA1MDQ2NDg1OTk0OTYyOTQ2.DUessg.YFKvsTLIyPwprLlEOnZc0PXWJH0"; + String token = "NTQ2ODk5MzYwMDEzODc3MjU4.D0u8wA.VfA2vJzundVhCl1-ibDiBaKuA8w"; + // iro + //String token = "NTQ2NzEwODUwOTIxMjk5OTc5.D0sL6A.1fUd5iBr3eo2tbPXofEqyumDm6w"; JDABuilder builder = new JDABuilder(AccountType.BOT); builder.setToken(token); builder.setAutoReconnect(true); builder.setStatus(OnlineStatus.ONLINE); - builder.setGame(Game.watching("Den NinjaSäuen zu")); - builder.addEventListener(new groupchange()); + builder.setGame(Game.playing("mit den Würfeln")); + builder.addEventListener(new balance()); try { JDA jda = builder.build(); From 7b923bc6065d73884b6434239a7c76b2322ab1c3 Mon Sep 17 00:00:00 2001 From: Ocame Date: Mon, 18 Feb 2019 16:15:47 +0100 Subject: [PATCH 02/28] =?UTF-8?q?=C3=BCberarbeitung=20Kommentare?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Serenity/balance.java | 206 +++++++++++++++------------- 1 file changed, 108 insertions(+), 98 deletions(-) mode change 100644 => 100755 src/main/java/Serenity/balance.java diff --git a/src/main/java/Serenity/balance.java b/src/main/java/Serenity/balance.java old mode 100644 new mode 100755 index ec4c548..a503bb3 --- a/src/main/java/Serenity/balance.java +++ b/src/main/java/Serenity/balance.java @@ -1,12 +1,8 @@ package Serenity; import net.dv8tion.jda.core.entities.ChannelType; -import net.dv8tion.jda.core.entities.Member; -import net.dv8tion.jda.core.entities.Role; import net.dv8tion.jda.core.entities.User; -import net.dv8tion.jda.core.entities.impl.RoleImpl; import net.dv8tion.jda.core.events.message.MessageReceivedEvent; -import net.dv8tion.jda.core.exceptions.InsufficientPermissionException; import net.dv8tion.jda.core.hooks.ListenerAdapter; import org.json.JSONArray; import org.json.JSONObject; @@ -15,11 +11,9 @@ 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.*; -public class balance extends ListenerAdapter { +public class balance extends ListenerAdapter { private String prefixPromote; private String prefixDegradation; @@ -27,15 +21,14 @@ public class balance extends ListenerAdapter { public balance() { - this.prefixPromote = "!info"; - this.prefixDegradation = "!add "; + this.prefixPromote = "!konto"; + this.prefixDegradation = "!pay "; this.prefixDetail = "!detail"; - } @Override public void onMessageReceived(MessageReceivedEvent event) { - if(event.getMessage().getContentRaw().startsWith("!ende")) { + if (event.getMessage().getContentRaw().startsWith("!ende")) { // nur zum Debugen #todo muss wieder raus event.getJDA().shutdown(); } if ((!event.getMessage().getContentRaw().startsWith(this.prefixPromote) && @@ -46,24 +39,33 @@ public class balance extends ListenerAdapter { User author = event.getAuthor(); if (!author.isBot()) { - if(event.getMessage().getContentRaw().startsWith(this.prefixPromote)) + if (event.getMessage().getContentRaw().startsWith(this.prefixPromote)) this.getInfo(event); - else if(event.getMessage().getContentRaw().startsWith(this.prefixDegradation)) + else if (event.getMessage().getContentRaw().startsWith(this.prefixDegradation)) this.addTransaction(event); - else if(event.getMessage().getContentRaw().startsWith(this.prefixDetail)) + else if (event.getMessage().getContentRaw().startsWith(this.prefixDetail)) this.getInfo(event, true); } } + 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) { HttpURLConnection con = null; - String result = ""; + //String result = ""; + StringBuilder result_test = new StringBuilder(""); DecimalFormat myFormatter = new DecimalFormat(); - Map IdConvert = new HashMap(); + Map IdConvert = new HashMap<>(); IdConvert.put("256888865103544321", 2); // Niclos IdConvert.put("495895196685303818", 3); // Birgit IdConvert.put("385865287586545676", 7); // Felix @@ -73,17 +75,19 @@ public class balance extends ListenerAdapter { IdConvert.put(event.getJDA().getSelfUser().getId(), 1); // Schiff try { + // Zerlgen der Anfrage String parameter = ""; - if(event.getMessage().getMentionedUsers().size() > 0) { - if(IdConvert.containsKey(event.getMessage().getMentionedUsers().get(0).getId())) + if (event.getMessage().getMentionedUsers().size() > 0) { + if (IdConvert.containsKey(event.getMessage().getMentionedUsers().get(0).getId())) parameter = "?id=" + (IdConvert.get(event.getMessage().getMentionedUsers().get(0).getId())); - } - else { + } else { parameter = "?id=1"; } - if(detail) { + if (detail) { parameter += "&detail=1"; } + + // aufbau zum REST URL url = new URL("http://localhost/REST/balance" + parameter); con = (HttpURLConnection) url.openConnection(); con.setRequestMethod("GET"); @@ -95,41 +99,43 @@ public class balance extends ListenerAdapter { int status = con.getResponseCode(); switch (status) { case 200: - case 201: + case 201: // auswerten der Antwort BufferedReader in = new BufferedReader( - new InputStreamReader(con.getInputStream())); + new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer content = new StringBuffer(); while ((inputLine = in.readLine()) != null) { content.append(inputLine); } in.close(); - JSONObject testjason = new JSONObject(content.toString()); - Iterator keys = testjason.keys(); - while(keys.hasNext()) { + JSONObject responseJson = new JSONObject(content.toString()); + Iterator keys = responseJson.keys(); + + while (keys.hasNext()) { String key = keys.next(); - if (testjason.get(key) instanceof JSONObject) { - result += "**" + ((JSONObject) testjason.get(key)).get("name").toString() + ":**\n"; - result += "```"; - JSONArray transaction = (JSONArray) ((JSONObject) testjason.get(key)).get("transaction"); - for(int i = 0; i < transaction.length(); i++) { - for (int j = 7-(myFormatter.format(Float.parseFloat(((JSONObject) transaction.get(i)).get("amount").toString()))).length(); j > 0; j--) { - result += " "; + if (responseJson.get(key) instanceof JSONObject) { + result_test.append("**").append(((JSONObject) responseJson.get(key)).get("name").toString()).append(":**\n"); + + result_test.append("```"); + JSONArray transaction = (JSONArray) ((JSONObject) responseJson.get(key)).get("transaction"); + for (int i = 0; i < transaction.length(); i++) { + for (int j = 7 - (myFormatter.format(Float.parseFloat(((JSONObject) transaction.get(i)).get("amount").toString()))).length(); j > 0; j--) { + result_test.append(" "); } - result += (myFormatter.format(Float.parseFloat(((JSONObject) transaction.get(i)).get("amount").toString()))); + result_test.append( (myFormatter.format(Float.parseFloat(((JSONObject) transaction.get(i)).get("amount").toString())))); - result += " " + ((JSONObject) transaction.get(i)).get("currency_name").toString() + " "; - if(detail) { - result += " - " + ((JSONObject) transaction.get(i)).get("reason").toString(); + result_test.append(" ").append( ((JSONObject) transaction.get(i)).get("currency_name").toString()).append(" "); + if (detail) { + result_test.append(" - ").append(((JSONObject) transaction.get(i)).get("reason").toString()); } - result += "\n"; + result_test.append( "\n"); } - result += "```"; + result_test.append( "```"); } } - event.getChannel().sendMessage(event.getMember().getAsMention() + "\n" + result).queue(); + event.getChannel().sendMessage(event.getMember().getAsMention() + "\n" + result_test.toString()).queue(); break; default: System.out.println(":("); @@ -137,10 +143,9 @@ public class balance extends ListenerAdapter { con.disconnect(); } catch (Exception e) { - System.out.println("problem: "+e.getMessage()); - } - finally { - if (con != null) { + System.out.println("problem: " + e.getMessage()); + } finally { + if (con != null) { // Verbindung schließen wenn noch offen try { con.disconnect(); } catch (Exception ex) { @@ -151,8 +156,13 @@ public class balance extends ListenerAdapter { } + /** + * Fügt neue Transaktion hinzu + * + * @param event JDA Event + */ private void addTransaction(MessageReceivedEvent event) { - Map IdConvert = new HashMap(); + Map IdConvert = new HashMap<>(); IdConvert.put("256888865103544321", 2); // Niclos IdConvert.put("495895196685303818", 3); // Birgit IdConvert.put("385865287586545676", 7); // Felix @@ -162,7 +172,7 @@ public class balance extends ListenerAdapter { IdConvert.put(event.getJDA().getSelfUser().getId(), 1); // Schiff - Map currencyConvert = new HashMap(); + Map currencyConvert = new HashMap<>(); currencyConvert.put("credit", 1); currencyConvert.put("c", 1); currencyConvert.put("doller", 2); @@ -175,7 +185,7 @@ public class balance extends ListenerAdapter { currencyConvert.put("silver", 5); currencyConvert.put("s", 5); - Map currencyConvert2 = new HashMap(); + Map currencyConvert2 = new HashMap<>(); currencyConvert2.put(1, "Credit"); currencyConvert2.put(2, "Doller"); currencyConvert2.put(3, "Platinum"); @@ -183,53 +193,56 @@ public class balance extends ListenerAdapter { currencyConvert2.put(5, "Silver"); int[] ids; - String result = ""; + StringBuilder result = new StringBuilder(""); boolean allfound = true; String[] MsgParts; - String reason = ""; - float ammount = 0; + float ammount; HttpURLConnection con = null; - DecimalFormat myFormatter = new DecimalFormat(); try { - - String[] MsgParts_exl_Mention = event.getMessage().getContentRaw().split(event.getMessage().getMentionedUsers().get(event.getMessage().getMentionedUsers().size()-1).getAsMention(), 2); + // 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()]; - if(!currencyConvert.containsKey(MsgParts[1].toLowerCase())) { + // 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(); + } catch (NumberFormatException e) { + event.getChannel().sendMessage(event.getMember().getAsMention() + " " + MsgParts[MsgParts.length - 2] + " ist keine gültige Zahl").queue(); + return; } - reason = MsgParts_exl_Mention[1].trim().substring(MsgParts[0].length() + MsgParts[1].length()+2); - for(int i = 0; i< event.getMessage().getMentionedUsers().size(); i++) { - if(!IdConvert.containsKey( event.getMessage().getMentionedUsers().get(i).getId())) { - allfound = false; - result = result + " " + event.getMessage().getMentionedUsers().get(i).getName(); - } - else { - ids[i] = (int) IdConvert.get(event.getMessage().getMentionedUsers().get(i).getId()); - } + // 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 + " wurde(n) nicht gefunden").queue(); + if (!allfound) { + event.getChannel().sendMessage(event.getMember().getAsMention() + result.toString() + " wurde(n) nicht gefunden").queue(); return; } - JSONObject payload = new JSONObject(); + 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); @@ -242,7 +255,9 @@ public class balance extends ListenerAdapter { 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")); @@ -254,7 +269,7 @@ public class balance extends ListenerAdapter { switch (status) { case 200: - case 201: + case 201: // Verarbeiten der Antwort BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream())); String inputLine; @@ -263,44 +278,31 @@ public class balance extends ListenerAdapter { content.append(inputLine); } in.close(); - JSONObject testjason = new JSONObject(content.toString()); - Iterator keys = testjason.keys(); + JSONObject responseJson = new JSONObject(content.toString()); + Iterator keys = responseJson.keys(); - result = ""; - while(keys.hasNext()) { + result = new StringBuilder(""); + while (keys.hasNext()) { String key = keys.next(); - String id = getKey(IdConvert, Integer.parseInt(key)).toString(); + String id = getKey(IdConvert, Integer.parseInt(key)); - if(key.equals("1")) { - result += "Das Schiff bekommt: " + testjason.get(key) + " " + currencyConvert2.get(currencyConvert.get(MsgParts[1].toLowerCase())) + " "; + 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(" "); } - else { - result += event.getGuild().getMemberById(id).getAsMention() + " bekommt " + testjason.get(key) + " " + currencyConvert2.get(currencyConvert.get(MsgParts[1].toLowerCase())) + " "; - } - /*if (testjason.get(key) instanceof JSONObject) { - result = result + "**" + ((JSONObject) testjason.get(key)).get("name").toString() + ":**\n"; - JSONArray transaction = (JSONArray) ((JSONObject) testjason.get(key)).get("transaction"); - for(int i = 0; i < transaction.length(); i++) { - result = result + (myFormatter.format(Float.parseFloat(((JSONObject) transaction.get(i)).get("amount").toString()))); - result = result + " " + ((JSONObject) transaction.get(i)).get("currency_name").toString() + "\n"; - } - }*/ } - event.getChannel().sendMessage(event.getMember().getAsMention() + " " + result).queue(); + event.getChannel().sendMessage(event.getMember().getAsMention() + " " + result.toString()).queue(); break; default: System.out.println(":("); } con.disconnect(); - //event.getJDA().getSelfUser(). - } - - catch (Exception e) { - System.out.println("problem: "+e.getMessage()); - } - finally { - if (con != null) { + } 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) { @@ -310,7 +312,15 @@ public class balance extends ListenerAdapter { } } - private K getKey(Map map, V value) { + /** + * 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(); From e5d9c703b5604e1905be8fd0c96b5ed0032a1a9e Mon Sep 17 00:00:00 2001 From: Ocame Date: Tue, 19 Feb 2019 05:15:53 +0100 Subject: [PATCH 03/28] =?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(); From 75c3b67dad1b29549be7006b6c321f26a233d1a2 Mon Sep 17 00:00:00 2001 From: Sebastian Zeidler Date: Tue, 19 Feb 2019 19:04:55 +0100 Subject: [PATCH 04/28] =?UTF-8?q?einfache=20Zitate=20hinzugf=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/Shadowrun/dice.java | 108 ++++++++++ src/main/java/core/Main.java | 4 +- 3 files changed, 110 insertions(+), 274 deletions(-) delete mode 100644 src/main/java/Shadowrun/Shadowrun.java create mode 100755 src/main/java/Shadowrun/dice.java mode change 100644 => 100755 src/main/java/core/Main.java diff --git a/src/main/java/Shadowrun/Shadowrun.java b/src/main/java/Shadowrun/Shadowrun.java deleted file mode 100644 index ab8e1fc..0000000 --- a/src/main/java/Shadowrun/Shadowrun.java +++ /dev/null @@ -1,272 +0,0 @@ -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/Shadowrun/dice.java b/src/main/java/Shadowrun/dice.java new file mode 100755 index 0000000..3b9ba5b --- /dev/null +++ b/src/main/java/Shadowrun/dice.java @@ -0,0 +1,108 @@ +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.util.Random; + +public class dice extends ListenerAdapter { + + private String prefixSr; + private String prefixZitat; + + + + public dice() { + this.prefixSr = "!sr"; + this.prefixZitat = "!zitat"; + } + + @Override + public void onMessageReceived(MessageReceivedEvent event) { + if ((!event.getMessage().getContentRaw().startsWith(this.prefixSr) && !event.getMessage().getContentRaw().startsWith(this.prefixZitat)) || event.getChannelType() != ChannelType.TEXT) { + return; + } + + User author = event.getAuthor(); + if (!author.isBot()) { + if (event.getMessage().getContentRaw().startsWith(this.prefixSr)) + this.roll(event); + if (event.getMessage().getContentRaw().startsWith(this.prefixZitat)) + this.zitat(event); + } + } + + /** + * Holt Kontostand ab + * + * @param event JDA Event + */ + private void roll(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 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 { + + } + + } + 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(700); + event.getChannel().sendMessage(quotes[dice%7]).queue(); + } + + +} diff --git a/src/main/java/core/Main.java b/src/main/java/core/Main.java old mode 100644 new mode 100755 index e35fd52..2366794 --- a/src/main/java/core/Main.java +++ b/src/main/java/core/Main.java @@ -2,7 +2,7 @@ package core; import Serenity.balance; -import Shadowrun.Shadowrun; +import Shadowrun.dice; import net.dv8tion.jda.core.JDA; import net.dv8tion.jda.core.JDABuilder; import net.dv8tion.jda.core.AccountType; @@ -28,7 +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() ); + builder.addEventListener(new dice() ); try { JDA jda = builder.build(); From 808c9d8fac5b4a14315e00a2fe1672cd797a44b6 Mon Sep 17 00:00:00 2001 From: Sebastian Zeidler Date: Wed, 20 Feb 2019 19:30:49 +0100 Subject: [PATCH 05/28] zwichencommit --- src/main/java/Shadowrun/dice.java | 175 +++++++++++++++++++++++++++--- 1 file changed, 160 insertions(+), 15 deletions(-) diff --git a/src/main/java/Shadowrun/dice.java b/src/main/java/Shadowrun/dice.java index 3b9ba5b..d4df6e2 100755 --- a/src/main/java/Shadowrun/dice.java +++ b/src/main/java/Shadowrun/dice.java @@ -10,23 +10,27 @@ import org.json.JSONObject; import java.awt.*; +import java.security.SecureRandom; import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; public class dice extends ListenerAdapter { private String prefixSr; private String prefixZitat; + private String prefixTest; public dice() { this.prefixSr = "!sr"; + this.prefixTest = "!rollTest"; this.prefixZitat = "!zitat"; } @Override public void onMessageReceived(MessageReceivedEvent event) { - if ((!event.getMessage().getContentRaw().startsWith(this.prefixSr) && !event.getMessage().getContentRaw().startsWith(this.prefixZitat)) || event.getChannelType() != ChannelType.TEXT) { + if ((!event.getMessage().getContentRaw().startsWith(this.prefixSr) && !event.getMessage().getContentRaw().startsWith(this.prefixZitat) && !event.getMessage().getContentRaw().startsWith(this.prefixTest)) || event.getChannelType() != ChannelType.TEXT) { return; } @@ -34,13 +38,78 @@ public class dice extends ListenerAdapter { if (!author.isBot()) { if (event.getMessage().getContentRaw().startsWith(this.prefixSr)) this.roll(event); + if (event.getMessage().getContentRaw().startsWith(this.prefixTest)) + this.rollTest(event); if (event.getMessage().getContentRaw().startsWith(this.prefixZitat)) this.zitat(event); } } /** - * Holt Kontostand ab + * 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()); + } finally { + + } + + } + /** + * rolltest * * @param event JDA Event */ @@ -53,25 +122,101 @@ public class dice extends ListenerAdapter { - int[] verteilung = new int[6]; int dice1; + int numberOdDice = 1; + int diceart = 6; + StringBuilder result = new StringBuilder(""); + + int hits = 0; + boolean glitches = false; + boolean critGlitches = false; + + boolean edge = false; 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(); + if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"+")) { + edge = true; + } + String[] MsgParts = event.getMessage().getContentRaw().split(" ", 2); + if(MsgParts.length < 2) { + event.getChannel().sendMessage(event.getMember().getAsMention() + " der " + this.prefixSr + " befehl benötigt einen Wert").queue(); return; } - for(int i = 0; i < rounds; i++) { - dice1 = new Random().nextInt(6); + + if(MsgParts[1].trim().matches(".*[^0-9].*")) { // es wurden andere zeichen als Zahlen gefunden + 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]); + numberOdDice = Integer.parseInt(diceInterpreter[0]); + } + catch (NumberFormatException e) { + event.getChannel().sendMessage(event.getMember().getAsMention() + " Irgent was dummes ist passiert beim Verstehen von " + MsgParts[1].trim().toLowerCase()).queue(); + return; + } + } + else { + try { + numberOdDice = Integer.parseInt(MsgParts[1].trim().replace(" ", "")); + } + catch (NumberFormatException e) { + event.getChannel().sendMessage(event.getMember().getAsMention() + " Irgent was dummes ist passiert beim Verstehen von " + MsgParts[1].trim()).queue(); + return; + } + } +/* + if(MsgParts[1].trim().toLowerCase().replace(" ", "").matches("^([0-9]*\\+)?[0-9]*([dw][0-9]*)?(\\+[0-9]*)?")) { // format besteh aus (Zahlen)+(Zahlen)d(Zahlen) oder (Zahlen)d(Zahlen)+(Zahlen) + String[] diceInterpreter = MsgParts[1].trim().toLowerCase().replace(" ", "").split("\\+"); + try { + diceart = Integer.parseInt(diceInterpreter[1]); + numberOdDice = Integer.parseInt(diceInterpreter[0]); + } + catch (NumberFormatException e) { + event.getChannel().sendMessage(event.getMember().getAsMention() + " Irgent was dummes ist passiert beim Verstehen von " + MsgParts[1].trim().toLowerCase()).queue(); + return; + } + }*/ + } + + + if(numberOdDice <= 0) { + event.getChannel().sendMessage(event.getMember().getAsMention() + " es darf kein Negativen Wurf geben").queue(); + return; + } + + int bonusEdegeDice = 0; + for(int i = 0; i < numberOdDice+bonusEdegeDice; i++) { + dice1 = new Random().nextInt(diceart); + if(edge && dice1 == 5) + bonusEdegeDice++; + if(edge && dice1 >= 4) { + hits++; + } verteilung[dice1]++; + result.append(dice1); + result.append(" "); } - 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); + if (verteilung[0] >= (numberOdDice+bonusEdegeDice)/2) { + glitches = true; } + + + if(hits == 0) { + test.setColor(Color.red); + } + else if(glitches == true) { + test.setColor(Color.yellow); + } + else { + test.setColor(Color.green); + } + + for(int i = 0; i < diceart; i++) { + float pro = verteilung[i]*100f/numberOdDice; + test.addField(Integer.toString(i+1), Integer.toString(verteilung[i]) + " - " + String.format("%.2f", pro) + "%", true); + } + event.getChannel().sendMessage(test.build()).queue(); } @@ -98,10 +243,10 @@ public class dice extends ListenerAdapter { 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. "; + //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(700); - event.getChannel().sendMessage(quotes[dice%7]).queue(); + int dice = new Random().nextInt(600); + event.getChannel().sendMessage(quotes[dice%6]).queue(); } From cc346d58589e2d714fdf599bc9fbbd0215208237 Mon Sep 17 00:00:00 2001 From: Ocame Date: Thu, 21 Feb 2019 04:42:52 +0100 Subject: [PATCH 06/28] Anpassung !sr darstellung, und erweiterung !detail um Konto --- src/main/java/Serenity/balance.java | 30 ++++++++--- src/main/java/Shadowrun/dice.java | 82 +++++++++++++++++++---------- 2 files changed, 77 insertions(+), 35 deletions(-) diff --git a/src/main/java/Serenity/balance.java b/src/main/java/Serenity/balance.java index a503bb3..c4ff89d 100755 --- a/src/main/java/Serenity/balance.java +++ b/src/main/java/Serenity/balance.java @@ -118,18 +118,32 @@ public class balance extends ListenerAdapter { result_test.append("**").append(((JSONObject) responseJson.get(key)).get("name").toString()).append(":**\n"); result_test.append("```"); - JSONArray transaction = (JSONArray) ((JSONObject) responseJson.get(key)).get("transaction"); - for (int i = 0; i < transaction.length(); i++) { - for (int j = 7 - (myFormatter.format(Float.parseFloat(((JSONObject) transaction.get(i)).get("amount").toString()))).length(); j > 0; j--) { + if (detail) { + JSONArray transaction = (JSONArray) ((JSONObject) responseJson.get(key)).get("transaction"); + for (int i = 0; i < transaction.length(); i++) { + for (int j = 7 - (myFormatter.format(Float.parseFloat(((JSONObject) transaction.get(i)).get("amount").toString()))).length(); j > 0; j--) { + result_test.append(" "); + } + result_test.append( (myFormatter.format(Float.parseFloat(((JSONObject) transaction.get(i)).get("amount").toString())))); + + + result_test.append(" ").append( ((JSONObject) transaction.get(i)).get("currency_name").toString()).append(" "); + + result_test.append(" - ").append(((JSONObject) transaction.get(i)).get("reason").toString()); + + result_test.append( "\n"); + } + result_test.append( "\n-------------------------------------\n"); + } + JSONArray balance = (JSONArray) ((JSONObject) responseJson.get(key)).get("balance"); + for (int i = 0; i < balance.length(); i++) { + for (int j = 7 - (myFormatter.format(Float.parseFloat(((JSONObject) balance.get(i)).get("amount").toString()))).length(); j > 0; j--) { result_test.append(" "); } - result_test.append( (myFormatter.format(Float.parseFloat(((JSONObject) transaction.get(i)).get("amount").toString())))); + result_test.append( (myFormatter.format(Float.parseFloat(((JSONObject) balance.get(i)).get("amount").toString())))); - result_test.append(" ").append( ((JSONObject) transaction.get(i)).get("currency_name").toString()).append(" "); - if (detail) { - result_test.append(" - ").append(((JSONObject) transaction.get(i)).get("reason").toString()); - } + result_test.append(" ").append( ((JSONObject) balance.get(i)).get("currency_name").toString()).append(" "); result_test.append( "\n"); } result_test.append( "```"); diff --git a/src/main/java/Shadowrun/dice.java b/src/main/java/Shadowrun/dice.java index d4df6e2..7bada01 100755 --- a/src/main/java/Shadowrun/dice.java +++ b/src/main/java/Shadowrun/dice.java @@ -115,16 +115,11 @@ public class dice extends ListenerAdapter { */ private void roll(MessageReceivedEvent event) { - EmbedBuilder test = new EmbedBuilder(); - test.setTitle("Das ist ein Test"); - test.setColor(Color.red); - test.setDescription("Text " + event.getMember().getAsMention()); - - + EmbedBuilder outputBox = new EmbedBuilder(); int[] verteilung = new int[6]; int dice1; - int numberOdDice = 1; + int numberOfDice = 1; int diceart = 6; StringBuilder result = new StringBuilder(""); @@ -149,7 +144,7 @@ public class dice extends ListenerAdapter { String[] diceInterpreter = MsgParts[1].trim().toLowerCase().replace(" ", "").split("[wd]"); try { diceart = Integer.parseInt(diceInterpreter[1]); - numberOdDice = Integer.parseInt(diceInterpreter[0]); + numberOfDice = Integer.parseInt(diceInterpreter[0]); } catch (NumberFormatException e) { event.getChannel().sendMessage(event.getMember().getAsMention() + " Irgent was dummes ist passiert beim Verstehen von " + MsgParts[1].trim().toLowerCase()).queue(); @@ -157,14 +152,19 @@ public class dice extends ListenerAdapter { } } else { - try { - numberOdDice = Integer.parseInt(MsgParts[1].trim().replace(" ", "")); - } - catch (NumberFormatException e) { - event.getChannel().sendMessage(event.getMember().getAsMention() + " Irgent was dummes ist passiert beim Verstehen von " + MsgParts[1].trim()).queue(); - return; - } + event.getChannel().sendMessage(event.getMember().getAsMention() + " ich verstehe nicht was du von mir willst mit " + MsgParts[1].trim()).queue(); + return; } + } + else { + try { + numberOfDice = Integer.parseInt(MsgParts[1].trim().replace(" ", "")); + } + catch (NumberFormatException e) { + event.getChannel().sendMessage(event.getMember().getAsMention() + " Irgent was dummes ist passiert beim Verstehen von " + MsgParts[1].trim()).queue(); + return; + } + } /* if(MsgParts[1].trim().toLowerCase().replace(" ", "").matches("^([0-9]*\\+)?[0-9]*([dw][0-9]*)?(\\+[0-9]*)?")) { // format besteh aus (Zahlen)+(Zahlen)d(Zahlen) oder (Zahlen)d(Zahlen)+(Zahlen) String[] diceInterpreter = MsgParts[1].trim().toLowerCase().replace(" ", "").split("\\+"); @@ -177,47 +177,75 @@ public class dice extends ListenerAdapter { return; } }*/ - } - if(numberOdDice <= 0) { + + if(numberOfDice <= 0) { event.getChannel().sendMessage(event.getMember().getAsMention() + " es darf kein Negativen Wurf geben").queue(); return; } int bonusEdegeDice = 0; - for(int i = 0; i < numberOdDice+bonusEdegeDice; i++) { + for(int i = 0; i < numberOfDice+bonusEdegeDice; i++) { dice1 = new Random().nextInt(diceart); if(edge && dice1 == 5) bonusEdegeDice++; - if(edge && dice1 >= 4) { + if(dice1 >= 4) { hits++; } verteilung[dice1]++; - result.append(dice1); + result.append(dice1+1); result.append(" "); } - if (verteilung[0] >= (numberOdDice+bonusEdegeDice)/2) { + if (verteilung[0] >= (numberOfDice+bonusEdegeDice)/2 && verteilung[0] > 0) { glitches = true; } if(hits == 0) { - test.setColor(Color.red); + outputBox.setColor(Color.red); + if(glitches == true) { + outputBox.setDescription("**Kritischer Patzer** :,("); + } + else { + outputBox.setDescription("**nicht geschafft**"); + } } else if(glitches == true) { - test.setColor(Color.yellow); + outputBox.setColor(Color.yellow); + outputBox.setDescription("**Patzer** :("); } else { - test.setColor(Color.green); + outputBox.setColor(Color.green); + if(hits == 1) { + outputBox.setDescription("**" + String.valueOf(hits) + " Erfolg**"); + } + else if(hits < 4) { + outputBox.setDescription("**" + String.valueOf(hits) + " Erfolge**"); + } + else if(hits < 6) { + outputBox.setDescription("**" + String.valueOf(hits) + " Erfolge**, das ist schon ordentlich"); + } + else if(hits < 10) { + outputBox.setDescription("**" + String.valueOf(hits) + " Erfolge**, WOW sowas mal nachmachen"); + } + else { + outputBox.setDescription("**" + String.valueOf(hits) + " Erfolge**, bist du Wahnsinnig?"); + } } + outputBox.setTitle(event.getMember().getEffectiveName() + " dein Wurf " + MsgParts[1] + " ergibt:"); + + outputBox.addField("Erfolge", String.valueOf(hits), true); + outputBox.addField("Misserfolge", String.valueOf(verteilung[0]), true); + outputBox.addField("Ergbenise", result.toString(), false); + for(int i = 0; i < diceart; i++) { - float pro = verteilung[i]*100f/numberOdDice; - test.addField(Integer.toString(i+1), Integer.toString(verteilung[i]) + " - " + String.format("%.2f", pro) + "%", true); + float pro = verteilung[i]*100f/numberOfDice; + //outputBox.addField(Integer.toString(i+1), Integer.toString(verteilung[i]) + " - " + String.format("%.2f", pro) + "%", true); } - event.getChannel().sendMessage(test.build()).queue(); + event.getChannel().sendMessage(outputBox.build()).queue(); } catch (NumberFormatException e) { From 3dea42842f165d00efc3beb74f08d92138795aaa Mon Sep 17 00:00:00 2001 From: Ocame Date: Fri, 22 Feb 2019 14:01:02 +0100 Subject: [PATCH 07/28] Anpassung Befehle und Roll darstellung --- src/main/java/Serenity/balance.java | 6 +-- src/main/java/Shadowrun/dice.java | 59 +++++++++++------------------ 2 files changed, 26 insertions(+), 39 deletions(-) diff --git a/src/main/java/Serenity/balance.java b/src/main/java/Serenity/balance.java index c4ff89d..e050cee 100755 --- a/src/main/java/Serenity/balance.java +++ b/src/main/java/Serenity/balance.java @@ -21,9 +21,9 @@ public class balance extends ListenerAdapter { public balance() { - this.prefixPromote = "!konto"; - this.prefixDegradation = "!pay "; - this.prefixDetail = "!detail"; + this.prefixPromote = "/konto"; + this.prefixDegradation = "/pay "; + this.prefixDetail = "/detail"; } @Override diff --git a/src/main/java/Shadowrun/dice.java b/src/main/java/Shadowrun/dice.java index 7bada01..756b31c 100755 --- a/src/main/java/Shadowrun/dice.java +++ b/src/main/java/Shadowrun/dice.java @@ -23,9 +23,9 @@ public class dice extends ListenerAdapter { public dice() { - this.prefixSr = "!sr"; - this.prefixTest = "!rollTest"; - this.prefixZitat = "!zitat"; + this.prefixSr = "/sr"; + this.prefixTest = "/rollTest"; + this.prefixZitat = "/zitat"; } @Override @@ -125,7 +125,6 @@ public class dice extends ListenerAdapter { int hits = 0; boolean glitches = false; - boolean critGlitches = false; boolean edge = false; @@ -145,6 +144,7 @@ public class dice extends ListenerAdapter { try { diceart = Integer.parseInt(diceInterpreter[1]); numberOfDice = Integer.parseInt(diceInterpreter[0]); + verteilung = new int[diceart]; } catch (NumberFormatException e) { event.getChannel().sendMessage(event.getMember().getAsMention() + " Irgent was dummes ist passiert beim Verstehen von " + MsgParts[1].trim().toLowerCase()).queue(); @@ -194,51 +194,38 @@ public class dice extends ListenerAdapter { hits++; } verteilung[dice1]++; - result.append(dice1+1); + if((dice1 >= 4) || (dice1 == 0)) + result.append("**" + (dice1+1) + "**"); + else + result.append(dice1+1); result.append(" "); } - if (verteilung[0] >= (numberOfDice+bonusEdegeDice)/2 && verteilung[0] > 0) { + if (verteilung[0] >= (numberOfDice+bonusEdegeDice)/2f) { glitches = true; } - if(hits == 0) { + if(hits == 0 && glitches == false) { // kein Erfolg, kein Patzer + outputBox.setColor(Color.gray); + } + else if(hits == 0 && glitches == true) { // kriischer Patzer outputBox.setColor(Color.red); - if(glitches == true) { - outputBox.setDescription("**Kritischer Patzer** :,("); - } - else { - outputBox.setDescription("**nicht geschafft**"); - } } - else if(glitches == true) { + else if(glitches == true) { // Patzer outputBox.setColor(Color.yellow); - outputBox.setDescription("**Patzer** :("); } - else { + else { // Efolg outputBox.setColor(Color.green); - if(hits == 1) { - outputBox.setDescription("**" + String.valueOf(hits) + " Erfolg**"); - } - else if(hits < 4) { - outputBox.setDescription("**" + String.valueOf(hits) + " Erfolge**"); - } - else if(hits < 6) { - outputBox.setDescription("**" + String.valueOf(hits) + " Erfolge**, das ist schon ordentlich"); - } - else if(hits < 10) { - outputBox.setDescription("**" + String.valueOf(hits) + " Erfolge**, WOW sowas mal nachmachen"); - } - else { - outputBox.setDescription("**" + String.valueOf(hits) + " Erfolge**, bist du Wahnsinnig?"); - } } - outputBox.setTitle(event.getMember().getEffectiveName() + " dein Wurf " + MsgParts[1] + " ergibt:"); + String zusatz = ""; + if(bonusEdegeDice > 0) { + zusatz = " + " + bonusEdegeDice + "d" + diceart; + } + outputBox.setTitle(event.getMember().getEffectiveName() + " " + numberOfDice + "d" + diceart + zusatz+ ":\tErfolge: " + String.valueOf(hits)+ "\tMisserfolge: " + String.valueOf(verteilung[0])); - outputBox.addField("Erfolge", String.valueOf(hits), true); - outputBox.addField("Misserfolge", String.valueOf(verteilung[0]), true); - outputBox.addField("Ergbenise", result.toString(), false); + + outputBox.setDescription("(" + result.toString().trim() + ")"); for(int i = 0; i < diceart; i++) { float pro = verteilung[i]*100f/numberOfDice; @@ -263,7 +250,7 @@ public class dice extends ListenerAdapter { quotes[0] = "*quiek quiek quiek*"; quotes[1] = "" + - "(\\\\_____/)\n" + + "(\\\\______/)\n" + "( ͡ ͡° ͜ ʖ ͡ ͡°) *snuff snuff*\n" + "\\\\╭☞ \\\\╭☞\n" + ""; From 8c7f497e0d6acd34e1930163608f96d794381830 Mon Sep 17 00:00:00 2001 From: Sebastian Zeidler Date: Sat, 23 Feb 2019 11:27:44 +0100 Subject: [PATCH 08/28] mehrsprachig zwichenstand --- src/main/java/Shadowrun/dice.java | 9 +++ src/main/java/Shadowrun/language.java | 85 +++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100755 src/main/java/Shadowrun/language.java diff --git a/src/main/java/Shadowrun/dice.java b/src/main/java/Shadowrun/dice.java index 756b31c..3aa0e18 100755 --- a/src/main/java/Shadowrun/dice.java +++ b/src/main/java/Shadowrun/dice.java @@ -11,6 +11,8 @@ 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.concurrent.ThreadLocalRandom; @@ -20,6 +22,10 @@ public class dice extends ListenerAdapter { private String prefixZitat; private String prefixTest; + private language langDe = new language("de"); + private language langEn = new language("en"); + + Map channelList = new HashMap(); public dice() { @@ -34,6 +40,9 @@ public class dice extends ListenerAdapter { return; } + if(!channelList.containsKey(event.getChannel().getId())) { + channelList.put(event.getChannel().getId(), "de"); + } User author = event.getAuthor(); if (!author.isBot()) { if (event.getMessage().getContentRaw().startsWith(this.prefixSr)) diff --git a/src/main/java/Shadowrun/language.java b/src/main/java/Shadowrun/language.java new file mode 100755 index 0000000..5d4d26c --- /dev/null +++ b/src/main/java/Shadowrun/language.java @@ -0,0 +1,85 @@ +package Shadowrun; + +import java.io.*; +import java.util.Properties; + + +public class language { + + public String language = "Deutsch"; + public String emptyCommand = " der %command% befehl benötigt einen Wert"; + public String error = " Irgend was dummes ist passiert beim Verstehen von %command%"; + public String error2 = " Irgend was dummes ist passiert beim Verstehen von %command%"; + public String noNegativ = " es darf kein Negativen Wurf geben"; + public String dice = "w"; + public String resultText = " %numberOfDice%%dice%%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%"; + + public language() { + this.readConfig(); + } + + /** + * + * @param lang Srache + */ + public language(String lang) { + this.readConfig(lang); + } + + public void readConfig() { + this.readConfig("de"); + } + public void readConfig(String lang) { + FileInputStream input = null; + OutputStream output = null; + Properties config = new Properties(); + try { + File f = new File("config.cfg"); + if (f.isFile() && f.canRead()) { + + input = new FileInputStream("shadowrun.lang"); + config.load(input); + if(config.containsKey(lang + ".language")) + this.language = config.getProperty(lang + ".language"); + + if(config.containsKey(lang + ".emptyCommand")) + this.emptyCommand = config.getProperty(lang + ".emptyCommand"); + if(config.containsKey(lang + ".error")) + this.error = config.getProperty(lang + ".error"); + if(config.containsKey(lang + ".error2")) + this.error2 = config.getProperty(lang + ".error2"); + if(config.containsKey(lang + ".noNegativ")) + this.noNegativ = config.getProperty(lang + ".noNegativ"); + if(config.containsKey(lang + ".dice")) + this.dice = config.getProperty(lang + ".dice"); + if(config.containsKey(lang + ".resultText")) + this.resultText = config.getProperty(lang + ".resultText"); + + } + else { + output = new FileOutputStream("config.cfg"); + config.setProperty(lang + ".language", this.language); + config.setProperty(lang + ".emptyCommand", this.emptyCommand); + config.setProperty(lang + ".error", this.error); + config.setProperty(lang + ".error2", this.error2); + config.setProperty(lang + ".noNegativ", this.noNegativ); + config.setProperty(lang + ".dice", this.dice); + config.setProperty(lang + ".resultText", this.resultText); + config.store(output, null); + + } + } catch (Exception e) { + + } + finally { + if (input != null) { + try { + input.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} + From 37103ec4d8a93a4862fce5e272721749dca287ac Mon Sep 17 00:00:00 2001 From: Ocame Date: Sun, 24 Feb 2019 23:44:35 +0100 Subject: [PATCH 09/28] =?UTF-8?q?=C3=BCbersetzung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- shadowrun.cfg | 16 +++++++ src/main/java/Serenity/balance.java | 10 +++++ src/main/java/Shadowrun/dice.java | 61 +++++++++++++++++++++++---- src/main/java/Shadowrun/language.java | 8 ++-- 5 files changed, 84 insertions(+), 13 deletions(-) create mode 100644 shadowrun.cfg diff --git a/build.gradle b/build.gradle index 71c1d44..62ad6d0 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } -version '0.2' +version '0.4' def jdaVersion = '3.8.3_460' diff --git a/shadowrun.cfg b/shadowrun.cfg new file mode 100644 index 0000000..f4ea671 --- /dev/null +++ b/shadowrun.cfg @@ -0,0 +1,16 @@ +#Sun Feb 24 19:48:19 CET 2019 +de.error=\ Irgend was dummes ist passiert beim Verstehen von %command% +de.resultText=\ %numberOfDice%w%diceart% %EdgeDice%\:\tErfolge\: %hits%\tMisserfolge\: %oneHits% +de.dice=w +de.error2=\ Irgendwas dummes ist passiert beim Verstehen von %command% +de.noNegativ=\ es darf kein Negativen Wurf geben +de.language= Ich schreibe nun Deutsch +de.emptyCommand=\ der %command% befehl ben\u00F6tigt einen Wert + +en.error=\ I don't understanding %command% +en.resultText=\ %numberOfDice%d%diceart% %EdgeDice%\:\tHit\: %hits%\tOnes\: %oneHits% +en.dice=d +en.error2=\ I don't understanding %command% +en.noNegativ=\ there must not be a negative throw +en.language= I write now English, maybe +en.emptyCommand=\ The %command% command need a Value diff --git a/src/main/java/Serenity/balance.java b/src/main/java/Serenity/balance.java index e050cee..ee2b194 100755 --- a/src/main/java/Serenity/balance.java +++ b/src/main/java/Serenity/balance.java @@ -18,12 +18,19 @@ public class balance extends ListenerAdapter { private String prefixPromote; private String prefixDegradation; private String prefixDetail; + private String prefixCow; + private String prefixCow2; public balance() { this.prefixPromote = "/konto"; this.prefixDegradation = "/pay "; this.prefixDetail = "/detail"; + + this.prefixCow = "/cow"; + this.prefixCow2 = "/Cattle"; + + } @Override @@ -31,6 +38,9 @@ public class balance extends ListenerAdapter { if (event.getMessage().getContentRaw().startsWith("!ende")) { // nur zum Debugen #todo muss wieder raus event.getJDA().shutdown(); } + if (event.getMessage().getContentRaw().startsWith(this.prefixCow) || event.getMessage().getContentRaw().startsWith(this.prefixCow2)) { // nur zum Debugen #todo muss wieder raus + event.getChannel().sendMessage("NO FUCKING COWS AND COW-LIKE ANIMALS ON THE SHIP!").queue(); + } if ((!event.getMessage().getContentRaw().startsWith(this.prefixPromote) && !event.getMessage().getContentRaw().startsWith(this.prefixDegradation) && !event.getMessage().getContentRaw().startsWith(this.prefixDetail)) || event.getChannelType() != ChannelType.TEXT) { diff --git a/src/main/java/Shadowrun/dice.java b/src/main/java/Shadowrun/dice.java index 3aa0e18..4d574f4 100755 --- a/src/main/java/Shadowrun/dice.java +++ b/src/main/java/Shadowrun/dice.java @@ -25,6 +25,9 @@ public class dice extends ListenerAdapter { private language langDe = new language("de"); private language langEn = new language("en"); + private language activLang; + + Map channelList = new HashMap(); @@ -42,6 +45,20 @@ public class dice extends ListenerAdapter { 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()) { @@ -124,6 +141,8 @@ public class dice extends ListenerAdapter { */ private void roll(MessageReceivedEvent event) { + + EmbedBuilder outputBox = new EmbedBuilder(); int[] verteilung = new int[6]; @@ -143,11 +162,26 @@ public class dice extends ListenerAdapter { } String[] MsgParts = event.getMessage().getContentRaw().split(" ", 2); if(MsgParts.length < 2) { - event.getChannel().sendMessage(event.getMember().getAsMention() + " der " + this.prefixSr + " befehl benötigt einen Wert").queue(); + 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 { @@ -156,12 +190,16 @@ public class dice extends ListenerAdapter { verteilung = new int[diceart]; } catch (NumberFormatException e) { - event.getChannel().sendMessage(event.getMember().getAsMention() + " Irgent was dummes ist passiert beim Verstehen von " + MsgParts[1].trim().toLowerCase()).queue(); + String message = activLang.error; + message = message.replace("%command%", MsgParts[1].trim().toLowerCase()); + event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); return; } } else { - event.getChannel().sendMessage(event.getMember().getAsMention() + " ich verstehe nicht was du von mir willst mit " + MsgParts[1].trim()).queue(); + String message = activLang.error; + message = message.replace("%command%", MsgParts[1].trim()); + event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); return; } } @@ -170,7 +208,9 @@ public class dice extends ListenerAdapter { numberOfDice = Integer.parseInt(MsgParts[1].trim().replace(" ", "")); } catch (NumberFormatException e) { - event.getChannel().sendMessage(event.getMember().getAsMention() + " Irgent was dummes ist passiert beim Verstehen von " + MsgParts[1].trim()).queue(); + String message = activLang.error; + message = message.replace("%command%", MsgParts[1].trim()); + event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); return; } } @@ -190,7 +230,8 @@ public class dice extends ListenerAdapter { if(numberOfDice <= 0) { - event.getChannel().sendMessage(event.getMember().getAsMention() + " es darf kein Negativen Wurf geben").queue(); + String message = activLang.noNegativ; + event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); return; } @@ -227,11 +268,15 @@ public class dice extends ListenerAdapter { outputBox.setColor(Color.green); } - String zusatz = ""; + String addition = ""; if(bonusEdegeDice > 0) { - zusatz = " + " + bonusEdegeDice + "d" + diceart; + addition = " + " + bonusEdegeDice + activLang.dice + diceart; } - outputBox.setTitle(event.getMember().getEffectiveName() + " " + numberOfDice + "d" + diceart + zusatz+ ":\tErfolge: " + String.valueOf(hits)+ "\tMisserfolge: " + String.valueOf(verteilung[0])); + + 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() + ")"); diff --git a/src/main/java/Shadowrun/language.java b/src/main/java/Shadowrun/language.java index 5d4d26c..dd1a584 100755 --- a/src/main/java/Shadowrun/language.java +++ b/src/main/java/Shadowrun/language.java @@ -12,7 +12,7 @@ public class language { public String error2 = " Irgend was dummes ist passiert beim Verstehen von %command%"; public String noNegativ = " es darf kein Negativen Wurf geben"; public String dice = "w"; - public String resultText = " %numberOfDice%%dice%%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%"; + public String resultText = " %numberOfDice%w%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%"; public language() { this.readConfig(); @@ -34,10 +34,10 @@ public class language { OutputStream output = null; Properties config = new Properties(); try { - File f = new File("config.cfg"); + File f = new File("shadowrun.cfg"); if (f.isFile() && f.canRead()) { - input = new FileInputStream("shadowrun.lang"); + input = new FileInputStream("shadowrun.cfg"); config.load(input); if(config.containsKey(lang + ".language")) this.language = config.getProperty(lang + ".language"); @@ -57,7 +57,7 @@ public class language { } else { - output = new FileOutputStream("config.cfg"); + output = new FileOutputStream("shadowrun.cfg"); config.setProperty(lang + ".language", this.language); config.setProperty(lang + ".emptyCommand", this.emptyCommand); config.setProperty(lang + ".error", this.error); From 1df3fb1f64d03e901456d1d64505eed0dbbf0974 Mon Sep 17 00:00:00 2001 From: Sebastian Zeidler Date: Tue, 5 Mar 2019 03:15:07 +0100 Subject: [PATCH 10/28] zwichenstand --- src/main/java/Shadowrun/dice.java | 171 +++++++++++++++++++++++++++++- src/main/java/core/Main.java | 4 +- 2 files changed, 170 insertions(+), 5 deletions(-) diff --git a/src/main/java/Shadowrun/dice.java b/src/main/java/Shadowrun/dice.java index 4d574f4..919d12c 100755 --- a/src/main/java/Shadowrun/dice.java +++ b/src/main/java/Shadowrun/dice.java @@ -5,6 +5,7 @@ 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; @@ -14,11 +15,13 @@ 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; @@ -33,13 +36,18 @@ public class dice extends ListenerAdapter { public dice() { this.prefixSr = "/sr"; + this.prefixIni = "/ini"; this.prefixTest = "/rollTest"; this.prefixZitat = "/zitat"; } @Override public void onMessageReceived(MessageReceivedEvent event) { - if ((!event.getMessage().getContentRaw().startsWith(this.prefixSr) && !event.getMessage().getContentRaw().startsWith(this.prefixZitat) && !event.getMessage().getContentRaw().startsWith(this.prefixTest)) || event.getChannelType() != ChannelType.TEXT) { + 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; } @@ -64,9 +72,11 @@ public class dice extends ListenerAdapter { if (!author.isBot()) { if (event.getMessage().getContentRaw().startsWith(this.prefixSr)) this.roll(event); - if (event.getMessage().getContentRaw().startsWith(this.prefixTest)) + else if (event.getMessage().getContentRaw().startsWith(this.prefixIni)) + this.ini(event); + else if (event.getMessage().getContentRaw().startsWith(this.prefixTest)) this.rollTest(event); - if (event.getMessage().getContentRaw().startsWith(this.prefixZitat)) + else if (event.getMessage().getContentRaw().startsWith(this.prefixZitat)) this.zitat(event); } } @@ -298,6 +308,138 @@ public class dice extends ListenerAdapter { } + } + private void ini(MessageReceivedEvent event) { + + EmbedBuilder outputBox = new EmbedBuilder(); + + int[] verteilung = new int[6]; + int dice1; + int numberOfDice = 1; + int diceart = 6; + StringBuilder result = new StringBuilder(""); + + try { + String[] MsgParts = event.getMessage().getContentRaw().split(" ", 2); + if(MsgParts.length < 2) { + 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); + if(iniParts.length == 1) { + + } + else { + + } + + if(true) { + this.inputInterpreter(event, iniParts[0]); + 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(MsgParts[1].trim().toLowerCase().replace(" ", "").matches("^([0-9]*\\+)?[0-9]*([dw][0-9]*)?(\\+[0-9]*)?")) { // format besteh aus (Zahlen)+(Zahlen)d(Zahlen) oder (Zahlen)d(Zahlen)+(Zahlen) + String[] diceInterpreter = MsgParts[1].trim().toLowerCase().replace(" ", "").split("\\+"); + try { + diceart = Integer.parseInt(diceInterpreter[1]); + numberOdDice = Integer.parseInt(diceInterpreter[0]); + } + catch (NumberFormatException e) { + event.getChannel().sendMessage(event.getMember().getAsMention() + " Irgent was dummes ist passiert beim Verstehen von " + MsgParts[1].trim().toLowerCase()).queue(); + return; + } + }*/ + + + + if(numberOfDice <= 0) { + String message = activLang.noNegativ; + event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); + return; + } + + + for(int i = 0; i < numberOfDice; i++) { + dice1 = new Random().nextInt(diceart); + + verteilung[dice1]++; + result.append(dice1+1).append(" "); + } + outputBox.setColor(new Color(104, 34, 139)); + + + String addition = ""; + + 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); + outputBox.setTitle(event.getMember().getEffectiveName() + " " + message); + + + outputBox.setDescription("(" + result.toString().trim() + ")"); + + event.getChannel().sendMessage(outputBox.build()).queue(); + + } + catch (NumberFormatException e) { + event.getChannel().sendMessage("Nope").queue(); + } + catch (Exception e) { + System.out.println("problem: " + e.getMessage()); + } finally { + + } + } private void zitat(MessageReceivedEvent event) { String[] quotes = new String[7]; @@ -318,5 +460,28 @@ public class dice extends ListenerAdapter { event.getChannel().sendMessage(quotes[dice%6]).queue(); } + private void inputInterpreter(MessageReceivedEvent event, String Input) { + Scanner sc = new Scanner(Input.trim()); + Integer diceart = 6; + Integer numberOfDice = 1; + if(sc.hasNextInt()) { // ist eine Zahl + + } + else { + + if (Input.trim().toLowerCase().replace(" ", "").matches("([0-9]*)[dw]([0-9].*)")) { // format besteh aus (Zahlen)d(Zahlen) oder (Zahlen)w(Zahlen) + String[] diceInterpreter = Input.trim().toLowerCase().replace(" ", "").split("[wd]"); + try { + diceart = Integer.parseInt(diceInterpreter[1]); + numberOfDice = Integer.parseInt(diceInterpreter[0]); + } catch (NumberFormatException e) { + String message = activLang.error; + message = message.replace("%command%", Input.trim().toLowerCase()); + event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); + return; + } + } + } + } } diff --git a/src/main/java/core/Main.java b/src/main/java/core/Main.java index 2366794..bf8717d 100755 --- a/src/main/java/core/Main.java +++ b/src/main/java/core/Main.java @@ -17,9 +17,9 @@ public class Main { public static void main(String[] args) { // Insert your bot's token here - String token = "NTQ2ODk5MzYwMDEzODc3MjU4.D0u8wA.VfA2vJzundVhCl1-ibDiBaKuA8w"; + //String token = "NTQ2ODk5MzYwMDEzODc3MjU4.D0u8wA.VfA2vJzundVhCl1-ibDiBaKuA8w"; // iro - //String token = "NTQ2NzEwODUwOTIxMjk5OTc5.D0sL6A.1fUd5iBr3eo2tbPXofEqyumDm6w"; + String token = "NTQ2NzEwODUwOTIxMjk5OTc5.D0sL6A.1fUd5iBr3eo2tbPXofEqyumDm6w"; JDABuilder builder = new JDABuilder(AccountType.BOT); From 0552f1b17cafbfca865b56b5ba124db81678eca1 Mon Sep 17 00:00:00 2001 From: Ocame Date: Tue, 5 Mar 2019 04:14:39 +0100 Subject: [PATCH 11/28] =?UTF-8?q?Ini-Funktion=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Shadowrun/dice.java | 142 ++++++------------ .../java/Shadowrun/messageInterpreter.java | 90 +++++++++++ 2 files changed, 134 insertions(+), 98 deletions(-) create mode 100644 src/main/java/Shadowrun/messageInterpreter.java diff --git a/src/main/java/Shadowrun/dice.java b/src/main/java/Shadowrun/dice.java index 919d12c..8e03023 100755 --- a/src/main/java/Shadowrun/dice.java +++ b/src/main/java/Shadowrun/dice.java @@ -31,7 +31,7 @@ public class dice extends ListenerAdapter { private language activLang; - Map channelList = new HashMap(); + private Map channelList = new HashMap<>(); public dice() { @@ -139,8 +139,6 @@ public class dice extends ListenerAdapter { } catch (Exception e) { System.out.println("problem: " + e.getMessage()); - } finally { - } } @@ -151,8 +149,6 @@ public class dice extends ListenerAdapter { */ private void roll(MessageReceivedEvent event) { - - EmbedBuilder outputBox = new EmbedBuilder(); int[] verteilung = new int[6]; @@ -224,19 +220,6 @@ public class dice extends ListenerAdapter { return; } } -/* - if(MsgParts[1].trim().toLowerCase().replace(" ", "").matches("^([0-9]*\\+)?[0-9]*([dw][0-9]*)?(\\+[0-9]*)?")) { // format besteh aus (Zahlen)+(Zahlen)d(Zahlen) oder (Zahlen)d(Zahlen)+(Zahlen) - String[] diceInterpreter = MsgParts[1].trim().toLowerCase().replace(" ", "").split("\\+"); - try { - diceart = Integer.parseInt(diceInterpreter[1]); - numberOdDice = Integer.parseInt(diceInterpreter[0]); - } - catch (NumberFormatException e) { - event.getChannel().sendMessage(event.getMember().getAsMention() + " Irgent was dummes ist passiert beim Verstehen von " + MsgParts[1].trim().toLowerCase()).queue(); - return; - } - }*/ - if(numberOfDice <= 0) { @@ -255,7 +238,7 @@ public class dice extends ListenerAdapter { } verteilung[dice1]++; if((dice1 >= 4) || (dice1 == 0)) - result.append("**" + (dice1+1) + "**"); + result.append("**").append(dice1+1).append("**"); else result.append(dice1+1); result.append(" "); @@ -265,16 +248,16 @@ public class dice extends ListenerAdapter { } - if(hits == 0 && glitches == false) { // kein Erfolg, kein Patzer + if(hits == 0 && !glitches) { // kein Erfolg, kein Patzer outputBox.setColor(Color.gray); } - else if(hits == 0 && glitches == true) { // kriischer Patzer + else if(hits == 0 && glitches) { // kritischer Patzer outputBox.setColor(Color.red); } - else if(glitches == true) { // Patzer + else if(glitches) { // Patzer outputBox.setColor(Color.yellow); } - else { // Efolg + else { // Erfolg outputBox.setColor(Color.green); } @@ -304,8 +287,6 @@ public class dice extends ListenerAdapter { } catch (Exception e) { System.out.println("problem: " + e.getMessage()); - } finally { - } } @@ -313,15 +294,16 @@ public class dice extends ListenerAdapter { EmbedBuilder outputBox = new EmbedBuilder(); - int[] verteilung = new int[6]; 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) { + if(MsgParts.length < 2) { // Leerer Befehl String message = activLang.emptyCommand; message = message.replace("%command%", this.prefixIni); event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); @@ -344,37 +326,38 @@ public class dice extends ListenerAdapter { String[] iniParts = MsgParts[1].trim().toLowerCase().split("\\+", 2); - if(iniParts.length == 1) { + 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(); + } } - if(true) { - this.inputInterpreter(event, iniParts[0]); - 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 { @@ -387,20 +370,6 @@ public class dice extends ListenerAdapter { return; } } -/* - if(MsgParts[1].trim().toLowerCase().replace(" ", "").matches("^([0-9]*\\+)?[0-9]*([dw][0-9]*)?(\\+[0-9]*)?")) { // format besteh aus (Zahlen)+(Zahlen)d(Zahlen) oder (Zahlen)d(Zahlen)+(Zahlen) - String[] diceInterpreter = MsgParts[1].trim().toLowerCase().replace(" ", "").split("\\+"); - try { - diceart = Integer.parseInt(diceInterpreter[1]); - numberOdDice = Integer.parseInt(diceInterpreter[0]); - } - catch (NumberFormatException e) { - event.getChannel().sendMessage(event.getMember().getAsMention() + " Irgent was dummes ist passiert beim Verstehen von " + MsgParts[1].trim().toLowerCase()).queue(); - return; - } - }*/ - - if(numberOfDice <= 0) { String message = activLang.noNegativ; @@ -409,24 +378,23 @@ public class dice extends ListenerAdapter { } + ini += iniBase; for(int i = 0; i < numberOfDice; i++) { dice1 = new Random().nextInt(diceart); - - verteilung[dice1]++; result.append(dice1+1).append(" "); + ini += (dice1+1); } outputBox.setColor(new Color(104, 34, 139)); - String addition = ""; - - String message = activLang.resultText; + 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("%EdgeDice%", addition); + 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("(" + result.toString().trim() + ")"); + outputBox.setDescription(String.valueOf(iniBase) + " + (" + result.toString().trim().replace(" ", "+") + ")"); event.getChannel().sendMessage(outputBox.build()).queue(); @@ -434,10 +402,11 @@ public class dice extends ListenerAdapter { 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()); - } finally { - } } @@ -460,28 +429,5 @@ public class dice extends ListenerAdapter { event.getChannel().sendMessage(quotes[dice%6]).queue(); } - private void inputInterpreter(MessageReceivedEvent event, String Input) { - Scanner sc = new Scanner(Input.trim()); - Integer diceart = 6; - Integer numberOfDice = 1; - if(sc.hasNextInt()) { // ist eine Zahl - - } - else { - - if (Input.trim().toLowerCase().replace(" ", "").matches("([0-9]*)[dw]([0-9].*)")) { // format besteh aus (Zahlen)d(Zahlen) oder (Zahlen)w(Zahlen) - String[] diceInterpreter = Input.trim().toLowerCase().replace(" ", "").split("[wd]"); - try { - diceart = Integer.parseInt(diceInterpreter[1]); - numberOfDice = Integer.parseInt(diceInterpreter[0]); - } catch (NumberFormatException e) { - String message = activLang.error; - message = message.replace("%command%", Input.trim().toLowerCase()); - event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); - return; - } - } - } - } } diff --git a/src/main/java/Shadowrun/messageInterpreter.java b/src/main/java/Shadowrun/messageInterpreter.java new file mode 100644 index 0000000..1b481c0 --- /dev/null +++ b/src/main/java/Shadowrun/messageInterpreter.java @@ -0,0 +1,90 @@ +package Shadowrun; + +import net.dv8tion.jda.core.events.message.MessageReceivedEvent; + +import java.util.Scanner; + +public class messageInterpreter { + + private Integer diceart = 6; + private Integer numberOfDice = 1; + private Integer typ = 0; + private Integer intResult = 0; + + private language activLang; + private MessageReceivedEvent event; + + + public Integer getDiceart() { + return diceart; + } + + public Integer getNumberOfDice() { + return numberOfDice; + } + + public Integer getIntResult() { + return intResult; + } + + public boolean isNum() { + if(typ == 1) { + return true; + } + return false; + } + + public boolean isDice() { + if(typ == 2) { + return true; + } + return false; + } + /** + * + * @param event JDA Event + * @param activLang Aktive Sprache + */ + public messageInterpreter(MessageReceivedEvent event, language activLang) { + this.event = event; + this.activLang = activLang; + } + private void reset() { + diceart = 6; + numberOfDice = 1; + typ = 0; + intResult = 0; + } + public void inputInterpreter(String Input) { + reset(); + Scanner sc = new Scanner(Input.trim()); + + if(sc.hasNextInt()) { // ist eine Zahl + typ = 1; + intResult = Integer.parseInt(Input.trim()); + return; + } + else { + if (Input.trim().toLowerCase().replace(" ", "").matches("([0-9]*)[dw]([0-9].*)")) { // format besteh aus (Zahlen)d(Zahlen) oder (Zahlen)w(Zahlen) + String[] diceInterpreter = Input.trim().toLowerCase().replace(" ", "").split("[wd]"); + try { + diceart = Integer.parseInt(diceInterpreter[1]); + numberOfDice = Integer.parseInt(diceInterpreter[0]); + typ = 2; + } catch (NumberFormatException e) { + String message = activLang.error; + message = message.replace("%command%", Input.trim().toLowerCase()); + //event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); + typ = -1; + throw new IllegalArgumentException( message ); + } + } + else { + String message = activLang.error; + message = message.replace("%command%", Input.trim().toLowerCase()); + typ = -1; + throw new IllegalArgumentException( message ); + } + } + } +} From becd8f772a3009e7af766de04bd963b993c60533 Mon Sep 17 00:00:00 2001 From: Sebastian Zeidler Date: Tue, 25 Jun 2019 17:51:22 +0200 Subject: [PATCH 12/28] Edge erkennung um prefix + erweitert --- src/main/java/Shadowrun/dice.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/Shadowrun/dice.java b/src/main/java/Shadowrun/dice.java index 8e03023..9b535cd 100755 --- a/src/main/java/Shadowrun/dice.java +++ b/src/main/java/Shadowrun/dice.java @@ -30,7 +30,6 @@ public class dice extends ListenerAdapter { private language activLang; - private Map channelList = new HashMap<>(); @@ -163,10 +162,20 @@ public class dice extends ListenerAdapter { boolean edge = false; try { - if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"+")) { + // Prüfen ob Edge wurf + if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"+") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" +")) { edge = true; } - String[] MsgParts = event.getMessage().getContentRaw().split(" ", 2); + + // 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); From 13b48fa4530ddd6e45150b33e0ef254756a17810 Mon Sep 17 00:00:00 2001 From: Sebastian Zeidler Date: Tue, 25 Jun 2019 18:59:29 +0200 Subject: [PATCH 13/28] Grundlage DB und Socketverbindung --- src/main/java/DB/base.java | 96 +++++++++++++++ src/main/java/Shadowrun/db_connect.java | 69 +++++++++++ src/main/java/Shadowrun/dice.java | 6 +- src/main/java/Socket/shadowrun.java | 157 ++++++++++++++++++++++++ src/main/java/core/Main.java | 5 +- 5 files changed, 330 insertions(+), 3 deletions(-) create mode 100755 src/main/java/DB/base.java create mode 100755 src/main/java/Shadowrun/db_connect.java create mode 100755 src/main/java/Socket/shadowrun.java diff --git a/src/main/java/DB/base.java b/src/main/java/DB/base.java new file mode 100755 index 0000000..2adb98a --- /dev/null +++ b/src/main/java/DB/base.java @@ -0,0 +1,96 @@ +package DB; + +import net.dv8tion.jda.core.JDA; + +import javax.security.auth.login.LoginException; +import java.io.FileInputStream; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Properties; + +public class base { + + + private Connection conn; + private String typ; + private String host; + private String port; + private String database; + private String name; + private String pw; + + + + + private boolean active; + + protected base() { + FileInputStream input = null; + Properties config = new Properties(); + active = true; + + try { + input = new FileInputStream("shadowrun.cfg"); + config.load(input); + if(!config.containsKey("db.typ")) { + active = false; + } + + typ = config.getProperty("db.typ"); + host = config.getProperty("db.host"); + port = config.getProperty("db.port"); + database = config.getProperty("db.database"); + name = config.getProperty("db.name"); + pw = config.getProperty("db.pw"); + + open(); + close(); + //rs.fetchSize; + } + catch (Exception e) { + active = false; + } + } + + protected void open() { + if(!active) + return; + try { + + conn = DriverManager.getConnection("jdbc:" + typ + "://" + host + ":" + port + "?useUnicode=true&characterEncoding=utf-8", name, pw); + ResultSet rs = conn.prepareStatement("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '" + database + "'").executeQuery(); + rs.last(); + if(rs.getRow() == 1) { + conn.prepareStatement("use "+ database).executeQuery(); + } + } + catch (SQLException e) { + active = false; + e.printStackTrace(); + } + } + + protected void close() { + if(!active) + return; + try { + if (!conn.isClosed()) + conn.close(); + } + catch (SQLException e) { + active = false; + e.printStackTrace(); + } + } + + protected boolean isActive() { + return active; + } + + protected Connection getConn() { + return conn; + } +} + diff --git a/src/main/java/Shadowrun/db_connect.java b/src/main/java/Shadowrun/db_connect.java new file mode 100755 index 0000000..6df12fd --- /dev/null +++ b/src/main/java/Shadowrun/db_connect.java @@ -0,0 +1,69 @@ +package Shadowrun; + +import java.sql.*; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class db_connect extends DB.base { + + Connection conn; + public db_connect() { + if(!isActive()) + return; + open(); + try { + conn = getConn(); + ResultSet rs = conn.prepareStatement("show tables like \"shadowrun_log\"").executeQuery(); + while (rs.next()) { + String s = rs.getString(1); + System.out.println(s); + } + } + catch (SQLException e) { + e.printStackTrace(); + } + close(); + } + + public void insertDice(String userName, String userId, String command, String result, String kanal) { + if(!isActive()) + return; + + open(); + try { + conn = getConn(); + String SQL_INSERT = "INSERT INTO shadowrun_log (benutzer, benutzerId, wurf, ergebnis, kanal) VALUES (?,?,?,?,?)"; + + PreparedStatement preparedStatement = conn.prepareStatement(SQL_INSERT); + preparedStatement.setString(1, userName); + preparedStatement.setString(2, userId); + preparedStatement.setString(3, command); + preparedStatement.setString(4, result); + preparedStatement.setString(5, kanal); + preparedStatement.executeUpdate(); + + } + catch (SQLException e) { + e.printStackTrace(); + } + close(); + } + + +} + +/* + CREATE TABLE `shadowrun_log` ( + `id` INT NOT NULL AUTO_INCREMENT, + `zeitstempel` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + `wurf` VARCHAR(255) NOT NULL DEFAULT '0', + `ergebnis` VARCHAR(255) NOT NULL DEFAULT '0', + `benutzer` VARCHAR(255) NOT NULL DEFAULT '0', + `benutzerId` VARCHAR(255) NOT NULL DEFAULT '0', + `kanal` VARCHAR(50) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) + ) + COLLATE='utf8_general_ci' + ; + */ \ No newline at end of file diff --git a/src/main/java/Shadowrun/dice.java b/src/main/java/Shadowrun/dice.java index 9b535cd..8df738d 100755 --- a/src/main/java/Shadowrun/dice.java +++ b/src/main/java/Shadowrun/dice.java @@ -30,6 +30,9 @@ public class dice extends ListenerAdapter { private language activLang; + private db_connect db; + + private Map channelList = new HashMap<>(); @@ -38,6 +41,7 @@ public class dice extends ListenerAdapter { this.prefixIni = "/ini"; this.prefixTest = "/rollTest"; this.prefixZitat = "/zitat"; + this.db = new db_connect(); } @Override @@ -289,7 +293,7 @@ public class dice extends ListenerAdapter { } 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(); diff --git a/src/main/java/Socket/shadowrun.java b/src/main/java/Socket/shadowrun.java new file mode 100755 index 0000000..402ba7e --- /dev/null +++ b/src/main/java/Socket/shadowrun.java @@ -0,0 +1,157 @@ +package Socket; + +import net.dv8tion.jda.core.EmbedBuilder; +import net.dv8tion.jda.core.JDA; + +import java.awt.*; +import java.io.*; +import java.net.ServerSocket; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Scanner; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.net.Socket; + + +public class shadowrun implements Runnable{ + + private JDA jda; + + public shadowrun(JDA jda) { + this.jda = jda; + } + + @Override + public void run() { + int port = 11112; + try (ServerSocket listener = new ServerSocket(port)) { + System.out.println("Socket Server laeuft..."); + ExecutorService pool = Executors.newFixedThreadPool(20); + while (true) { + pool.execute(new iniEcho(listener.accept(), jda)); + } + } + catch (IOException e) { + System.err.println("Unable to process client request"); + e.printStackTrace(); + } + + } + + + private static class iniEcho implements Runnable { + private Socket socket; + private JDA jda; + + private boolean checkin; + private Scanner in; + private PrintWriter out; + + private String salt; + + iniEcho(Socket socket, JDA jda) { + this.socket = socket; + this.jda = jda; + this.checkin = false; + this.salt = "SamIstDerKoenigDerMatrix"; + } + + @Override + public void run() { + System.out.println("Connected: " + socket); + try { + in = new Scanner(socket.getInputStream()); + out = new PrintWriter(socket.getOutputStream(), true); + String message = ""; + while (in.hasNextLine()) { + if(this.checkin == false) { + chekin(); + continue; + } + message = in.nextLine().trim(); + switch (message) { + case "get": + break; + case "send": + send(); + break; + } + + //out.println(message.toUpperCase() + "..."); + //jda.getGuildById("404979829537243148").getTextChannelById("542202034330271759").sendMessage(message).queue(); + //jda.getTextChannelById("542202034330271759").sendMessage(message).queue(); + //jda.sen + } + } catch (Exception e) { + System.out.println("Error:" + socket); + } finally { + try { socket.close(); } catch (IOException e) { e.printStackTrace(); } + System.out.println("Closed: " + socket); + } + } + + /** + * bearbeitet Checkin + */ + private void chekin() { + System.out.println("checkin"); + String message = ""; + message = in.nextLine().trim(); + System.out.println(message); + if(message.startsWith("SRCheckin")) { + String[] msgParts = message.split("\\|", 3); + String Hash = getHash(msgParts[1] + salt); + System.out.println(msgParts[2].trim() + " -- " + Hash); + if(msgParts[2].trim().equals(Hash)) { + checkin = true; + out.println("ACK"); + + } + } + } + + /** + * Wandelt String in SHA-1 Hash um + * @param Input + * @return + */ + private String getHash(String Input) { + try { + MessageDigest md = MessageDigest.getInstance("SHA-1"); + md.update(salt.getBytes()); + byte[] bytes = md.digest(Input.getBytes()); + StringBuilder sb = new StringBuilder(); + for(int i=0; i< bytes.length ;i++) { + sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1)); + } + return sb.toString(); + } + catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return ""; + } + + private void send() { + out.println("ACKSend"); + String message; + EmbedBuilder outputBox = new EmbedBuilder(); + outputBox.setColor(Color.BLACK); + outputBox.setTitle("Initiative:"); + + while (in.hasNextLine()) { + message = in.nextLine().trim(); + if(message.trim().equals("FIN")) { + break; + } + String[] msgParts = message.split("\\|",3); + //jda.getUserById(msgParts[0]).getName(); + + outputBox.addField( msgParts[0], msgParts[1], false); + out.println("ACKSend"); + } + jda.getTextChannelById("542202034330271759").sendMessage(outputBox.build()).queue(); + } + } +} diff --git a/src/main/java/core/Main.java b/src/main/java/core/Main.java index bf8717d..6e94e8a 100755 --- a/src/main/java/core/Main.java +++ b/src/main/java/core/Main.java @@ -32,12 +32,13 @@ public class Main { try { JDA jda = builder.build(); + Thread thread = new Thread(new Socket.shadowrun(jda)); + thread.start(); + } catch (LoginException e) { e.printStackTrace(); } - - } } \ No newline at end of file From eb9d6d609c30027bd6f12a4011b4143d871967dc Mon Sep 17 00:00:00 2001 From: Ocame Date: Tue, 25 Jun 2019 20:15:08 +0200 Subject: [PATCH 14/28] Ini-Funktion in /sr intigiert + DM support --- build.gradle | 2 +- src/main/java/Shadowrun/dice.java | 54 +++++++++++++++++++------------ 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/build.gradle b/build.gradle index 62ad6d0..7804f85 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } -version '0.4' +version '0.5' def jdaVersion = '3.8.3_460' diff --git a/src/main/java/Shadowrun/dice.java b/src/main/java/Shadowrun/dice.java index 8e03023..51d026d 100755 --- a/src/main/java/Shadowrun/dice.java +++ b/src/main/java/Shadowrun/dice.java @@ -5,9 +5,7 @@ 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.*; @@ -15,7 +13,6 @@ 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 { @@ -47,7 +44,7 @@ public class dice extends ListenerAdapter { && !event.getMessage().getContentRaw().startsWith(this.prefixIni) && !event.getMessage().getContentRaw().startsWith(this.prefixZitat) && !event.getMessage().getContentRaw().startsWith(this.prefixTest)) - || event.getChannelType() != ChannelType.TEXT) { + || (event.getChannelType() != ChannelType.TEXT && event.getChannelType() != ChannelType.PRIVATE)) { return; } @@ -91,7 +88,7 @@ public class dice extends ListenerAdapter { EmbedBuilder test = new EmbedBuilder(); test.setTitle("Das ist ein Test"); test.setColor(Color.red); - test.setDescription("Text " + event.getMember().getAsMention()); + test.setDescription("Text " + getAsMention(event)); @@ -170,7 +167,12 @@ public class dice extends ListenerAdapter { if(MsgParts.length < 2) { String message = activLang.emptyCommand; message = message.replace("%command%", this.prefixSr); - event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); + event.getChannel().sendMessage(getAsMention(event) + message).queue(); + return; + } + + if(MsgParts[1].contains("+")) { + this.ini(event); return; } @@ -178,13 +180,13 @@ public class dice extends ListenerAdapter { if(MsgParts[1].trim().toLowerCase().equals("de")) { activLang = langDe; channelList.put(event.getChannel().getId(), "de"); - event.getChannel().sendMessage(event.getMember().getAsMention() + activLang.language).queue(); + event.getChannel().sendMessage(getAsMention(event) + 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(); + event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); return; } @@ -198,14 +200,14 @@ public class dice extends ListenerAdapter { catch (NumberFormatException e) { String message = activLang.error; message = message.replace("%command%", MsgParts[1].trim().toLowerCase()); - event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); + event.getChannel().sendMessage(getAsMention(event) + message).queue(); return; } } else { String message = activLang.error; message = message.replace("%command%", MsgParts[1].trim()); - event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); + event.getChannel().sendMessage(getAsMention(event) + message).queue(); return; } } @@ -216,7 +218,7 @@ public class dice extends ListenerAdapter { catch (NumberFormatException e) { String message = activLang.error; message = message.replace("%command%", MsgParts[1].trim()); - event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); + event.getChannel().sendMessage(getAsMention(event) + message).queue(); return; } } @@ -224,7 +226,7 @@ public class dice extends ListenerAdapter { if(numberOfDice <= 0) { String message = activLang.noNegativ; - event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); + event.getChannel().sendMessage(getAsMention(event) + message).queue(); return; } @@ -269,7 +271,7 @@ public class dice extends ListenerAdapter { 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.setTitle(getEffectiveName(event) + message); outputBox.setDescription("(" + result.toString().trim() + ")"); @@ -306,7 +308,7 @@ public class dice extends ListenerAdapter { if(MsgParts.length < 2) { // Leerer Befehl String message = activLang.emptyCommand; message = message.replace("%command%", this.prefixIni); - event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); + event.getChannel().sendMessage(getAsMention(event) + message).queue(); return; } @@ -314,13 +316,13 @@ public class dice extends ListenerAdapter { if(MsgParts[1].trim().toLowerCase().equals("de")) { activLang = langDe; channelList.put(event.getChannel().getId(), "de"); - event.getChannel().sendMessage(event.getMember().getAsMention() + activLang.language).queue(); + event.getChannel().sendMessage(getAsMention(event) + 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(); + event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); return; } @@ -366,14 +368,14 @@ public class dice extends ListenerAdapter { catch (NumberFormatException e) { String message = activLang.error; message = message.replace("%command%", MsgParts[1].trim()); - event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); + event.getChannel().sendMessage(getAsMention(event) + message).queue(); return; } } if(numberOfDice <= 0) { String message = activLang.noNegativ; - event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); + event.getChannel().sendMessage(getAsMention(event) + message).queue(); return; } @@ -391,7 +393,7 @@ public class dice extends ListenerAdapter { //%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.setTitle(getEffectiveName(event) + message); outputBox.setDescription(String.valueOf(iniBase) + " + (" + result.toString().trim().replace(" ", "+") + ")"); @@ -429,5 +431,17 @@ public class dice extends ListenerAdapter { event.getChannel().sendMessage(quotes[dice%6]).queue(); } + private String getEffectiveName(MessageReceivedEvent event) { + if(event.getMember() == null) { + return ""; + } + return event.getMember().getEffectiveName() + " "; + } + private String getAsMention(MessageReceivedEvent event) { + if(event.getMember() == null) { + return ""; + } + return event.getMember().getAsMention() + " "; + } } From 2b72562170e344e7f1e635d86a97475b02c0d729 Mon Sep 17 00:00:00 2001 From: Ocame Date: Wed, 26 Jun 2019 05:18:59 +0200 Subject: [PATCH 15/28] Aufteilung der DB Speicheurng --- src/main/java/Shadowrun/dice.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/Shadowrun/dice.java b/src/main/java/Shadowrun/dice.java index 4d3cc59..797bd5f 100755 --- a/src/main/java/Shadowrun/dice.java +++ b/src/main/java/Shadowrun/dice.java @@ -295,7 +295,12 @@ public class dice extends ListenerAdapter { } event.getChannel().sendMessage(outputBox.build()).queue(); - db.insertDice(event.getMember().getEffectiveName(), event.getMember().getUser().getId(),event.getMessage().getContentRaw(),result.toString().trim(), event.getChannel().getId()); + 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()); + } } catch (NumberFormatException e) { event.getChannel().sendMessage("Nope").queue(); From 2f91ce6e4f990af6815328e779e3e05a3f02b97e Mon Sep 17 00:00:00 2001 From: Sebastian Zeidler Date: Fri, 9 Aug 2019 17:13:55 +0200 Subject: [PATCH 16/28] anpasssung DB Verbindung und Ini ausgabe --- build.gradle | 1 + shadowrun.cfg | 8 +++++ src/main/java/DB/base.java | 2 +- src/main/java/Shadowrun/db_connect.java | 46 +++++++++++++++++++++++++ src/main/java/Shadowrun/dice.java | 10 +++++- src/main/java/Socket/shadowrun.java | 22 +++++++++--- src/main/java/core/Controller.java | 4 +++ src/main/java/core/sample.fxml | 8 +++++ 8 files changed, 95 insertions(+), 6 deletions(-) mode change 100644 => 100755 build.gradle mode change 100644 => 100755 shadowrun.cfg create mode 100755 src/main/java/core/Controller.java create mode 100755 src/main/java/core/sample.fxml diff --git a/build.gradle b/build.gradle old mode 100644 new mode 100755 index 7804f85..4b4e38b --- a/build.gradle +++ b/build.gradle @@ -25,6 +25,7 @@ repositories { dependencies { compile "net.dv8tion:JDA:$jdaVersion" compile "org.slf4j:slf4j-simple:1.6.1" + compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.6' } repositories { diff --git a/shadowrun.cfg b/shadowrun.cfg old mode 100644 new mode 100755 index f4ea671..0265936 --- a/shadowrun.cfg +++ b/shadowrun.cfg @@ -14,3 +14,11 @@ en.error2=\ I don't understanding %command% en.noNegativ=\ there must not be a negative throw en.language= I write now English, maybe en.emptyCommand=\ The %command% command need a Value + +db.on=true +db.typ=mysql +db.host=localhost +db.port=3306 +db.database=shadowrun_log +db.name=root +db.pw=root \ No newline at end of file diff --git a/src/main/java/DB/base.java b/src/main/java/DB/base.java index 2adb98a..da02563 100755 --- a/src/main/java/DB/base.java +++ b/src/main/java/DB/base.java @@ -34,7 +34,7 @@ public class base { try { input = new FileInputStream("shadowrun.cfg"); config.load(input); - if(!config.containsKey("db.typ")) { + if(!config.containsKey("db.typ") || (config.containsKey("db.on") && !config.getProperty("db.on").equals("true"))) { active = false; } diff --git a/src/main/java/Shadowrun/db_connect.java b/src/main/java/Shadowrun/db_connect.java index 6df12fd..5add1e4 100755 --- a/src/main/java/Shadowrun/db_connect.java +++ b/src/main/java/Shadowrun/db_connect.java @@ -4,6 +4,8 @@ import java.sql.*; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; public class db_connect extends DB.base { @@ -50,7 +52,41 @@ public class db_connect extends DB.base { close(); } + /** + * + * @param channelId + * @return + */ + public Map getChannelSettings(String channelId) { + Map result = new HashMap<>(); + result.put("lang", "de"); + if(!isActive()) { + result.put("sqlActive", "0"); + return result; + } + + open(); + try { + conn = getConn(); + String SQL_SELECT = "SELECT * FROM shadowrun_channelSettings where channelId = ?"; + + PreparedStatement preparedStatement = conn.prepareStatement(SQL_SELECT); + preparedStatement.setString(1, channelId); + ResultSet rs = preparedStatement.executeQuery(); + + while (rs.next()) { + result.remove("lang"); + result.put("lang", rs.getString("lang")); + } + + } + catch (SQLException e) { + e.printStackTrace(); + } + close(); + return result; + } } /* @@ -65,5 +101,15 @@ public class db_connect extends DB.base { PRIMARY KEY (`id`) ) COLLATE='utf8_general_ci' + ; + + CREATE TABLE `shadowrun_log` ( + `id` INT NOT NULL AUTO_INCREMENT, + `zeitstempel` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + `channelId` VARCHAR(50) NOT NULL DEFAULT '0', + `lang` VARCHAR(255) NOT NULL DEFAULT 'de' + PRIMARY KEY (`id`) + ) + COLLATE='utf8_general_ci' ; */ \ No newline at end of file diff --git a/src/main/java/Shadowrun/dice.java b/src/main/java/Shadowrun/dice.java index 797bd5f..ed1ce04 100755 --- a/src/main/java/Shadowrun/dice.java +++ b/src/main/java/Shadowrun/dice.java @@ -21,6 +21,7 @@ public class dice extends ListenerAdapter { private String prefixIni; private String prefixZitat; private String prefixTest; + private String prefixCId; private language langDe = new language("de"); private language langEn = new language("en"); @@ -38,6 +39,7 @@ public class dice extends ListenerAdapter { this.prefixIni = "/ini"; this.prefixTest = "/rollTest"; this.prefixZitat = "/zitat"; + this.prefixCId = "/cid"; this.db = new db_connect(); } @@ -46,7 +48,8 @@ public class dice extends ListenerAdapter { 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.getMessage().getContentRaw().startsWith(this.prefixTest) + && !event.getMessage().getContentRaw().startsWith(this.prefixCId)) || (event.getChannelType() != ChannelType.TEXT && event.getChannelType() != ChannelType.PRIVATE)) { return; } @@ -78,6 +81,8 @@ public class dice extends ListenerAdapter { this.rollTest(event); else if (event.getMessage().getContentRaw().startsWith(this.prefixZitat)) this.zitat(event); + else if (event.getMessage().getContentRaw().startsWith(this.prefixCId)) + this.cid(event); } } @@ -448,6 +453,9 @@ public class dice extends ListenerAdapter { int dice = new Random().nextInt(600); event.getChannel().sendMessage(quotes[dice%6]).queue(); } + private void cid(MessageReceivedEvent event) { + event.getChannel().sendMessage(getAsMention(event) + " " + event.getChannel().getId()).queue(); + } private String getEffectiveName(MessageReceivedEvent event) { if(event.getMember() == null) { diff --git a/src/main/java/Socket/shadowrun.java b/src/main/java/Socket/shadowrun.java index 402ba7e..234f5c0 100755 --- a/src/main/java/Socket/shadowrun.java +++ b/src/main/java/Socket/shadowrun.java @@ -139,19 +139,33 @@ public class shadowrun implements Runnable{ EmbedBuilder outputBox = new EmbedBuilder(); outputBox.setColor(Color.BLACK); outputBox.setTitle("Initiative:"); + String channelId = "542202034330271759"; while (in.hasNextLine()) { message = in.nextLine().trim(); if(message.trim().equals("FIN")) { break; } - String[] msgParts = message.split("\\|",3); - //jda.getUserById(msgParts[0]).getName(); + if(message.startsWith("out:")) { + String[] msgParts = message.split(":", 2); + if(!msgParts[1].equals("")) + channelId = msgParts[1]; + } + else { - outputBox.addField( msgParts[0], msgParts[1], false); + String[] msgParts = message.split("\\|"); + //jda.getUserById(msgParts[0]).getName(); + StringBuilder iniTicks = new StringBuilder(); + iniTicks.append(msgParts[1]); + for(int i = 2; i < msgParts.length; i++) { + iniTicks.append("\t - \t "); + iniTicks.append(msgParts[i]); + } + outputBox.addField(msgParts[0], iniTicks.toString(), false); + } out.println("ACKSend"); } - jda.getTextChannelById("542202034330271759").sendMessage(outputBox.build()).queue(); + jda.getTextChannelById(channelId).sendMessage(outputBox.build()).queue(); } } } diff --git a/src/main/java/core/Controller.java b/src/main/java/core/Controller.java new file mode 100755 index 0000000..f977e40 --- /dev/null +++ b/src/main/java/core/Controller.java @@ -0,0 +1,4 @@ +package core; + +public class Controller { +} diff --git a/src/main/java/core/sample.fxml b/src/main/java/core/sample.fxml new file mode 100755 index 0000000..84730f1 --- /dev/null +++ b/src/main/java/core/sample.fxml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file From e28d8450fd33205c7b299793972186328653a96f Mon Sep 17 00:00:00 2001 From: Sebastian Zeidler Date: Thu, 5 Sep 2019 19:29:44 +0200 Subject: [PATCH 17/28] DB ausbauen --- src/main/java/Shadowrun/db_connect.java | 50 ++++++++++++++++++++++++- src/main/java/Shadowrun/dice.java | 47 ++++++++++++++++------- src/main/java/Shadowrun/help.java | 30 +++++++++++++++ 3 files changed, 111 insertions(+), 16 deletions(-) create mode 100755 src/main/java/Shadowrun/help.java diff --git a/src/main/java/Shadowrun/db_connect.java b/src/main/java/Shadowrun/db_connect.java index 5add1e4..b459680 100755 --- a/src/main/java/Shadowrun/db_connect.java +++ b/src/main/java/Shadowrun/db_connect.java @@ -1,5 +1,6 @@ package Shadowrun; +import javax.print.DocFlavor; import java.sql.*; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -87,6 +88,49 @@ public class db_connect extends DB.base { close(); return result; } + + public void setChannelSettings(String channelId, String Sprache, String ServerId, String Kanalname) { + + if(!isActive()) { + return; + } + + open(); + try { + conn = getConn(); + String SQL_SELECT = "SELECT * FROM shadowrun_channelSettings where channelId = ?"; + + PreparedStatement preparedStatement = conn.prepareStatement(SQL_SELECT); + preparedStatement.setString(1, channelId); + ResultSet rs = preparedStatement.executeQuery(); + if (rs.next()) { + String SQL_Update = "UPDATE shadowrun_channelSettings SET lang = ? WHERE channelId = ?"; + preparedStatement = conn.prepareStatement(SQL_Update); + preparedStatement.setString(1, Sprache); + preparedStatement.setString(2, channelId); + preparedStatement.executeUpdate(); + + } + else { + String SQL_INSERT = "INSERT INTO shadowrun_channelSettings (channelId, lang, serverId, kanalname) VALUES (?,?,?,?)"; + preparedStatement = conn.prepareStatement(SQL_INSERT); + preparedStatement.setString(1, channelId); + preparedStatement.setString(2, Sprache); + preparedStatement.setString(3, ServerId); + preparedStatement.setString(4, Kanalname); + preparedStatement.executeUpdate(); + } + + close(); + return; + + } + catch (SQLException e) { + e.printStackTrace(); + } + close(); + return; + } } /* @@ -103,11 +147,13 @@ public class db_connect extends DB.base { COLLATE='utf8_general_ci' ; - CREATE TABLE `shadowrun_log` ( + CREATE TABLE `shadowrun_channelSettings` ( `id` INT NOT NULL AUTO_INCREMENT, `zeitstempel` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `channelId` VARCHAR(50) NOT NULL DEFAULT '0', - `lang` VARCHAR(255) NOT NULL DEFAULT 'de' + `lang` VARCHAR(255) NOT NULL DEFAULT 'de', + `serverId` VARCHAR(255) NULL, + `kanalname` VARCHAR(255) NULL, PRIMARY KEY (`id`) ) COLLATE='utf8_general_ci' diff --git a/src/main/java/Shadowrun/dice.java b/src/main/java/Shadowrun/dice.java index ed1ce04..3f69bd7 100755 --- a/src/main/java/Shadowrun/dice.java +++ b/src/main/java/Shadowrun/dice.java @@ -26,7 +26,11 @@ public class dice extends ListenerAdapter { private language langDe = new language("de"); private language langEn = new language("en"); + private help helpDe = new help("de"); + private help helpEn = new help("En"); + private language activLang; + private help activHelp; private db_connect db; @@ -40,6 +44,21 @@ public class dice extends ListenerAdapter { this.prefixTest = "/rollTest"; 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." + + "wird aber kein Erfolg gewürfelt zählt dies als Kritischer Patzer und die Markierung wird Rot **Wichtig: Vor- und Nachteile die Einfluss auf die Patzer Changse haben werden nicht berücksichtigt"); + + helpDe.add(this.prefixSr + "+ Zahl", "Gleich wie bei " + this.prefixSr + "Zahl. Mit dem Unterschied dass alle gewürfelten 6. ein zuzätlichen Würfel generien."); + + helpDe.add(this.prefixSr + " Zahl_1 + Zahl_2", "Würfelt Zahl_2 x W6 und addiert Zahl_1 hinzu, um die Initative zu bestimmen"); + + helpDe.add(this.prefixIni + " Zahl_1 + Zahl_2", "Synonym für " + this.prefixSr + " Zahl_1 + Zahl_2"); + + helpDe.add(this.prefixCId, "Gibt aktuelle Channel ID zurück"); + + this.db = new db_connect(); } @@ -55,21 +74,19 @@ public class dice extends ListenerAdapter { } if(!channelList.containsKey(event.getChannel().getId())) { - channelList.put(event.getChannel().getId(), "de"); - activLang = langDe; + Map Einstellungen = db.getChannelSettings(event.getChannel().getId()); + channelList.put(event.getChannel().getId(), Einstellungen.get("lang").toString()); } - else { - switch (channelList.get(event.getChannel().getId())) { - case "de": - activLang = langDe; - break; - case "en": - activLang = langEn; - break; - default: - activLang = langDe; + 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()) { @@ -199,12 +216,14 @@ public class dice extends ListenerAdapter { activLang = langDe; channelList.put(event.getChannel().getId(), "de"); event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); + db.setChannelSettings(event.getChannel().getId(), "de", event.getGuild().getId(), event.getChannel().getName()); return; } else if(MsgParts[1].trim().toLowerCase().equals("en")) { activLang = langEn; channelList.put(event.getChannel().getId(), "en"); event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); + db.setChannelSettings(event.getChannel().getId(), "en", event.getGuild().getId(), event.getChannel().getName()); return; } @@ -263,7 +282,7 @@ public class dice extends ListenerAdapter { result.append(dice1+1); result.append(" "); } - if (verteilung[0] >= (numberOfDice+bonusEdegeDice)/2f) { + if (verteilung[0] > (numberOfDice+bonusEdegeDice)/2f) { // Patzer nur bei über er Hälfte an 1er glitches = true; } diff --git a/src/main/java/Shadowrun/help.java b/src/main/java/Shadowrun/help.java new file mode 100755 index 0000000..bbaa87e --- /dev/null +++ b/src/main/java/Shadowrun/help.java @@ -0,0 +1,30 @@ +package Shadowrun; + +import net.dv8tion.jda.core.events.message.MessageReceivedEvent; + + +public class help { + + private StringBuilder hilfstext; + private String sprache; + + public help(String sprache) { + this.sprache = sprache; + hilfstext = new StringBuilder(""); + } + + public void add(String befehl, String hilftext) { + if(this.hilfstext.length() > 0) + this.hilfstext.append("\n\n"); + this.add("**" + befehl + "** " + hilftext); + } + + public void add(String hilftext) { + this.hilfstext.append(hilftext); + } + + public void send() { + StringBuilder ausgabe = new StringBuilder(""); + + } +} From b0faab098b25364e7beba618152c64860e9b11fc Mon Sep 17 00:00:00 2001 From: Ocame Date: Fri, 5 Mar 2021 16:29:22 +0100 Subject: [PATCH 18/28] =?UTF-8?q?Keeproll=20Modul=20f=C3=BCr=20L5R?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Keeproll/dice.java | 308 +++++++++++++++++++++++++++++ src/main/java/Keeproll/result.java | 105 ++++++++++ 2 files changed, 413 insertions(+) create mode 100644 src/main/java/Keeproll/dice.java create mode 100644 src/main/java/Keeproll/result.java diff --git a/src/main/java/Keeproll/dice.java b/src/main/java/Keeproll/dice.java new file mode 100644 index 0000000..5f66af8 --- /dev/null +++ b/src/main/java/Keeproll/dice.java @@ -0,0 +1,308 @@ +package Keeproll; + +import Shadowrun.db_connect; +import Simpleroll.help; +import Simpleroll.language; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.ChannelType; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; + +import java.awt.*; +import java.util.*; +import java.util.regex.MatchResult; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class dice extends ListenerAdapter { + + private String prefixlong; + private String prefixShort; + private String prefixVeryShort; + + private language langDe = new language("de"); + private language langEn = new language("en"); + + private help helpDe = new help("de"); + private help helpEn = new help("En"); + + private language activLang; + private help activHelp; + + private db_connect db; + + private Map channelList = new HashMap<>(); + + + public dice() { + this.prefixlong = "/keeproll"; + this.prefixShort = "/keep"; + this.prefixVeryShort = "/k "; + + this.db = new db_connect(); + } + + @Override + public void onMessageReceived(MessageReceivedEvent event) { + if ((!event.getMessage().getContentRaw().toLowerCase().startsWith(this.prefixlong) + && !event.getMessage().getContentRaw().toLowerCase().startsWith(this.prefixShort) + && !event.getMessage().getContentRaw().toLowerCase().startsWith(this.prefixVeryShort)) + || (event.getChannelType() != ChannelType.TEXT && event.getChannelType() != ChannelType.PRIVATE)) { + return; + } + + 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; + + } + User author = event.getAuthor(); + if (event.getMessage().getContentRaw().toLowerCase().startsWith(this.prefixlong) || event.getMessage().getContentRaw().toLowerCase().startsWith(this.prefixShort) || event.getMessage().getContentRaw().toLowerCase().startsWith(this.prefixVeryShort)) + this.roll(event); + } + + + private String getEffectiveName(MessageReceivedEvent event) { + if(event.getMember() == null) { + return ""; + } + return event.getMember().getEffectiveName() + " "; + } + + private String getAsMention(MessageReceivedEvent event) { + if(event.getMember() == null) { + return ""; + } + return event.getMember().getAsMention() + " "; + } + + /** + * + * + * @param event JDA Event + */ + private void roll(MessageReceivedEvent event) { + + EmbedBuilder outputBox = new EmbedBuilder(); + StringBuilder result = new StringBuilder(""); + String msgText = ""; + + int numberOfDice, diceCount, resultValue, difficult, bonus; + numberOfDice = diceCount = resultValue = difficult = bonus = 0; + + boolean reroll9, reroll1, maxreroll, noreroll; + reroll9 = reroll1 = maxreroll = noreroll = false; + + try { + + String ContentRaw = event.getMessage().getContentRaw(); + + // Prüfen ob Leerer Command gesendet wird + String[] MsgParts = ContentRaw.replace(" ", " ").split(" ", 2); + + if(MsgParts.length < 2) { + String message = activLang.emptyCommand; + message = message.replace("%command%", this.prefixShort); + event.getChannel().sendMessage(getAsMention(event) + message).queue(); + return; + } + + msgText = MsgParts[1].trim(); + if(msgText.matches(".*[^0-9].*")) { // es wurden andere zeichen als Zahlen gefunden + if(msgText.toLowerCase().equals("de")) { + activLang = langDe; + channelList.put(event.getChannel().getId(), "de"); + event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); + db.setChannelSettings(event.getChannel().getId(), "de", event.getGuild().getId(), event.getChannel().getName()); + return; + } + else if(msgText.toLowerCase().equals("en")) { + activLang = langEn; + channelList.put(event.getChannel().getId(), "en"); + event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); + db.setChannelSettings(event.getChannel().getId(), "en", event.getGuild().getId(), event.getChannel().getName()); + return; + } + else if(msgText.toLowerCase().equals("help") || msgText.toLowerCase().equals("hilfe")) { + event.getChannel().sendMessage(getAsMention(event) + + " Die Syntax lautet XkY z.b. 5k4\nEs werden X mal W10 gewürfelt und davon die höhsten Anzahl Y behalten und addiert. Wird eine 10 gewürfelt, wird der Wurf weiter gewürfelt und addiert aber nur als ein Wurf gezählt.\nWird nach dem XkY eine weiter Zahl angeben so ist dies die Schwierigkeit\n" + + "Wird nach dem XkY eine Zahl mit + oder - Angegeben, zählt dies als ein Modifikator für das ergebnis.\n\n" + + "Zudem gibt es folgente sonderzeichen, die an belibiger stelle gesetz werden können:\n" + + "! - auch gewüfelte 9 explodieren\n" + + "e - gewürfelte 1 werden neu gewürfelt\n" + + "# - Würfel explodierente nur einmal\n" + + "n - Würfel explodierente nicht\n" + ).queue(); + + return; + } + if(msgText.contains("!")) { + reroll9 = true; + msgText = msgText.replace("!", ""); + } + if(msgText.contains("e")) { + reroll1 = true; + msgText = msgText.replace("e", ""); + } + if(msgText.contains("#")) { + maxreroll = true; + msgText = msgText.replace("#", ""); + } + if(msgText.contains("n")) { + noreroll = true; + msgText = msgText.replace("n", ""); + } + + if(msgText.matches(".*[+-] *[0-9]+.*")) { // Modifikator gefunden + Pattern pattern = Pattern.compile("([+-]) *([0-9]+)"); + Matcher matcher = pattern.matcher(msgText.toLowerCase()); + matcher.find(); + MatchResult elements = matcher.toMatchResult(); + bonus = Integer.parseInt(elements.group(2)); + if(elements.group(1).equals("-")) { + bonus *= -1; + } + msgText = msgText.replaceFirst("[+-] *[0-9]+", ""); + } + + if(msgText.toLowerCase().matches(".*([0-9]+)k([0-9]+) +([0-9]+).*")) { // XkY Z Aufbau in der Anfrage + Pattern pattern = Pattern.compile("([0-9]+)k([0-9]+) +([0-9]+)"); + Matcher matcher = pattern.matcher(msgText.toLowerCase()); + matcher.find(); + MatchResult elements = matcher.toMatchResult(); + numberOfDice = Integer.parseInt(elements.group(1)); + diceCount = Integer.parseInt(elements.group(2)); + difficult = Integer.parseInt(elements.group(3)); + } + else if(msgText.toLowerCase().matches(".*([0-9]+)k([0-9]+).*")) { // XkY Aufbau in der Anfrage + Pattern pattern = Pattern.compile("([0-9]+)k([0-9]+)"); + Matcher matcher = pattern.matcher(msgText.toLowerCase()); + matcher.find(); + MatchResult elements = matcher.toMatchResult(); + numberOfDice = Integer.parseInt(elements.group(1)); + diceCount = Integer.parseInt(elements.group(2)); + } + else { + String message = activLang.error; + message = message.replace("%command%", msgText); + event.getChannel().sendMessage(getAsMention(event) + message).queue(); + return; + } + } + else { + String message = activLang.error; + message = message.replace("%command%", msgText); + event.getChannel().sendMessage(getAsMention(event) + message).queue(); + return; + } + + if(numberOfDice < diceCount && numberOfDice < 10) { + numberOfDice = diceCount; + } + + if(numberOfDice > 10) { + int diceovflow = numberOfDice-10; + numberOfDice = 10; + if(diceCount >= 10) { + bonus += diceovflow*2; + } + else { + if(diceCount + Math.floorDiv(diceovflow, 2) <= 10) { + diceCount += Math.floorDiv(diceovflow, 2); + } + else { + diceCount = 10; + bonus += (diceCount + Math.floorDiv(diceovflow, 2) - 10)*2; + } + } + + } + + if(diceCount > 10) { + bonus += (diceCount-10)*2; + diceCount = 10; + } + + if(numberOfDice <= 0) { + String message = activLang.noNegativ; + event.getChannel().sendMessage(getAsMention(event) + message).queue(); + return; + } + + + result[] rolls = new result[numberOfDice]; + + int [][] sortRolls = new int[numberOfDice][2]; + + for(int i = 0; i < numberOfDice; i++) { + rolls[i] = new result(); + rolls[i].setMaxReroll(maxreroll).setReroll1(reroll1).setReroll9(reroll9).setNoreroll(noreroll); + rolls[i].roll(); + sortRolls[i][0] = i; + sortRolls[i][1] = rolls[i].getValue(); + } + + + // sortierung + Arrays.sort(sortRolls, Comparator.comparingInt(o -> o[1])); + for(int i = numberOfDice; i > numberOfDice-diceCount; i--) { + resultValue += sortRolls[i-1][1]; + rolls[sortRolls[i-1][0]].setMarket(); + } + resultValue += bonus; + + // Border Farbe + if(resultValue >= difficult) { + outputBox.setColor(Color.green); + } + else { + outputBox.setColor(Color.red); + } + + // Ausgabe beginn + String addition = ""; + if(bonus != 0) { + if(bonus < 0) { + addition += " - " + (bonus*-1) + " ";; + } + else { + addition += " + " + bonus + " ";; + } + } + if(difficult > 0) { + addition += " Schwierigkeit " + difficult; + } + + outputBox.setTitle(getEffectiveName(event) + numberOfDice + "k" + diceCount + addition + ": " + resultValue); + + StringBuilder description = new StringBuilder(); + for(int i = 0; i < numberOfDice; i++) { + if(description.length() > 0) { + description.append(", "); + } + description.append(rolls[i].getText()); + } + outputBox.setDescription("(" + description + ")"); + event.getChannel().sendMessage(outputBox.build()).queue(); + } + catch (NumberFormatException e) { + event.getChannel().sendMessage("Nope").queue(); + } + catch (Exception e) { + System.out.println("problem: " + e.getMessage()); + } + + } + +} diff --git a/src/main/java/Keeproll/result.java b/src/main/java/Keeproll/result.java new file mode 100644 index 0000000..087dda0 --- /dev/null +++ b/src/main/java/Keeproll/result.java @@ -0,0 +1,105 @@ +package Keeproll; + +import java.util.Random; + +public class result { + private StringBuilder text; + private int value; + private int diceart; + private Boolean reroll9; + private Boolean reroll1; + private Boolean maxReroll; + private Boolean noreroll; + + public result() { + diceart = 10; + text = new StringBuilder(); + value = 0; + reroll9 = false; + reroll1 = false; + maxReroll = false; + noreroll = false; + } + + public String getText() { + return text.toString(); + } + + public void setText(String text) { + this.text = new StringBuilder(); + this.text.append(text); + } + + public void setMarket() { + String tmp = this.text.toString(); + this.text = new StringBuilder(); + this.text.append("**").append(tmp).append("**"); + } + + public int getValue() { + return value; + } + + public void setValue(Integer value) { + this.value = value; + } + + public result setReroll9(Boolean reroll9) { + this.reroll9 = reroll9; + return this; + } + + public result setReroll1(Boolean reroll1) { + this.reroll1 = reroll1; + return this; + } + + public result setMaxReroll(Boolean maxReroll) { + this.maxReroll = maxReroll; + return this; + } + + public result setNoreroll(Boolean noreroll) { + this.noreroll = noreroll; + return this; + } + + public result roll() { + int dice; + int rolls = 0; + Boolean reroll = false; + + do{ + reroll = false; + dice = new Random().nextInt(diceart); + dice++; + + if(text.length() > 0) { + text.append("+"); + } + if(reroll1 && dice == 1 && rolls <= 0) { + text.append("~~ ").append(dice).append(" ~~ "); + } + else { + text.append(dice); + } + + value += dice; + + if(!noreroll) { + if (dice == 10) { + reroll = rolls <= 0 || !maxReroll; // wenn maxRolls an und schon einmal gerollt wurde kein reroll + ++rolls; + } else if (reroll9 && dice == 9) { + reroll = rolls <= 0 || !maxReroll; + } else if (reroll1 && dice == 1 && rolls <= 0) { + reroll = true; + value--; + } + } + + } while(reroll); + + return this; + } +} From ffa35b3e75717045f7965986a884488c4b335295 Mon Sep 17 00:00:00 2001 From: Ocame Date: Fri, 5 Mar 2021 16:29:55 +0100 Subject: [PATCH 19/28] Einfaches /roll Modul --- src/main/java/Simpleroll/dice.java | 219 ++++++++++++++++++ src/main/java/Simpleroll/help.java | 28 +++ src/main/java/Simpleroll/language.java | 89 +++++++ .../java/Simpleroll/messageInterpreter.java | 90 +++++++ 4 files changed, 426 insertions(+) create mode 100644 src/main/java/Simpleroll/dice.java create mode 100644 src/main/java/Simpleroll/help.java create mode 100644 src/main/java/Simpleroll/language.java create mode 100644 src/main/java/Simpleroll/messageInterpreter.java diff --git a/src/main/java/Simpleroll/dice.java b/src/main/java/Simpleroll/dice.java new file mode 100644 index 0000000..c241a8c --- /dev/null +++ b/src/main/java/Simpleroll/dice.java @@ -0,0 +1,219 @@ +package Simpleroll; + +import Shadowrun.db_connect; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.ChannelType; +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 java.awt.*; +import java.security.SecureRandom; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + +public class dice extends ListenerAdapter { + + private String prefixR; + private String prefixRoll; + + private language langDe = new language("de"); + private language langEn = new language("en"); + + private help helpDe = new help("de"); + private help helpEn = new help("En"); + + private language activLang; + private help activHelp; + + private db_connect db; + + private Map channelList = new HashMap<>(); + + + public dice() { + this.prefixR = "/roll"; + this.prefixRoll = "/r "; + + this.db = new db_connect(); + } + + @Override + public void onMessageReceived(MessageReceivedEvent event) { + if ((!event.getMessage().getContentRaw().startsWith(this.prefixR) + && !event.getMessage().getContentRaw().startsWith(this.prefixRoll)) + || (event.getChannelType() != ChannelType.TEXT && event.getChannelType() != ChannelType.PRIVATE)) { + return; + } + + 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; + + } + User author = event.getAuthor(); + if (event.getMessage().getContentRaw().startsWith(this.prefixR) || event.getMessage().getContentRaw().startsWith(this.prefixRoll)) + this.roll(event); + } + + + private String getEffectiveName(MessageReceivedEvent event) { + if(event.getMember() == null) { + return ""; + } + return event.getMember().getEffectiveName() + " "; + } + + private String getAsMention(MessageReceivedEvent event) { + if(event.getMember() == null) { + return ""; + } + return event.getMember().getAsMention() + " "; + } + + /** + * 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; + + + try { + + String ContentRaw = event.getMessage().getContentRaw(); + + // Prüfen ob Leerer Command gesendet wird + String[] MsgParts = ContentRaw.replace(" ", " ").split(" ", 2); + + if(MsgParts.length < 2) { + String message = activLang.emptyCommand; + message = message.replace("%command%", this.prefixRoll); + event.getChannel().sendMessage(getAsMention(event) + 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(getAsMention(event) + activLang.language).queue(); + db.setChannelSettings(event.getChannel().getId(), "de", event.getGuild().getId(), event.getChannel().getName()); + return; + } + else if(MsgParts[1].trim().toLowerCase().equals("en")) { + activLang = langEn; + channelList.put(event.getChannel().getId(), "en"); + event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); + db.setChannelSettings(event.getChannel().getId(), "en", event.getGuild().getId(), event.getChannel().getName()); + 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(getAsMention(event) + message).queue(); + return; + } + } + else { + String message = activLang.error; + message = message.replace("%command%", MsgParts[1].trim()); + event.getChannel().sendMessage(getAsMention(event) + 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(getAsMention(event) + message).queue(); + return; + } + } + + + if(numberOfDice <= 0) { + String message = activLang.noNegativ; + event.getChannel().sendMessage(getAsMention(event) + message).queue(); + return; + } + + for(int i = 0; i < numberOfDice; i++) { + dice1 = new Random().nextInt(diceart); + verteilung[dice1]++; + result.append(dice1+1); + result.append(" "); + } + outputBox.setColor(Color.green); + String addition = ""; + + String message = activLang.basisresultText; + //%numberOfDice%%dice%%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%"; + message = message.replace("%numberOfDice%", String.valueOf(numberOfDice)).replace("%diceart%", String.valueOf(diceart)); + outputBox.setTitle(getEffectiveName(event) + 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(); + /*event.getChannel().sendMessage(outputBox.build()).queue(message1 -> { + message1.addReaction("sr:517528156014510111").queue(); + message1.addReaction("test:517545127376322596").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()); + }*/ + } + catch (NumberFormatException e) { + event.getChannel().sendMessage("Nope").queue(); + } + catch (Exception e) { + System.out.println("problem: " + e.getMessage()); + } + + } +} diff --git a/src/main/java/Simpleroll/help.java b/src/main/java/Simpleroll/help.java new file mode 100644 index 0000000..005a14e --- /dev/null +++ b/src/main/java/Simpleroll/help.java @@ -0,0 +1,28 @@ +package Simpleroll; + + +public class help { + + private StringBuilder hilfstext; + private String sprache; + + public help(String sprache) { + this.sprache = sprache; + hilfstext = new StringBuilder(""); + } + + public void add(String befehl, String hilftext) { + if(this.hilfstext.length() > 0) + this.hilfstext.append("\n\n"); + this.add("**" + befehl + "** " + hilftext); + } + + public void add(String hilftext) { + this.hilfstext.append(hilftext); + } + + public void send() { + StringBuilder ausgabe = new StringBuilder(""); + + } +} diff --git a/src/main/java/Simpleroll/language.java b/src/main/java/Simpleroll/language.java new file mode 100644 index 0000000..9bd035b --- /dev/null +++ b/src/main/java/Simpleroll/language.java @@ -0,0 +1,89 @@ +package Simpleroll; + +import java.io.*; +import java.util.Properties; + + +public class language { + + public String language = "Deutsch"; + public String emptyCommand = " der %command% befehl benötigt einen Wert"; + public String error = " Irgend was dummes ist passiert beim Verstehen von %command%"; + public String error2 = " Irgend was dummes ist passiert beim Verstehen von %command%"; + 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 basisresultText = " %numberOfDice%w%diceart%:"; + + public language() { + this.readConfig(); + } + + /** + * + * @param lang Srache + */ + public language(String lang) { + this.readConfig(lang); + } + + public void readConfig() { + this.readConfig("de"); + } + public void readConfig(String lang) { + FileInputStream input = null; + OutputStream output = null; + Properties config = new Properties(); + try { + File f = new File("shadowrun.cfg"); + if (f.isFile() && f.canRead()) { + + input = new FileInputStream("shadowrun.cfg"); + config.load(input); + if(config.containsKey(lang + ".language")) + this.language = config.getProperty(lang + ".language"); + + if(config.containsKey(lang + ".emptyCommand")) + this.emptyCommand = config.getProperty(lang + ".emptyCommand"); + if(config.containsKey(lang + ".error")) + this.error = config.getProperty(lang + ".error"); + if(config.containsKey(lang + ".error2")) + this.error2 = config.getProperty(lang + ".error2"); + if(config.containsKey(lang + ".noNegativ")) + this.noNegativ = config.getProperty(lang + ".noNegativ"); + if(config.containsKey(lang + ".dice")) + this.dice = config.getProperty(lang + ".dice"); + if(config.containsKey(lang + ".resultText")) + this.resultText = config.getProperty(lang + ".resultText"); + if(config.containsKey(lang + ".basisresultText")) + this.resultText = config.getProperty(lang + ".basisresultText"); + + } + else { + output = new FileOutputStream("shadowrun.cfg"); + config.setProperty(lang + ".language", this.language); + config.setProperty(lang + ".emptyCommand", this.emptyCommand); + config.setProperty(lang + ".error", this.error); + config.setProperty(lang + ".error2", this.error2); + config.setProperty(lang + ".noNegativ", this.noNegativ); + config.setProperty(lang + ".dice", this.dice); + config.setProperty(lang + ".resultText", this.resultText); + config.setProperty(lang + ".basisresultText", this.basisresultText); + config.store(output, null); + + } + } catch (Exception e) { + + } + finally { + if (input != null) { + try { + input.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} + diff --git a/src/main/java/Simpleroll/messageInterpreter.java b/src/main/java/Simpleroll/messageInterpreter.java new file mode 100644 index 0000000..c3b43c3 --- /dev/null +++ b/src/main/java/Simpleroll/messageInterpreter.java @@ -0,0 +1,90 @@ +package Simpleroll; + +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; + +import java.util.Scanner; + +public class messageInterpreter { + + private Integer diceart = 6; + private Integer numberOfDice = 1; + private Integer typ = 0; + private Integer intResult = 0; + + private language activLang; + private MessageReceivedEvent event; + + + public Integer getDiceart() { + return diceart; + } + + public Integer getNumberOfDice() { + return numberOfDice; + } + + public Integer getIntResult() { + return intResult; + } + + public boolean isNum() { + if(typ == 1) { + return true; + } + return false; + } + + public boolean isDice() { + if(typ == 2) { + return true; + } + return false; + } + /** + * + * @param event JDA Event + * @param activLang Aktive Sprache + */ + public messageInterpreter(MessageReceivedEvent event, language activLang) { + this.event = event; + this.activLang = activLang; + } + private void reset() { + diceart = 6; + numberOfDice = 1; + typ = 0; + intResult = 0; + } + public void inputInterpreter(String Input) { + reset(); + Scanner sc = new Scanner(Input.trim()); + + if(sc.hasNextInt()) { // ist eine Zahl + typ = 1; + intResult = Integer.parseInt(Input.trim()); + return; + } + else { + if (Input.trim().toLowerCase().replace(" ", "").matches("([0-9]*)[dw]([0-9].*)")) { // format besteh aus (Zahlen)d(Zahlen) oder (Zahlen)w(Zahlen) + String[] diceInterpreter = Input.trim().toLowerCase().replace(" ", "").split("[wd]"); + try { + diceart = Integer.parseInt(diceInterpreter[1]); + numberOfDice = Integer.parseInt(diceInterpreter[0]); + typ = 2; + } catch (NumberFormatException e) { + String message = activLang.error; + message = message.replace("%command%", Input.trim().toLowerCase()); + //event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); + typ = -1; + throw new IllegalArgumentException( message ); + } + } + else { + String message = activLang.error; + message = message.replace("%command%", Input.trim().toLowerCase()); + typ = -1; + throw new IllegalArgumentException( message ); + } + } + } +} From 67dffe9c1303f1ad23b4669a7581b42767e7655a Mon Sep 17 00:00:00 2001 From: Ocame Date: Fri, 5 Mar 2021 16:30:22 +0100 Subject: [PATCH 20/28] Engel Modul --- src/main/java/Engel/arcana.java | 65 +++++++++ src/main/java/Engel/arcanaList.java | 206 ++++++++++++++++++++++++++++ src/main/java/Engel/dice.java | 140 +++++++++++++++++++ src/main/java/Engel/language.java | 89 ++++++++++++ 4 files changed, 500 insertions(+) create mode 100644 src/main/java/Engel/arcana.java create mode 100644 src/main/java/Engel/arcanaList.java create mode 100644 src/main/java/Engel/dice.java create mode 100644 src/main/java/Engel/language.java diff --git a/src/main/java/Engel/arcana.java b/src/main/java/Engel/arcana.java new file mode 100644 index 0000000..8ebce27 --- /dev/null +++ b/src/main/java/Engel/arcana.java @@ -0,0 +1,65 @@ +package Engel; + +public class arcana { + private String name; + private String upsideMeaning; + private String upsideExplain; + private String upsideText; + private String downSideMeaning; + private String downSideExplain; + private String downsideText; + + + + private String upsideNumber; + private String downsideNumber; + + + public arcana(String name, String upsideMeaning, String upsideExplain, String upsideText, String upsideNumber, String downSideMeaning, String downSideExplain, String downsideText, String downsideNumber) { + this.name = name; + this.upsideMeaning = upsideMeaning; + this.upsideExplain = upsideExplain; + this.upsideText = upsideText; + this.downSideMeaning = downSideMeaning; + this.downSideExplain = downSideExplain; + this.downsideText = downsideText; + this.upsideNumber = upsideNumber; + this.downsideNumber = downsideNumber; + } + + public String getName() { + return name; + } + + public String getUpsideMeaning() { + return upsideMeaning; + } + + public String getUpsideExplain() { + return upsideExplain; + } + + public String getUpsideText() { + return upsideText; + } + + public String getDownSideMeaning() { + return downSideMeaning; + } + + public String getDownSideExplain() { + return downSideExplain; + } + + public String getDownsideText() { + return downsideText; + } + + public String getUpsideNumber() { + return upsideNumber; + } + + public String getDownsideNumber() { + return downsideNumber; + } +} diff --git a/src/main/java/Engel/arcanaList.java b/src/main/java/Engel/arcanaList.java new file mode 100644 index 0000000..cdb05e9 --- /dev/null +++ b/src/main/java/Engel/arcanaList.java @@ -0,0 +1,206 @@ +package Engel; + +import net.dv8tion.jda.api.EmbedBuilder; + +import java.awt.*; +import java.util.Random; + +public class arcanaList { + + private arcana[] arcanas; + + public boolean isSide() { + return side; + } + + private boolean side; + private int stack; + private boolean[] usedCard; + private int activArcana; + + public boolean isLoF() { + return LoF; + } + + private boolean LoF; + + public arcanaList() { + usedCard = new boolean[22]; + for(int i = 0; i < 22; i++) + usedCard[i] = false; + reset(); + initAranas(); + } + + public void reset() { + stack = 22; + activArcana = -1; + for(int i = 0; i < 22; i++) + usedCard[i] = false; + LoF = false; + side = false; + } + + public void draw() { + EmbedBuilder outputBox = new EmbedBuilder(); + StringBuilder resultConstruction = new StringBuilder(""); + + if(stack < 1) { + reset(); + } + int draw = new Random().nextInt(stack); + int j = 0; + for(int i = 0; i < draw; i++, j++) { // hochzählen von Zieh coutner und Kartennummer + if (usedCard[j] == true) { // wenn die Karte schon benutzt wurde wird der counter um eines reduziert um die nächste frei Karte zu finden + i--; + } + } + stack--; + int UpDown = new Random().nextInt(100); + if(UpDown % 2 == 0) + side = false; + else + side = true; + + activArcana = j; + if(j == 15) { + LoF = true; + } + else { + LoF = false; + } + } + + public String getName() { + if(activArcana == -1) + return ""; + else { + return arcanas[activArcana].getName(); + } + } + + public String getMeaning() { + if(activArcana == -1) + return ""; + else { + if (!side) + return arcanas[activArcana].getUpsideMeaning(); + else + return arcanas[activArcana].getDownSideMeaning(); + } + } + public String getExplain() { + if(activArcana == -1) + return ""; + else { + if (!side) + return arcanas[activArcana].getUpsideExplain(); + else + return arcanas[activArcana].getDownSideExplain(); + } + } + + public String getImage() { + String baseURL = "http://ocame.de/engelcards/"; + if(activArcana == -1) + return ""; + else { + if (!side) + return baseURL + arcanas[activArcana].getUpsideNumber() + ".jpg"; + else + return baseURL + arcanas[activArcana].getDownsideNumber() + ".jpg"; + } + } + + private void initAranas() { + arcanas = new arcana[22]; + arcanas[0] = new arcana("Das 0. Arkanum: der Ketzer", + "Entscheidungsfreiheit", "Neue Möglichkeiten, Mut, Ekstase, Kreativität, Risikobereitschaft, Vertrauen, Wahlfreiheit, Abenteuer", "upsideExplain", "19", + "Isolation", "Stagnation, Exzentrizität, Narretei, Gedankenlosigkeit, Indiskretion", "downsideExplain", "40" + ); + + arcanas[1] = new arcana("Das 1. Arkanum: die Kirche", + "Nachsicht", "Willenskraft, Kommunikation, wundersame Fähigkeiten, Erinnerung, klares Denken und Fühlen, Organisation, Entschlußkraft, Verständigung", "upsideExplain", "11", + "Strenge", "Schwäche, Unentschiedenheit", "downsideExplain", "32"); + + arcanas[2] = new arcana("Das 2. Arkanum: die Begine", + "Erleuchtung", "Intuition, Einfallsreichtum, Meditation, Eingebung, Wachstum, Entwicklung, Bewußtsein, Geheimnis, Innenschau", "upsideExplain", "5", + "Irrtum", "Irrglaube, Oberflächlichkeit, Einbildung", "downsideExplain", "26"); + + arcanas[3] = new arcana("Das 3. Arkanum: Roma Aeterna", + "Wachstum", "Fruchtbarkeit, Weisheit, Machtzentrum, Prophezeiung, Nächstenliebe, spirituelle Essenz, Heilung, Speisung, Gefühl, Schöpfung, Gleichgewicht, Heimat", "upsideExplain", "10", + "Verfall", "Unfruchtbarkeit, Armut, Untätigkeit, Störung, Zerstörung", "downsideExplain", "31"); + + arcanas[4] = new arcana("Das 4. Arkanum: die Schrottbaronin", + "Herrschaft", "Führung, Regierung, Macht, Entscheidungen, Taten, Verhandlungen, Führungsqualitäten, Stärke, Respekt, Unerschütterlichkeit, Selbstsicherheit, Väterlichkeit, Vernunft", "upsideExplain", "14", + "Tyrannei", "Unreife, Fesseln, Diktatur, Gewalt", "downsideExplain", "35"); + + arcanas[5] = new arcana("Das 5. Arkanum: der Kardinal", + "Moral", "Neue Möglichkeiten, Mut, Ekstase, Kreativität, Risikobereitschaft, Vertrauen, Wahlfreiheit, Abenteuer", "upsideExplain", "6", + "Dekadenz", "Leichtgläubigkeit, Verschlagenheit, Machtgier, Hinterlist, Arglist, Intrigen", "downsideExplain", "27"); + + arcanas[6] = new arcana("Das 6. Arkanum: die Erzengel", + "Reinheit", "Anziehungskraft, Beziehungen, Neugier, Loyalität, Hingabe, Leidenschaft, Verbundenheit, Dualität, Attraktion, Ernsthaftigkeit, Offenheit, Sensibilität, Integration, Gleichheit, Romantik, Harmonie", "upsideExplain", "9", + "Versuchung", "Abstoßung, Makel, Unvollkommenheit, Minderwertigkeit", "downsideExplain", "30"); + + arcanas[7] = new arcana("Das 7. Arkanum: der Schöpfer", + "Triumph", "Wandel, Bewegung, Wachstum, Evolution, Fortschritt, Gelegenheit, Erforschung, Reise, Stimulation, Aktivität, Beförderung, Eroberung, Bollwerk gegen die Versuchung", "upsideExplain", "4", + "Niederlage", "Mißerfolg, Zusammenbruch, Rache", "downsideExplain", "25"); + + arcanas[8] = new arcana("Das 8. Arkanum: der Komtur", + "Stärke", "Leidenschaft, Kreativität, Risikobereitschaft, Charisma, Glanz, Erholung, Ausdruckskraft, Gaben, Beherrschung, Überwindung von Angst, Lust, Glaubensstärke, Selbstvertrauen, Bauen auf eigene Fähigkeiten, Bedingungslosigkeit, Intuition, Herrschaft, Harmonie", "upsideExplain", "16", + "Schwäche", "Mißbrauch, Zwietracht, Verderbtheit, Zorn", "downsideExplain", "37"); + + arcanas[9] = new arcana("Das 9. Arkanum: der Monach", + "Weisheit", "Weisheit Vervollkommnung, Innenschau, Kontemplation, Erfahrung, Einzelheiten, Offenbarung, Integrität, Respekt, Führungsqualitäten, Übergänge, Entdeckung, Weisheit, Anleitung, Offenheit, Mut, Suche", "upsideExplain", "12", + "Torheit", "Unreife, Narretei", "downsideExplain", "33"); + + arcanas[10] = new arcana("Das 10. Arkanum: Das Schicksal", + "Glück", "Gelegenheit, Durchbruch, Wohlstand, Überfluß, Ausdehnung, Flexibilität", "upsideExplain", "2", + "Unglück", "Stagnation, Exzentrizität, Narretei, Gedankenlosigkeit, Indiskretion", "downsideExplain", "23"); + + arcanas[11] = new arcana("Das 11. Arkanum: der Templer", + "Pflicht", "Gute Gesinnung, Gleichgewicht, Neuorientierung, Wahrheit, Klarheit, Vereinfachung, Ordnung, Authentizität, Sichtbarmachung, Durchschauen von Täuschungen und Trugbildern, Harmonie", "upsideExplain", "21", + "Verrat", "Ungerechtigkeit, Vorurteile, Ungleichheit, Voreingenommenheit", "downsideExplain", "42"); + + arcanas[12] = new arcana("Das 12. Arkanum: die Beutereiter", + "Strukturwandel", "Bruch mit alten Strukturen, Entschlossenheit, Freiheit, Lebensenergie, neue Haltungen und Perspektiven, Erwachen, tiefe spirituelle Weisheit, Kreativität, Intelligenz, Prophetie", "upsideExplain", "17", + "Verwüstung", "Aufgabe, Vorurteile, Arroganz, Kapitulation, Unentschlossenheit", "downsideExplain", "38"); + + arcanas[13] = new arcana("Das 13. Arkanum: der Tod", + "Veränderung", "Erlösung, Loslassen, Verwandlung, Spiritualität, Bewußtseinserweiterung, Entpuppung, Geburtshilfe, Umstrukturierung, Zyklen, Wiedergeburt, Wandel", "upsideExplain", "18", + "Stillstand", "Trägheit, Mutation, Verwandlung", "downsideExplain", "39"); + + arcanas[14] = new arcana("Das 14. Arkanum: die Traumsaat", + "Einheit", "Anpassung, Integration, Synergie, Gleichgewicht, Einigkeit, Erfahrung, Konfliktlösung, Symmetrie, Kombinationen, Abstimmung, Koordination, Selbstbeherrschung", "upsideExplain", "13", + "Mutation", "Wettkampf, Ungleichgewicht, Groteskes", "downsideExplain", "34"); + + arcanas[15] = new arcana("Das 15. Arkanum: der Herr der Fliegen", + "?", "", "upsideExplain", "1", + "?", "", "downsideExplain", "1"); + + arcanas[16] = new arcana("Das 16. Arkanum: der Himmel", + "Zuflucht", "Läuterung, Ehrgeiz, Wiederherstellung, Erneuerung, Wandel, Umstrukturierung, Erwachen, Heilung, Ausdehnung, Echtheit, Aufbau, Entwurf, Orientierung", "upsideExplain", "15", + "Gefangenschaft", "Freiheitsentzug, Konflikt, Katastrophe, Störung, Aufruhr", "downsideExplain", "36"); + + arcanas[17] = new arcana("Das 17. Arkanum: die Inspiration", + "Kreativität", "Zuversicht, Selbstwertgefühl, Talent, Anleitung, Ausdrucksstärke, Innovation, Einfallsreichtum, Ausstrahlung, Manifestation, Charisma, Anziehungskraft, Instinkt, Vollendung, Inneres Gleichgewicht, Spontaneität, Lebendigkeit, Natur, Hoffnung, Erkenntnis, Bedeutung", "upsideExplain", "3", + "Einfallslosigkeit", "Sturheit, Pessimismus, Zweifel, Überanstrengung", "downsideExplain", "24"); + + arcanas[18] = new arcana("Das 18. Arkanum: Das Buch der Bücher", + "Enthüllung", "Intuition, Bekenntnis, Empfänglichkeit, Denken, Geheimnis, Rätsel, Romantik, Offenbarung", "upsideExplain", "20", + "Geheimnis", "Wahnsinn, Täuschung, Gefahr, Irrsinn, Illusion, Sinnestäuschung", "downsideExplain", "41"); + + arcanas[19] = new arcana("Das 19. Arkanum: die Schar", + "Zusammenhalt", "Befreiung, Zusammenarbeit, Gemeinsamkeit, Partnerschaft, Kooperation, Energie, Lebenskraft, Entstehung, Motivation, Stimulation, Jubel, Organisation, gemeinsame Visionen, Erforschung, Wiederbelebung, Schöpfung, Neuerung, Erfolg, Gelingen, Errungenschaften", "upsideExplain", "7", + "Abkehr", "Rückschritt, Erschöpfung, Ausgelaugtheit, Enervierung, Energieverlust", "downsideExplain", "28"); + + arcanas[20] = new arcana("Das 20. Arkanum: Das Fegefeuer", + "Zerstörung", "Tod, Desillusionierung, Verlust, Kritik, Voreingenommenheit", "upsideExplain", "22", + "Wiedergeburt", "Wiedervereinigung, Erwachen, Bewußtsein, Unterscheidungsfähigkeit, Urteilsfähigkeit, Wahrnehmung, Erkenntnis, Einschätzung, Integration, Manifestation", "downsideExplain", "43"); + + arcanas[21] = new arcana("Das 21. Arkanum: die Welt", + "Vitalität", "Erfüllung, Belohnung, Freiheit, Ganzheit, Vollkommenheit, Ganzheitlichkeit, Vollendung, Integration, Einung, Bewußtsein, Vision, Umwelt", "upsideExplain", "8", + "Trägheit", "Faulheit, Unvollständigkeit, Beschränkung, Restriktion, Verneinung", "downsideExplain", "29"); + } +} diff --git a/src/main/java/Engel/dice.java b/src/main/java/Engel/dice.java new file mode 100644 index 0000000..3812fac --- /dev/null +++ b/src/main/java/Engel/dice.java @@ -0,0 +1,140 @@ +package Engel; + +import Shadowrun.db_connect; +import Simpleroll.help; +import Simpleroll.language; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.ChannelType; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; + +import java.awt.*; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +public class dice extends ListenerAdapter { + + private String prefixEngel; + private String prefixEngelShort; + + private language langDe = new language("de"); + private language langEn = new language("en"); + + private help helpDe = new help("de"); + private help helpEn = new help("En"); + + private language activLang; + private help activHelp; + + private arcanaList activArcanaList; + + private db_connect db; + + private Map channelList = new HashMap<>(); + private Map arcanaList = new HashMap<>(); + + + public dice() { + this.prefixEngel = "/engel"; + this.prefixEngelShort = "/e"; + + this.db = new db_connect(); + } + + @Override + public void onMessageReceived(MessageReceivedEvent event) { + if ((!event.getMessage().getContentRaw().startsWith(this.prefixEngel) + && !event.getMessage().getContentRaw().startsWith(this.prefixEngelShort)) + || (event.getChannelType() != ChannelType.TEXT && event.getChannelType() != ChannelType.PRIVATE)) { + return; + } + + 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(!arcanaList.containsKey(event.getChannel().getId())) { + arcanaList.put(event.getChannel().getId(), new arcanaList()); + } + activArcanaList = arcanaList.get(event.getChannel().getId()); + + User author = event.getAuthor(); + if (event.getMessage().getContentRaw().startsWith(this.prefixEngel) || event.getMessage().getContentRaw().startsWith(this.prefixEngelShort)) + this.draw(event); + } + + + private String getEffectiveName(MessageReceivedEvent event) { + if(event.getMember() == null) { + return ""; + } + return event.getMember().getEffectiveName() + " "; + } + + private String getAsMention(MessageReceivedEvent event) { + if(event.getMember() == null) { + return ""; + } + return event.getMember().getAsMention() + " "; + } + + /** + * draw + * + * @param event JDA Event + */ + private void draw(MessageReceivedEvent event) { + + EmbedBuilder outputBox = new EmbedBuilder(); + + StringBuilder result = new StringBuilder(""); + + + try { + + String ContentRaw = event.getMessage().getContentRaw(); + String NameAdd = ""; + + activArcanaList.draw(); + + if(activArcanaList.isLoF()) { + outputBox.setColor(Color.red); + } + else if(!activArcanaList.isSide()) { + outputBox.setColor(Color.green); + } + else { + outputBox.setColor(Color.orange); + NameAdd = " Umgekehrt "; + } + + outputBox.setTitle(getEffectiveName(event) + "du ziehst " + NameAdd + activArcanaList.getName()); + result.append("**").append(activArcanaList.getMeaning()).append("**"); + result.append("\n").append(activArcanaList.getExplain()); + outputBox.setDescription(result.toString().trim()); + outputBox.setImage(activArcanaList.getImage()); + event.getChannel().sendMessage(outputBox.build()).queue(); + + } + catch (NumberFormatException e) { + event.getChannel().sendMessage("Nope").queue(); + } + catch (Exception e) { + System.out.println("problem: " + e.getMessage()); + } + + } +} diff --git a/src/main/java/Engel/language.java b/src/main/java/Engel/language.java new file mode 100644 index 0000000..cef2b76 --- /dev/null +++ b/src/main/java/Engel/language.java @@ -0,0 +1,89 @@ +package Engel; + +import java.io.*; +import java.util.Properties; + + +public class language { + + public String language = "Deutsch"; + public String emptyCommand = " der %command% befehl benötigt einen Wert"; + public String error = " Irgend was dummes ist passiert beim Verstehen von %command%"; + public String error2 = " Irgend was dummes ist passiert beim Verstehen von %command%"; + 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 basisresultText = " %numberOfDice%w%diceart%:"; + + public language() { + this.readConfig(); + } + + /** + * + * @param lang Srache + */ + public language(String lang) { + this.readConfig(lang); + } + + public void readConfig() { + this.readConfig("de"); + } + public void readConfig(String lang) { + FileInputStream input = null; + OutputStream output = null; + Properties config = new Properties(); + try { + File f = new File("shadowrun.cfg"); + if (f.isFile() && f.canRead()) { + + input = new FileInputStream("shadowrun.cfg"); + config.load(input); + if(config.containsKey(lang + ".language")) + this.language = config.getProperty(lang + ".language"); + + if(config.containsKey(lang + ".emptyCommand")) + this.emptyCommand = config.getProperty(lang + ".emptyCommand"); + if(config.containsKey(lang + ".error")) + this.error = config.getProperty(lang + ".error"); + if(config.containsKey(lang + ".error2")) + this.error2 = config.getProperty(lang + ".error2"); + if(config.containsKey(lang + ".noNegativ")) + this.noNegativ = config.getProperty(lang + ".noNegativ"); + if(config.containsKey(lang + ".dice")) + this.dice = config.getProperty(lang + ".dice"); + if(config.containsKey(lang + ".resultText")) + this.resultText = config.getProperty(lang + ".resultText"); + if(config.containsKey(lang + ".basisresultText")) + this.resultText = config.getProperty(lang + ".basisresultText"); + + } + else { + output = new FileOutputStream("shadowrun.cfg"); + config.setProperty(lang + ".language", this.language); + config.setProperty(lang + ".emptyCommand", this.emptyCommand); + config.setProperty(lang + ".error", this.error); + config.setProperty(lang + ".error2", this.error2); + config.setProperty(lang + ".noNegativ", this.noNegativ); + config.setProperty(lang + ".dice", this.dice); + config.setProperty(lang + ".resultText", this.resultText); + config.setProperty(lang + ".basisresultText", this.basisresultText); + config.store(output, null); + + } + } catch (Exception e) { + + } + finally { + if (input != null) { + try { + input.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} + From eae3bc233ee146d2af423f60ef22d47a8c9b5277 Mon Sep 17 00:00:00 2001 From: Ocame Date: Sun, 6 Jun 2021 01:17:50 +0200 Subject: [PATCH 21/28] Update SR --- src/main/java/Shadowrun/db_connect.java | 36 ++- src/main/java/Shadowrun/dice.java | 210 +++++++++++++++--- src/main/java/Shadowrun/help.java | 2 +- src/main/java/Shadowrun/language.java | 8 + .../java/Shadowrun/messageInterpreter.java | 2 +- 5 files changed, 221 insertions(+), 37 deletions(-) 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; From fef4bd06719e938dccc929f9e14ff23a0d573309 Mon Sep 17 00:00:00 2001 From: Ocame Date: Sun, 6 Jun 2021 01:18:08 +0200 Subject: [PATCH 22/28] =?UTF-8?q?/help=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Simpleroll/dice.java | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/java/Simpleroll/dice.java b/src/main/java/Simpleroll/dice.java index c241a8c..518402f 100644 --- a/src/main/java/Simpleroll/dice.java +++ b/src/main/java/Simpleroll/dice.java @@ -9,9 +9,12 @@ import net.dv8tion.jda.api.events.message.react.MessageReactionAddEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import java.awt.*; +import java.io.IOException; +import java.io.InputStream; import java.security.SecureRandom; import java.util.HashMap; import java.util.Map; +import java.util.Properties; import java.util.Random; import java.util.concurrent.ThreadLocalRandom; @@ -19,6 +22,7 @@ public class dice extends ListenerAdapter { private String prefixR; private String prefixRoll; + private String prefixHelp; private language langDe = new language("de"); private language langEn = new language("en"); @@ -37,6 +41,7 @@ public class dice extends ListenerAdapter { public dice() { this.prefixR = "/roll"; this.prefixRoll = "/r "; + this.prefixHelp = "/help"; this.db = new db_connect(); } @@ -44,7 +49,7 @@ public class dice extends ListenerAdapter { @Override public void onMessageReceived(MessageReceivedEvent event) { if ((!event.getMessage().getContentRaw().startsWith(this.prefixR) - && !event.getMessage().getContentRaw().startsWith(this.prefixRoll)) + && !event.getMessage().getContentRaw().startsWith(this.prefixRoll) && !event.getMessage().getContentRaw().startsWith(this.prefixHelp)) || (event.getChannelType() != ChannelType.TEXT && event.getChannelType() != ChannelType.PRIVATE)) { return; } @@ -67,6 +72,8 @@ public class dice extends ListenerAdapter { User author = event.getAuthor(); if (event.getMessage().getContentRaw().startsWith(this.prefixR) || event.getMessage().getContentRaw().startsWith(this.prefixRoll)) this.roll(event); + if (event.getMessage().getContentRaw().startsWith(this.prefixHelp)) + this.help(event); } @@ -216,4 +223,22 @@ public class dice extends ListenerAdapter { } } + + private void help(MessageReceivedEvent event) { + EmbedBuilder outputBox = new EmbedBuilder(); + StringBuilder result = new StringBuilder(""); + + + outputBox.setTitle("Hallo ich exestieren aktuell in der Version: 0.8\n"); + + result.append("Ich kann aktuell folgent Wüfe:\n"); + result.append("**/r** bzw. **/roll** für Allgemeine würfe. Ohne eine angabe vom Würfeltyp wird ein W6 benuzt\n\n"); + result.append("**/sr** für Shadowrun 5\n\n"); + result.append("**/ed** für Earthdawn 4\n\n"); + result.append("**/e** bzw **/engel** für die Arcane Version von Engel\n\n"); + result.append("**/l5r** bzw **/keep** für Legend of the 5 Rings\n"); + + outputBox.setDescription(result); + event.getChannel().sendMessage(outputBox.build()).queue(); + } } From e2f00d8904766c2a16312a9c822226062a6661d3 Mon Sep 17 00:00:00 2001 From: Ocame Date: Sun, 6 Jun 2021 01:18:57 +0200 Subject: [PATCH 23/28] =?UTF-8?q?prefix=20l5r=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Keeproll/dice.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/Keeproll/dice.java b/src/main/java/Keeproll/dice.java index 5f66af8..372dc25 100644 --- a/src/main/java/Keeproll/dice.java +++ b/src/main/java/Keeproll/dice.java @@ -36,7 +36,7 @@ public class dice extends ListenerAdapter { public dice() { - this.prefixlong = "/keeproll"; + this.prefixlong = "/l5r"; this.prefixShort = "/keep"; this.prefixVeryShort = "/k "; @@ -305,4 +305,15 @@ public class dice extends ListenerAdapter { } + private void aprilfool(MessageReceivedEvent event) { + EmbedBuilder outputBox = new EmbedBuilder(); + StringBuilder description = new StringBuilder(); + outputBox.setTitle("**Helft der Prinzessin und wertet Flauschsupporter!**"); + description.append("Da Würfel immer sehr schwer sind und Prinzessin Flauschball sehr klein ist.\n" + + "Würde sie sich rießig über eine kleine Spende freuen. \n\n" + + "Ab nur **1€** pro Monat steigt die Changse, als dank für die Hilfe, um **1%** ein besseres Ergebnis zu bekommen.\n\n"); + description.append("Für mehr Infos: https://bitly.com/98K8eH"); + outputBox.setDescription(description); + event.getChannel().sendMessage(outputBox.build()).queue(); + } } From 187fe7eb678be523a51eb3b59f917e7f7cea61a3 Mon Sep 17 00:00:00 2001 From: Ocame Date: Sun, 6 Jun 2021 01:19:25 +0200 Subject: [PATCH 24/28] =?UTF-8?q?Bugfix=20das=20bei=20/ed=20nicht=20/e=20a?= =?UTF-8?q?usgel=C3=B6st=20wird?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Engel/dice.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/Engel/dice.java b/src/main/java/Engel/dice.java index 3812fac..728cf3d 100644 --- a/src/main/java/Engel/dice.java +++ b/src/main/java/Engel/dice.java @@ -72,7 +72,7 @@ public class dice extends ListenerAdapter { activArcanaList = arcanaList.get(event.getChannel().getId()); User author = event.getAuthor(); - if (event.getMessage().getContentRaw().startsWith(this.prefixEngel) || event.getMessage().getContentRaw().startsWith(this.prefixEngelShort)) + if (event.getMessage().getContentRaw().startsWith(this.prefixEngel) || event.getMessage().getContentRaw().startsWith(this.prefixEngelShort + " ")) this.draw(event); } From eeec2af955c6139780871c3693bb8be8c869c7a2 Mon Sep 17 00:00:00 2001 From: Ocame Date: Sun, 6 Jun 2021 01:19:47 +0200 Subject: [PATCH 25/28] =?UTF-8?q?Eardanw=20Modul=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Earthdawn/dice.java | 462 ++++++++++++++++++ src/main/java/Earthdawn/language.java | 89 ++++ .../java/Earthdawn/messageInterpreter.java | 124 +++++ src/main/java/Earthdawn/step.java | 292 +++++++++++ 4 files changed, 967 insertions(+) create mode 100644 src/main/java/Earthdawn/dice.java create mode 100644 src/main/java/Earthdawn/language.java create mode 100644 src/main/java/Earthdawn/messageInterpreter.java create mode 100644 src/main/java/Earthdawn/step.java diff --git a/src/main/java/Earthdawn/dice.java b/src/main/java/Earthdawn/dice.java new file mode 100644 index 0000000..99cf6df --- /dev/null +++ b/src/main/java/Earthdawn/dice.java @@ -0,0 +1,462 @@ +package Earthdawn; + +import Shadowrun.db_connect; +import Shadowrun.help; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.ChannelType; +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 java.awt.*; +import java.lang.reflect.Array; +import java.security.SecureRandom; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + +public class dice extends ListenerAdapter { + + private String prefixSr; + private String prefixIni; + + + private language langDe = new language("de"); + private language langEn = new language("en"); + + private help helpDe = new help("de"); + private help helpEn = new help("En"); + + private language activLang; + private help activHelp; + + private db_connect db; + + private Map channelList = new HashMap<>(); + + private step dieRoll = new step(); + + + public dice() { + this.prefixSr = "/ed"; + this.prefixIni = "/ini"; + + + 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." + + "wird aber kein Erfolg gewürfelt zählt dies als Kritischer Patzer und die Markierung wird Rot **Wichtig: Vor- und Nachteile die Einfluss auf die Patzer Changse haben werden nicht berücksichtigt"); + + helpDe.add(this.prefixSr + "+ Zahl", "Gleich wie bei " + this.prefixSr + "Zahl. Mit dem Unterschied dass alle gewürfelten 6. ein zuzätlichen Würfel generien."); + + helpDe.add(this.prefixSr + " Zahl_1 + Zahl_2", "Würfelt Zahl_2 x W6 und addiert Zahl_1 hinzu, um die Initative zu bestimmen"); + + helpDe.add(this.prefixIni + " Zahl_1 + Zahl_2", "Synonym für " + this.prefixSr + " Zahl_1 + Zahl_2"); + + + this.db = new db_connect(); + } + + @Override + public void onMessageReceived(MessageReceivedEvent event) { + if ((!event.getMessage().getContentRaw().startsWith(this.prefixSr)) + || (event.getChannelType() != ChannelType.TEXT && event.getChannelType() != ChannelType.PRIVATE)) { + return; + } + + 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; + + } + User author = event.getAuthor(); + if (!author.isBot() || true) { + if (event.getMessage().getContentRaw().startsWith(this.prefixSr)) + this.srroll(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 " + getAsMention(event)); + + + + + 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 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 karma = false; + boolean doppelkarma = false; + boolean weiheJunger = false; + boolean doppelweiheJunger = false; + boolean weiheAnheanger = false; + boolean doppelweiheAnheanger = false; + boolean weiheVorbild = false; + boolean doppelweiheVorbild = false; + + int stufe = 0; + int modifier = 1; + + try { + if(event.getMessage().getContentRaw().matches(".*[ \\+jav].*")) { // es wurden andere zeichen als Zahlen gefunden + + } + // Prüfen ob Karma wurf + if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"+") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" +")) { + karma = true; + } + + if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"++") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" ++")) { + doppelkarma = true; + } + // Prüfen ob weihepunkte wurf + if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"j") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" j")) { + weiheJunger = true; + } + + if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"jj") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" jj")) { + doppelweiheJunger = true; + } + + if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"a") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" a")) { + weiheAnheanger = true; + } + + if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"aa") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" aa")) { + doppelweiheAnheanger = true; + } + + if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"v") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" v")) { + weiheVorbild = true; + } + + if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"vv") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" vv")) { + doppelweiheVorbild = true; + } + + // korrikiert Karama eingabe von /ed + zu /ed+ + String ContentRaw = event.getMessage().getContentRaw(); + if(event.getMessage().getContentRaw().startsWith(this.prefixSr+" +")) { + ContentRaw = ContentRaw.replace(this.prefixSr+" +", this.prefixSr+"+ ").replace(" ", " "); + } + + if(event.getMessage().getContentRaw().startsWith(this.prefixSr+" j")) { + ContentRaw = ContentRaw.replace(this.prefixSr+" j", this.prefixSr+"j ").replace(" ", " "); + } + + if(event.getMessage().getContentRaw().startsWith(this.prefixSr+" a")) { + ContentRaw = ContentRaw.replace(this.prefixSr+" a", this.prefixSr+"a ").replace(" ", " "); + } + + if(event.getMessage().getContentRaw().startsWith(this.prefixSr+" v")) { + ContentRaw = ContentRaw.replace(this.prefixSr+" v", this.prefixSr+"v ").replace(" ", " "); + } + String[] MsgParts = ContentRaw.split(" ", 2); + if(MsgParts.length < 2) { // Leerer Befehl + String message = activLang.emptyCommand; + message = message.replace("%command%", this.prefixIni); + event.getChannel().sendMessage(getAsMention(event) + 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(getAsMention(event) + activLang.language).queue(); + return; + } + else if(MsgParts[1].trim().toLowerCase().equals("en")) { + activLang = langEn; + channelList.put(event.getChannel().getId(), "en"); + event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); + return; + } + + + String[] iniParts = MsgParts[1].trim().toLowerCase().split("[\\+\\-]", 2); + messageInterpreter mI = new messageInterpreter(event, activLang); + rollStufe(Integer.parseInt(iniParts[0])); + if(iniParts.length > 1) { // Nachricht hat kein + Zeichen + + rollStufe(Integer.parseInt(iniParts[0])); + if(MsgParts[1].trim().toLowerCase().matches("\\-")) // Prüft auf Negativen Modifizier wenn Ja + modifier = -1; + dieRoll.addModifier(Integer.parseInt(iniParts[1].trim())*modifier); + } + } + else { + try { + rollStufe(Integer.parseInt(MsgParts[1].trim().toLowerCase())); + } + catch (NumberFormatException e) { + String message = activLang.error; + message = message.replace("%command%", MsgParts[1].trim()); + event.getChannel().sendMessage(getAsMention(event) + message).queue(); + return; + } + } + + if(karma) + dieRoll.addKarma(1); + if(doppelkarma) + dieRoll.addKarma(1); + + if(weiheAnheanger) + dieRoll.addWeiheA(1); + if(doppelweiheAnheanger) + dieRoll.addWeiheA(1); + + if(weiheJunger) + dieRoll.addWeiheJ(1); + if(doppelweiheJunger) + dieRoll.addWeiheJ(1); + + if(weiheVorbild) + dieRoll.addWeiheV(1); + if(doppelweiheVorbild) + dieRoll.addWeiheV(1); + + dieRoll.roll(); + + if(dieRoll.isGlitches()) { // Patzer + outputBox.setColor(Color.red); + } + else { // Erfolg + outputBox.setColor(Color.green); + } + + String message = activLang.resultText; + message = "%rolls%: %hits%"; + message = message.replace("%rolls%", dieRoll.getDiceStructur()).replace("%hits%", String.valueOf(dieRoll.getResultInt())); + + outputBox.setTitle(getEffectiveName(event) + message); + outputBox.setDescription("(" + dieRoll.getResultStructur() + ")"); + + event.getChannel().sendMessage(outputBox.build()).queue(); + + } + catch (NumberFormatException e) { + event.getChannel().sendMessage("Nope").queue(); + } + catch (Exception e) { + System.out.println("problem: " + e.getMessage()); + } + + } + + + + private String getEffectiveName(MessageReceivedEvent event) { + if(event.getMember() == null) { + return ""; + } + return event.getMember().getEffectiveName() + " "; + } + + private String getAsMention(MessageReceivedEvent event) { + if(event.getMember() == null) { + return ""; + } + return event.getMember().getAsMention() + " "; + } + + private void rollStufe(int stufe) { + + dieRoll.reset(); + + switch (stufe) { + case 1: + dieRoll.setW4(1).setModifier(-2); + break; + case 2: + dieRoll.setW4(1).setModifier(-1); + break; + case 3: + dieRoll.setW4(1); + break; + case 4: + dieRoll.setW6(1); + break; + case 5: + dieRoll.setW8(1); + break; + case 6: + dieRoll.setW10(1); + break; + case 7: + dieRoll.setW12(1); + break; + case 8: + dieRoll.setW6(2); + break; + case 9: + dieRoll.setW8(1).setW6(1); + break; + case 10: + dieRoll.setW8(2); + break; + case 11: + dieRoll.setW10(1).setW8(1); + break; + case 12: + dieRoll.setW10(2); + case 13: + dieRoll.setW12(1).setW10(1); + break; + case 14: + dieRoll.setW12(2); + break; + case 15: + dieRoll.setW12(1).setW6(2); + break; + case 16: + dieRoll.setW12(1).setW8(1).setW6(1); + break; + case 17: + dieRoll.setW12(1).setW8(2); + break; + case 18: + dieRoll.setW12(1).setW10(1).setW8(1); + break; + case 19: + dieRoll.setW20(1).setW6(2); + break; + case 20: + dieRoll.setW20(1).setW8(1).setW6(1); + break; + case 21: + dieRoll.setW20(1).setW8(2); + break; + case 22: + dieRoll.setW20(1).setW10(1).setW8(1); + break; + case 23: + dieRoll.setW20(1).setW10(2); + break; + case 24: + dieRoll.setW20(1).setW12(1).setW10(1); + break; + case 25: + dieRoll.setW20(1).setW12(2); + break; + case 26: + dieRoll.setW20(1).setW12(1).setW6(2); + break; + case 27: + dieRoll.setW20(1).setW12(1).setW8(1).setW6(1); + break; + case 28: + dieRoll.setW20(1).setW12(1).setW8(2); + break; + case 29: + dieRoll.setW20(1).setW12(1).setW10(1).setW8(1); + break; + case 30: + dieRoll.setW20(2).setW6(1); + break; + case 31: + dieRoll.setW20(2).setW8(1).setW6(1); + break; + } + + + /* + diceList[30] = "2W20+2W6"; + diceList[31] = "2W20+W8+W6"; + diceList[32] = "2W20+2W8"; + diceList[33] = "2W20+W10+W8"; + diceList[34] = "2W20+2W10"; + diceList[35] = "2W20+W12+W10"; + diceList[36] = "2W20+2W12"; + diceList[37] = "2W20+W12+2W6"; + diceList[38] = "2W20+W12+W8+W6"; + diceList[39] = "2W20+W12+2W8"; + diceList[40] = "2W20+W12+W10+W8"; + */ + + } +} diff --git a/src/main/java/Earthdawn/language.java b/src/main/java/Earthdawn/language.java new file mode 100644 index 0000000..b8153f2 --- /dev/null +++ b/src/main/java/Earthdawn/language.java @@ -0,0 +1,89 @@ +package Earthdawn; + +import java.io.*; +import java.util.Properties; + + +public class language { + + public String language = "Deutsch"; + public String emptyCommand = " der %command% befehl benötigt einen Wert"; + public String error = " Irgend was dummes ist passiert beim Verstehen von %command%"; + public String error2 = " Irgend was dummes ist passiert beim Verstehen von %command%"; + 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 basisresultText = " %numberOfDice%w%diceart%:"; + + public language() { + this.readConfig(); + } + + /** + * + * @param lang Srache + */ + public language(String lang) { + this.readConfig(lang); + } + + public void readConfig() { + this.readConfig("de"); + } + public void readConfig(String lang) { + FileInputStream input = null; + OutputStream output = null; + Properties config = new Properties(); + try { + File f = new File("shadowrun.cfg"); + if (f.isFile() && f.canRead()) { + + input = new FileInputStream("shadowrun.cfg"); + config.load(input); + if(config.containsKey(lang + ".language")) + this.language = config.getProperty(lang + ".language"); + + if(config.containsKey(lang + ".emptyCommand")) + this.emptyCommand = config.getProperty(lang + ".emptyCommand"); + if(config.containsKey(lang + ".error")) + this.error = config.getProperty(lang + ".error"); + if(config.containsKey(lang + ".error2")) + this.error2 = config.getProperty(lang + ".error2"); + if(config.containsKey(lang + ".noNegativ")) + this.noNegativ = config.getProperty(lang + ".noNegativ"); + if(config.containsKey(lang + ".dice")) + this.dice = config.getProperty(lang + ".dice"); + if(config.containsKey(lang + ".resultText")) + this.resultText = config.getProperty(lang + ".resultText"); + if(config.containsKey(lang + ".basisresultText")) + this.resultText = config.getProperty(lang + ".basisresultText"); + + } + else { + output = new FileOutputStream("shadowrun.cfg"); + config.setProperty(lang + ".language", this.language); + config.setProperty(lang + ".emptyCommand", this.emptyCommand); + config.setProperty(lang + ".error", this.error); + config.setProperty(lang + ".error2", this.error2); + config.setProperty(lang + ".noNegativ", this.noNegativ); + config.setProperty(lang + ".dice", this.dice); + config.setProperty(lang + ".resultText", this.resultText); + config.setProperty(lang + ".basisresultText", this.basisresultText); + config.store(output, null); + + } + } catch (Exception e) { + + } + finally { + if (input != null) { + try { + input.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} + diff --git a/src/main/java/Earthdawn/messageInterpreter.java b/src/main/java/Earthdawn/messageInterpreter.java new file mode 100644 index 0000000..ab47fce --- /dev/null +++ b/src/main/java/Earthdawn/messageInterpreter.java @@ -0,0 +1,124 @@ +package Earthdawn; + +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; + +import java.util.Random; +import java.util.Scanner; + +public class messageInterpreter { + + private Integer diceart = 6; + private Integer numberOfDice = 1; + private Integer typ = 0; + private Integer intResult = 0; + + private language activLang; + private MessageReceivedEvent event; + boolean glitches = true; + + public Integer getDiceart() { + return diceart; + } + + public Integer getNumberOfDice() { + return numberOfDice; + } + + public Integer getIntResult() { + return intResult; + } + + + + public boolean isNum() { + if(typ == 1) { + return true; + } + return false; + } + + public boolean isDice() { + if(typ == 2) { + return true; + } + return false; + } + /** + * + * @param event JDA Event + * @param activLang Aktive Sprache + */ + public messageInterpreter(MessageReceivedEvent event, language activLang) { + this.event = event; + this.activLang = activLang; + } + private void reset() { + diceart = 6; + numberOfDice = 1; + typ = 0; + intResult = 0; + } + public void inputInterpreter(String Input) { + reset(); + Scanner sc = new Scanner(Input.trim()); + + StringBuilder resultString = new StringBuilder(""); + + Integer PartValue = 0; + + + int dice1; + + if(sc.hasNextInt()) { // ist eine Zahl + typ = 1; + intResult = Integer.parseInt(Input.trim()); + return; + } + else { + String[] MalusParts= Input.trim().toLowerCase().replace(" ", "").split("\\-"); + for (String MalusPart : MalusParts) { + String[] Parts = MalusPart.split("\\+"); + for (String Part : Parts ) { + PartValue = 0; + sc = new Scanner(Part); + if(sc.hasNextInt()) { + PartValue += Integer.parseInt(Part); + } + else { + if (Part.matches("([0-9]*)[dw]([0-9].*)")) { // format besteh aus (Zahlen)d(Zahlen) oder (Zahlen)w(Zahlen) + String[] diceInterpreter = Part.split("[wd]"); + try { + diceart = Integer.parseInt(diceInterpreter[1]); + numberOfDice = Integer.parseInt(diceInterpreter[0]); + for(int i = 0; i < numberOfDice; i++) { + dice1 = new Random().nextInt(diceart); + resultString.append(dice1+1); + resultString.append(" "); + PartValue += dice1+1; + if(dice1 > 0) + glitches = false; + } + + } catch (NumberFormatException e) { + String message = activLang.error; + message = message.replace("%command%", Input.trim().toLowerCase()); + typ = -1; + throw new IllegalArgumentException( message ); + } + } + else { + String message = activLang.error; + message = message.replace("%command%", Input.trim().toLowerCase()); + typ = -1; + throw new IllegalArgumentException( message ); + } + } + } + if(intResult == 0) + intResult = PartValue; + else + intResult -= PartValue; + } + } + } +} diff --git a/src/main/java/Earthdawn/step.java b/src/main/java/Earthdawn/step.java new file mode 100644 index 0000000..e084493 --- /dev/null +++ b/src/main/java/Earthdawn/step.java @@ -0,0 +1,292 @@ +package Earthdawn; + +import java.util.Random; + +public class step { + + private int w4; + private int w6; + private int w8; + private int w10; + private int w12; + private int w20; + private int karma; + private int weiheA; + private int weiheJ; + private int weiheV; + + private boolean glitches = true; + private String diceStructur = ""; + private String diceResult = ""; + private int resultInt = 0; + + private int modifier = 0; + + StringBuilder resultStructur = new StringBuilder(""); + + + public int getW4() { + return w4; + } + + public step setW4(int w4) { + this.w4 = w4; + return this; + } + + public int getW6() { + return w6; + } + + public step setW6(int w6) { + this.w6 = w6; + return this; + } + + public int getW8() { + return w8; + } + + public step setW8(int w8) { + this.w8 = w8; + return this; + } + + public int getW10() { + return w10; + } + + public step setW10(int w10) { + this.w10 = w10; + return this; + } + + public int getW12() { + return w12; + } + + public step setW12(int w12) { + this.w12 = w12; + return this; + } + + public int getW20() { + return w20; + } + + public step setW20(int w20) { + this.w20 = w20; + return this; + } + + public void addW4(int w4) { + this.w4 += w4; + } + + public void addW6(int w6) { + this.w6 += w6; + } + + public void addW8(int w8) { + this.w8 += w8; + } + + public void addW10(int w10) { + this.w10 += w10; + } + + public void addW12(int w12) { + this.w12 += w12; + } + + public void addW20(int w20) { + this.w20 += w20; + } + + public int getModifier() { + return modifier; + } + + public int getKarma() { + return karma; + } + + public step setKarma(int karma) { + this.karma = karma; + return this; + } + + public step addKarma(int karma) { + this.karma += karma; + return this; + } + + public step addWeiheJ(int weiheJ) { + this.weiheJ += weiheJ; + return this; + } + + public step addWeiheA(int weiheA) { + this.weiheA += weiheA; + return this; + } + public step addWeiheV(int weiheV) { + this.weiheV += weiheV; + return this; + } + + public step setModifier(int modifier) { + this.modifier = modifier; + return this; + } + + public step addModifier(int modifier) { + this.modifier += modifier; + return this; + } + + public boolean isGlitches() { + return glitches; + } + + public String getDiceStructur() { + return diceStructur; + } + + public String getDiceResult() { + return diceResult; + } + + public int getResultInt() { + return resultInt; + } + + + public String getResultStructur() { + return resultStructur.toString(); + } + + public step reset() { + w4 = 0; + w6 = 0; + w8 = 0; + w10 = 0; + w12 = 0; + w20 = 0; + karma = 0; + weiheJ = 0; + weiheA = 0; + weiheV = 0; + + modifier = 0; + + glitches = true; + diceStructur = ""; + diceResult = ""; + resultInt = 0; + resultStructur = new StringBuilder(""); + return this; + } + + public void roll() { + + StringBuilder resultConstruction = new StringBuilder(""); + + if(w4 > 0) { + rollDice(w4, 4); + if(resultConstruction.length() > 0) + resultConstruction.append("+"); + resultConstruction.append(w4).append("w4"); + } + if(w6 > 0) { + rollDice(w6, 6); + if(resultConstruction.length() > 0) + resultConstruction.append("+"); + resultConstruction.append(w6).append("w6"); + } + if(w8 > 0) { + rollDice(w8, 8); + if(resultConstruction.length() > 0) + resultConstruction.append("+"); + resultConstruction.append(w8).append("w8"); + } + if(w10 > 0) { + rollDice(w10, 10); + if(resultConstruction.length() > 0) + resultConstruction.append("+"); + resultConstruction.append(w10).append("w10"); + } + if(w12 > 0) { + rollDice(w12, 12); + if(resultConstruction.length() > 0) + resultConstruction.append("+"); + resultConstruction.append(w12).append("w12"); + } + if(w20 > 0) { + rollDice(w20, 20); + if(resultConstruction.length() > 0) + resultConstruction.append(" + "); + resultConstruction.append(w20).append("w20"); + } + + if(karma > 0) { + rollDice(karma, 6); + if(resultConstruction.length() > 0) + resultConstruction.append(" + "); + resultConstruction.append(karma).append("w6"); + } + + if(weiheJ > 0) { + rollDice(weiheJ, 4); + if(resultConstruction.length() > 0) + resultConstruction.append(" + "); + resultConstruction.append(weiheJ).append("w4"); + } + + if(weiheA > 0) { + rollDice(weiheA, 6); + if(resultConstruction.length() > 0) + resultConstruction.append(" + "); + resultConstruction.append(weiheA).append("w6"); + } + + if(weiheV > 0) { + rollDice(weiheV, 8); + if(resultConstruction.length() > 0) + resultConstruction.append(" + "); + resultConstruction.append(weiheV).append("w8"); + } + + if(modifier != 0) { + resultInt += modifier; + if(modifier > 0) + resultConstruction.append(" + "); + + + resultConstruction.append(modifier); + } + + diceStructur = resultConstruction.toString(); + + if(resultInt <= 0) + resultInt = 1; + } + + private void rollDice(int numberOfDice, int diceart) { + int dice; + for(int i = 0; i < numberOfDice; i++) { + dice = new Random().nextInt(diceart); + if(resultStructur.length() > 0) { + resultStructur.append(" "); + } + resultStructur.append(dice+1); + resultStructur.append("/"); + resultStructur.append(diceart); + resultInt += dice+1; + if(dice+1 == diceart) + i--; + if(dice > 0) + glitches = false; + } + } +} From b68129b23bb75cf7b3d4f7b8fd0c094d0f34d232 Mon Sep 17 00:00:00 2001 From: Ocame Date: Sun, 6 Jun 2021 01:20:40 +0200 Subject: [PATCH 26/28] update --- src/main/java/core/Main.java | 44 ++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/main/java/core/Main.java b/src/main/java/core/Main.java index 6e94e8a..ae13b5c 100755 --- a/src/main/java/core/Main.java +++ b/src/main/java/core/Main.java @@ -1,13 +1,15 @@ package core; -import Serenity.balance; +//import Serenity.balance; import Shadowrun.dice; -import net.dv8tion.jda.core.JDA; -import net.dv8tion.jda.core.JDABuilder; -import net.dv8tion.jda.core.AccountType; -import net.dv8tion.jda.core.OnlineStatus; -import net.dv8tion.jda.core.entities.Game; +import Socket.shadowrun; +import javafx.scene.effect.Shadow; +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.JDABuilder; +import net.dv8tion.jda.api.OnlineStatus; +import net.dv8tion.jda.api.entities.*; + import javax.security.auth.login.LoginException; @@ -17,22 +19,24 @@ public class Main { public static void main(String[] args) { // Insert your bot's token here - //String token = "NTQ2ODk5MzYwMDEzODc3MjU4.D0u8wA.VfA2vJzundVhCl1-ibDiBaKuA8w"; + String token = "NTQ2ODk5MzYwMDEzODc3MjU4.D0u8wA.VfA2vJzundVhCl1-ibDiBaKuA8w"; // iro - String token = "NTQ2NzEwODUwOTIxMjk5OTc5.D0sL6A.1fUd5iBr3eo2tbPXofEqyumDm6w"; - - JDABuilder builder = new JDABuilder(AccountType.BOT); - - builder.setToken(token); - builder.setAutoReconnect(true); - builder.setStatus(OnlineStatus.ONLINE); - builder.setGame(Game.playing("mit den Würfeln")); - builder.addEventListener(new balance()); - builder.addEventListener(new dice() ); - + //String token = "NTQ2NzEwODUwOTIxMjk5OTc5.D0sL6A.1fUd5iBr3eo2tbPXofEqyumDm6w"; try { - JDA jda = builder.build(); - Thread thread = new Thread(new Socket.shadowrun(jda)); + + JDA jda = JDABuilder.createDefault(token) + .setActivity(Activity.playing("mit den Würfeln")) + .setStatus(OnlineStatus.ONLINE) + //.addEventListeners(new dice()) + .addEventListeners(new Earthdawn.dice()) + .addEventListeners(new Simpleroll.dice()) + .addEventListeners(new Shadowrun.dice()) + .addEventListeners(new Engel.dice()) + .addEventListeners(new Keeproll.dice()) + .setAutoReconnect(true) + .build(); + + Thread thread = new Thread(new shadowrun(jda)); thread.start(); } From 06cd082ee28d1d8717670cd1a3086f0282f30fa8 Mon Sep 17 00:00:00 2001 From: Ocame Date: Sun, 6 Jun 2021 01:21:02 +0200 Subject: [PATCH 27/28] update --- build.gradle | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 4b4e38b..f58aa71 100755 --- a/build.gradle +++ b/build.gradle @@ -4,9 +4,10 @@ plugins { } -version '0.5' +version '0.8' -def jdaVersion = '3.8.3_460' +//def jdaVersion = '3.8.3_460' +def jdaVersion = '4.2.0_168' apply plugin: 'java' @@ -24,8 +25,9 @@ repositories { dependencies { compile "net.dv8tion:JDA:$jdaVersion" - compile "org.slf4j:slf4j-simple:1.6.1" + compile "org.slf4j:slf4j-simple:1.7.25" compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.6' + compile "org.json:json:20141113" } repositories { From 4a999d98417913eb69d97fa59237fcd02e2eed62 Mon Sep 17 00:00:00 2001 From: Ocame Date: Thu, 16 Feb 2023 02:30:38 +0100 Subject: [PATCH 28/28] Update ED und JDA --- build.gradle | 6 +- shadowrun.cfg | 3 +- src/main/java/DB/base.java | 4 +- src/main/java/Earthdawn/dice.java | 135 ++++---- src/main/java/Engel/dice.java | 4 +- src/main/java/Keeproll/dice.java | 6 +- .../{balance.java => balance.java.Deprecated} | 14 +- src/main/java/Shadowrun/dice.java | 13 +- src/main/java/Simpleroll/dice.java | 132 ++------ src/main/java/Simpleroll/diceOld.java | 238 ++++++++++++++ .../java/Simpleroll/messageInterpreter.java | 247 ++++++++++---- src/main/java/Simpleroll/subpart.java | 69 ++++ src/main/java/Socket/shadowrun.java | 7 +- src/main/java/Vampire/dice.java | 302 ++++++++++++++++++ src/main/java/Vampire/result.java | 105 ++++++ src/main/java/core/Main.java | 22 +- 16 files changed, 1051 insertions(+), 256 deletions(-) rename src/main/java/Serenity/{balance.java => balance.java.Deprecated} (97%) mode change 100755 => 100644 create mode 100644 src/main/java/Simpleroll/diceOld.java create mode 100644 src/main/java/Simpleroll/subpart.java create mode 100644 src/main/java/Vampire/dice.java create mode 100644 src/main/java/Vampire/result.java diff --git a/build.gradle b/build.gradle index f58aa71..1fa6834 100755 --- a/build.gradle +++ b/build.gradle @@ -4,10 +4,10 @@ plugins { } -version '0.8' +version '0.10' //def jdaVersion = '3.8.3_460' -def jdaVersion = '4.2.0_168' +def jdaVersion = '5.0.0-alpha.20' apply plugin: 'java' @@ -25,7 +25,7 @@ repositories { dependencies { compile "net.dv8tion:JDA:$jdaVersion" - compile "org.slf4j:slf4j-simple:1.7.25" + compile "org.slf4j:slf4j-simple:1.7.36" compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.6' compile "org.json:json:20141113" } diff --git a/shadowrun.cfg b/shadowrun.cfg index 0265936..41c2848 100755 --- a/shadowrun.cfg +++ b/shadowrun.cfg @@ -1,6 +1,7 @@ #Sun Feb 24 19:48:19 CET 2019 de.error=\ Irgend was dummes ist passiert beim Verstehen von %command% de.resultText=\ %numberOfDice%w%diceart% %EdgeDice%\:\tErfolge\: %hits%\tMisserfolge\: %oneHits% +de.resultTextExtent=\ %numberOfDice%w%diceart% %EdgeDice%\:\tErfolge\: %hits%\tMisserfolge\: %oneHits% de.dice=w de.error2=\ Irgendwas dummes ist passiert beim Verstehen von %command% de.noNegativ=\ es darf kein Negativen Wurf geben @@ -21,4 +22,4 @@ db.host=localhost db.port=3306 db.database=shadowrun_log db.name=root -db.pw=root \ No newline at end of file +db.pw= \ No newline at end of file diff --git a/src/main/java/DB/base.java b/src/main/java/DB/base.java index da02563..2929965 100755 --- a/src/main/java/DB/base.java +++ b/src/main/java/DB/base.java @@ -1,6 +1,6 @@ package DB; -import net.dv8tion.jda.core.JDA; +import net.dv8tion.jda.api.JDA; import javax.security.auth.login.LoginException; import java.io.FileInputStream; @@ -68,7 +68,7 @@ public class base { } catch (SQLException e) { active = false; - e.printStackTrace(); + //e.printStackTrace(); } } diff --git a/src/main/java/Earthdawn/dice.java b/src/main/java/Earthdawn/dice.java index 99cf6df..6fc35ce 100644 --- a/src/main/java/Earthdawn/dice.java +++ b/src/main/java/Earthdawn/dice.java @@ -3,8 +3,8 @@ package Earthdawn; import Shadowrun.db_connect; import Shadowrun.help; import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.entities.ChannelType; import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.ChannelType; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.react.MessageReactionAddEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; @@ -41,10 +41,10 @@ public class dice extends ListenerAdapter { public dice() { this.prefixSr = "/ed"; - this.prefixIni = "/ini"; + //this.prefixIni = "/ini"; - helpDe.add("Alle Befehle können in einen Channel geschrieben werden oder per Direkt Nachricht gesender werden"); + helpDe.add("Alle Befehle können in einen Channel geschrieben werden oder per Direkt Nachricht gesendet"); 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." + "wird aber kein Erfolg gewürfelt zählt dies als Kritischer Patzer und die Markierung wird Rot **Wichtig: Vor- und Nachteile die Einfluss auf die Patzer Changse haben werden nicht berücksichtigt"); @@ -53,7 +53,7 @@ public class dice extends ListenerAdapter { helpDe.add(this.prefixSr + " Zahl_1 + Zahl_2", "Würfelt Zahl_2 x W6 und addiert Zahl_1 hinzu, um die Initative zu bestimmen"); - helpDe.add(this.prefixIni + " Zahl_1 + Zahl_2", "Synonym für " + this.prefixSr + " Zahl_1 + Zahl_2"); + //helpDe.add(this.prefixIni + " Zahl_1 + Zahl_2", "Synonym für " + this.prefixSr + " Zahl_1 + Zahl_2"); this.db = new db_connect(); @@ -139,7 +139,7 @@ public class dice extends ListenerAdapter { 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(); + event.getChannel().sendMessage(test.build().toString()).queue(); } catch (NumberFormatException e) { @@ -181,9 +181,8 @@ public class dice extends ListenerAdapter { int modifier = 1; try { - if(event.getMessage().getContentRaw().matches(".*[ \\+jav].*")) { // es wurden andere zeichen als Zahlen gefunden - - } + dieRoll.reset(); + // Alte Erkennung für Karma ect // Prüfen ob Karma wurf if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"+") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" +")) { karma = true; @@ -237,19 +236,20 @@ public class dice extends ListenerAdapter { String[] MsgParts = ContentRaw.split(" ", 2); if(MsgParts.length < 2) { // Leerer Befehl String message = activLang.emptyCommand; - message = message.replace("%command%", this.prefixIni); + message = message.replace("%command%", this.prefixSr); event.getChannel().sendMessage(getAsMention(event) + message).queue(); return; } - + String DicePart = MsgParts[1].trim().toLowerCase(); if(MsgParts[1].trim().matches(".*[^0-9].*")) { // es wurden andere zeichen als Zahlen gefunden - if(MsgParts[1].trim().toLowerCase().equals("de")) { + + if(DicePart.equals("de")) { activLang = langDe; channelList.put(event.getChannel().getId(), "de"); event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); return; } - else if(MsgParts[1].trim().toLowerCase().equals("en")) { + else if(DicePart.equals("en")) { activLang = langEn; channelList.put(event.getChannel().getId(), "en"); event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); @@ -257,20 +257,39 @@ public class dice extends ListenerAdapter { } - String[] iniParts = MsgParts[1].trim().toLowerCase().split("[\\+\\-]", 2); + for (int i = 0; i < DicePart.length(); i++) { + if (DicePart.charAt(i) == 'k') { + dieRoll.addKarma(1); + } + else if (DicePart.charAt(i) == 'j') { + dieRoll.addWeiheA(1); + } + else if (DicePart.charAt(i) == 'a') { + dieRoll.addWeiheJ(1); + } + else if (DicePart.charAt(i) == 'v') { + dieRoll.addWeiheV(1); + } + } + DicePart = DicePart.replace("k", ""); + DicePart = DicePart.replace("j", ""); + DicePart = DicePart.replace("a", ""); + DicePart = DicePart.replace("v", ""); + + String[] iniParts = DicePart.split("[\\+\\-]", 2); messageInterpreter mI = new messageInterpreter(event, activLang); - rollStufe(Integer.parseInt(iniParts[0])); + rollStufe(Integer.parseInt(iniParts[0].replaceAll("[^0-9]", ""))); if(iniParts.length > 1) { // Nachricht hat kein + Zeichen - rollStufe(Integer.parseInt(iniParts[0])); - if(MsgParts[1].trim().toLowerCase().matches("\\-")) // Prüft auf Negativen Modifizier wenn Ja + rollStufe(Integer.parseInt(iniParts[0].replaceAll("[^0-9]", ""))); + if(DicePart.matches("\\-")) // Prüft auf Negativen Modifizier wenn Ja modifier = -1; dieRoll.addModifier(Integer.parseInt(iniParts[1].trim())*modifier); } } else { try { - rollStufe(Integer.parseInt(MsgParts[1].trim().toLowerCase())); + rollStufe(Integer.parseInt(DicePart)); } catch (NumberFormatException e) { String message = activLang.error; @@ -316,7 +335,7 @@ public class dice extends ListenerAdapter { outputBox.setTitle(getEffectiveName(event) + message); outputBox.setDescription("(" + dieRoll.getResultStructur() + ")"); - event.getChannel().sendMessage(outputBox.build()).queue(); + event.getChannel().sendMessageEmbeds(outputBox.build()).queue(); } catch (NumberFormatException e) { @@ -346,8 +365,6 @@ public class dice extends ListenerAdapter { private void rollStufe(int stufe) { - dieRoll.reset(); - switch (stufe) { case 1: dieRoll.setW4(1).setModifier(-2); @@ -402,45 +419,45 @@ public class dice extends ListenerAdapter { case 18: dieRoll.setW12(1).setW10(1).setW8(1); break; - case 19: - dieRoll.setW20(1).setW6(2); - break; - case 20: - dieRoll.setW20(1).setW8(1).setW6(1); - break; - case 21: - dieRoll.setW20(1).setW8(2); - break; - case 22: - dieRoll.setW20(1).setW10(1).setW8(1); - break; - case 23: - dieRoll.setW20(1).setW10(2); - break; - case 24: - dieRoll.setW20(1).setW12(1).setW10(1); - break; - case 25: - dieRoll.setW20(1).setW12(2); - break; - case 26: - dieRoll.setW20(1).setW12(1).setW6(2); - break; - case 27: - dieRoll.setW20(1).setW12(1).setW8(1).setW6(1); - break; - case 28: - dieRoll.setW20(1).setW12(1).setW8(2); - break; - case 29: - dieRoll.setW20(1).setW12(1).setW10(1).setW8(1); - break; - case 30: - dieRoll.setW20(2).setW6(1); - break; - case 31: - dieRoll.setW20(2).setW8(1).setW6(1); - break; + default: + int w20 = 0; + w20 = (int) ((stufe-8)/11); + switch ((stufe-8)%11) { + case 0: + dieRoll.setW20(w20).setW6(2); + break; + case 1: + dieRoll.setW20(w20).setW8(1).setW6(1); + break; + case 2: + dieRoll.setW20(w20).setW8(2); + break; + case 3: + dieRoll.setW20(w20).setW10(1).setW8(1); + break; + case 4: + dieRoll.setW20(w20).setW10(2); + break; + case 5: + dieRoll.setW20(w20).setW12(1).setW10(1); + break; + case 6: + dieRoll.setW20(w20).setW12(2); + break; + case 7: + dieRoll.setW20(w20).setW12(1).setW6(2); + break; + case 8: + dieRoll.setW20(w20).setW12(1).setW8(1).setW6(1); + break; + case 9: + dieRoll.setW20(w20).setW12(1).setW8(2); + break; + case 10: + dieRoll.setW20(w20).setW12(1).setW10(1).setW8(1); + break; + } + } diff --git a/src/main/java/Engel/dice.java b/src/main/java/Engel/dice.java index 728cf3d..5839db7 100644 --- a/src/main/java/Engel/dice.java +++ b/src/main/java/Engel/dice.java @@ -4,7 +4,7 @@ import Shadowrun.db_connect; import Simpleroll.help; import Simpleroll.language; import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.entities.ChannelType; +import net.dv8tion.jda.api.entities.channel.ChannelType; import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; @@ -126,7 +126,7 @@ public class dice extends ListenerAdapter { result.append("\n").append(activArcanaList.getExplain()); outputBox.setDescription(result.toString().trim()); outputBox.setImage(activArcanaList.getImage()); - event.getChannel().sendMessage(outputBox.build()).queue(); + event.getChannel().sendMessageEmbeds(outputBox.build()).queue(); } catch (NumberFormatException e) { diff --git a/src/main/java/Keeproll/dice.java b/src/main/java/Keeproll/dice.java index 372dc25..c6379e3 100644 --- a/src/main/java/Keeproll/dice.java +++ b/src/main/java/Keeproll/dice.java @@ -4,7 +4,7 @@ import Shadowrun.db_connect; import Simpleroll.help; import Simpleroll.language; import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.entities.ChannelType; +import net.dv8tion.jda.api.entities.channel.ChannelType; import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; @@ -294,7 +294,7 @@ public class dice extends ListenerAdapter { description.append(rolls[i].getText()); } outputBox.setDescription("(" + description + ")"); - event.getChannel().sendMessage(outputBox.build()).queue(); + event.getChannel().sendMessageEmbeds(outputBox.build()).queue(); } catch (NumberFormatException e) { event.getChannel().sendMessage("Nope").queue(); @@ -314,6 +314,6 @@ public class dice extends ListenerAdapter { "Ab nur **1€** pro Monat steigt die Changse, als dank für die Hilfe, um **1%** ein besseres Ergebnis zu bekommen.\n\n"); description.append("Für mehr Infos: https://bitly.com/98K8eH"); outputBox.setDescription(description); - event.getChannel().sendMessage(outputBox.build()).queue(); + event.getChannel().sendMessageEmbeds(outputBox.build()).queue(); } } diff --git a/src/main/java/Serenity/balance.java b/src/main/java/Serenity/balance.java.Deprecated old mode 100755 new mode 100644 similarity index 97% rename from src/main/java/Serenity/balance.java rename to src/main/java/Serenity/balance.java.Deprecated index ee2b194..b0119f7 --- a/src/main/java/Serenity/balance.java +++ b/src/main/java/Serenity/balance.java.Deprecated @@ -1,9 +1,9 @@ package Serenity; -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.entities.channel.ChannelType; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; import org.json.JSONArray; import org.json.JSONObject; @@ -87,9 +87,9 @@ public class balance extends ListenerAdapter { try { // Zerlgen der Anfrage String parameter = ""; - if (event.getMessage().getMentionedUsers().size() > 0) { - if (IdConvert.containsKey(event.getMessage().getMentionedUsers().get(0).getId())) - parameter = "?id=" + (IdConvert.get(event.getMessage().getMentionedUsers().get(0).getId())); + if (event.getMessage().getMentions().getUsers() .size() > 0) { + if (IdConvert.containsKey(event.getMessage().getMentions().getUsers().get(0).getId())) + parameter = "?id=" + (IdConvert.get(event.getMessage().getMentions().getUsers().get(0).getId())); } else { parameter = "?id=1"; } diff --git a/src/main/java/Shadowrun/dice.java b/src/main/java/Shadowrun/dice.java index 7e124b4..6377bac 100755 --- a/src/main/java/Shadowrun/dice.java +++ b/src/main/java/Shadowrun/dice.java @@ -2,14 +2,15 @@ package Shadowrun; 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.channel.ChannelType; import net.dv8tion.jda.api.entities.Member; -import net.dv8tion.jda.api.entities.MessageChannel; +import net.dv8tion.jda.api.entities.channel.ChannelType; import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel; 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 net.dv8tion.jda.api.requests.restaction.*; import java.awt.*; @@ -186,7 +187,7 @@ public class dice extends ListenerAdapter { 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(); + event.getChannel().sendMessageEmbeds(test.build()).queue(); } catch (NumberFormatException e) { @@ -407,7 +408,7 @@ public class dice extends ListenerAdapter { long[] messageId = new long[1]; boolean finalEdge = edge; String finalRollData = rollString.toString(); - channel.sendMessage(outputBox.build()).queue(message1 -> { + channel.sendMessageEmbeds(outputBox.build()).queue(message1 -> { if(!finalEdge && type == 0) { //message1.addReaction("sr:517528156014510111").queue(); } @@ -539,7 +540,7 @@ public class dice extends ListenerAdapter { outputBox.setDescription(String.valueOf(iniBase) + " + (" + result.toString().trim().replace(" ", "+") + ")"); - event.getChannel().sendMessage(outputBox.build()).queue(); + event.getChannel().sendMessageEmbeds(outputBox.build()).queue(); } catch (NumberFormatException e) { diff --git a/src/main/java/Simpleroll/dice.java b/src/main/java/Simpleroll/dice.java index 518402f..af40f77 100644 --- a/src/main/java/Simpleroll/dice.java +++ b/src/main/java/Simpleroll/dice.java @@ -2,21 +2,15 @@ package Simpleroll; import Shadowrun.db_connect; import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.entities.ChannelType; import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.ChannelType; 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 java.awt.*; -import java.io.IOException; -import java.io.InputStream; -import java.security.SecureRandom; import java.util.HashMap; import java.util.Map; -import java.util.Properties; import java.util.Random; -import java.util.concurrent.ThreadLocalRandom; public class dice extends ListenerAdapter { @@ -59,12 +53,10 @@ public class dice extends ListenerAdapter { 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; + case "de": default: activLang = langDe; @@ -100,15 +92,6 @@ public class dice extends ListenerAdapter { EmbedBuilder outputBox = new EmbedBuilder(); - int[] verteilung = new int[6]; - int dice1; - int numberOfDice = 1; - int diceart = 6; - StringBuilder result = new StringBuilder(""); - - int hits = 0; - - try { String ContentRaw = event.getMessage().getContentRaw(); @@ -124,96 +107,40 @@ public class dice extends ListenerAdapter { } - 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(getAsMention(event) + activLang.language).queue(); - db.setChannelSettings(event.getChannel().getId(), "de", event.getGuild().getId(), event.getChannel().getName()); - return; - } - else if(MsgParts[1].trim().toLowerCase().equals("en")) { - activLang = langEn; - channelList.put(event.getChannel().getId(), "en"); - event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); - db.setChannelSettings(event.getChannel().getId(), "en", event.getGuild().getId(), event.getChannel().getName()); - 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(getAsMention(event) + message).queue(); - return; - } - } - else { - String message = activLang.error; - message = message.replace("%command%", MsgParts[1].trim()); - event.getChannel().sendMessage(getAsMention(event) + message).queue(); - return; - } + if(MsgParts[1].trim().toLowerCase().equals("de")) { + activLang = langDe; + channelList.put(event.getChannel().getId(), "de"); + event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); + db.setChannelSettings(event.getChannel().getId(), "de", event.getGuild().getId(), event.getChannel().getName()); + 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(getAsMention(event) + message).queue(); - return; - } - } - - - if(numberOfDice <= 0) { - String message = activLang.noNegativ; - event.getChannel().sendMessage(getAsMention(event) + message).queue(); + else if(MsgParts[1].trim().toLowerCase().equals("en")) { + activLang = langEn; + channelList.put(event.getChannel().getId(), "en"); + event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); + db.setChannelSettings(event.getChannel().getId(), "en", event.getGuild().getId(), event.getChannel().getName()); return; } - for(int i = 0; i < numberOfDice; i++) { - dice1 = new Random().nextInt(diceart); - verteilung[dice1]++; - result.append(dice1+1); - result.append(" "); - } + messageInterpreter mI = new messageInterpreter(activLang, MsgParts[1]); + + outputBox.setColor(Color.green); - String addition = ""; - String message = activLang.basisresultText; - //%numberOfDice%%dice%%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%"; - message = message.replace("%numberOfDice%", String.valueOf(numberOfDice)).replace("%diceart%", String.valueOf(diceart)); - outputBox.setTitle(getEffectiveName(event) + message); + outputBox.setTitle(getEffectiveName(event) + " " + mI.getHeaderOutput() + ": " + mI.getResult()); - outputBox.setDescription("(" + result.toString().trim() + ")"); + if(mI.isComplex()) + outputBox.setDescription(mI.getResolveOutput() + "\n" + mI.getBodyOutput()); + else + outputBox.setDescription(mI.getBodyOutput()); - 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(); - /*event.getChannel().sendMessage(outputBox.build()).queue(message1 -> { - message1.addReaction("sr:517528156014510111").queue(); - message1.addReaction("test:517545127376322596").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()); - }*/ + event.getChannel().sendMessageEmbeds(outputBox.build()).queue(); + + System.runFinalization(); + System.gc(); + } catch (NumberFormatException e) { event.getChannel().sendMessage("Nope").queue(); @@ -229,7 +156,7 @@ public class dice extends ListenerAdapter { StringBuilder result = new StringBuilder(""); - outputBox.setTitle("Hallo ich exestieren aktuell in der Version: 0.8\n"); + outputBox.setTitle("Hallo ich exestieren aktuell in der Version: 0.10\n"); result.append("Ich kann aktuell folgent Wüfe:\n"); result.append("**/r** bzw. **/roll** für Allgemeine würfe. Ohne eine angabe vom Würfeltyp wird ein W6 benuzt\n\n"); @@ -239,6 +166,9 @@ public class dice extends ListenerAdapter { result.append("**/l5r** bzw **/keep** für Legend of the 5 Rings\n"); outputBox.setDescription(result); - event.getChannel().sendMessage(outputBox.build()).queue(); + event.getChannel().sendMessageEmbeds(outputBox.build()).queue(); } + + + //7d4+19+1d7 } diff --git a/src/main/java/Simpleroll/diceOld.java b/src/main/java/Simpleroll/diceOld.java new file mode 100644 index 0000000..acbb571 --- /dev/null +++ b/src/main/java/Simpleroll/diceOld.java @@ -0,0 +1,238 @@ +package Simpleroll; + +import Shadowrun.db_connect; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.channel.ChannelType; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; + +import java.awt.*; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +public class diceOld extends ListenerAdapter { + + private String prefixR; + private String prefixRoll; + private String prefixHelp; + + private language langDe = new language("de"); + private language langEn = new language("en"); + + private help helpDe = new help("de"); + private help helpEn = new help("En"); + + private language activLang; + private help activHelp; + + private db_connect db; + + private Map channelList = new HashMap<>(); + + + public diceOld() { + this.prefixR = "/roll"; + this.prefixRoll = "/r "; + this.prefixHelp = "/help"; + + this.db = new db_connect(); + } + + @Override + public void onMessageReceived(MessageReceivedEvent event) { + if ((!event.getMessage().getContentRaw().startsWith(this.prefixR) + && !event.getMessage().getContentRaw().startsWith(this.prefixRoll) && !event.getMessage().getContentRaw().startsWith(this.prefixHelp)) + || (event.getChannelType() != ChannelType.TEXT && event.getChannelType() != ChannelType.PRIVATE)) { + return; + } + + 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; + + } + User author = event.getAuthor(); + if (event.getMessage().getContentRaw().startsWith(this.prefixR) || event.getMessage().getContentRaw().startsWith(this.prefixRoll)) + this.roll(event); + if (event.getMessage().getContentRaw().startsWith(this.prefixHelp)) + this.help(event); + } + + + private String getEffectiveName(MessageReceivedEvent event) { + if(event.getMember() == null) { + return ""; + } + return event.getMember().getEffectiveName() + " "; + } + + private String getAsMention(MessageReceivedEvent event) { + if(event.getMember() == null) { + return ""; + } + return event.getMember().getAsMention() + " "; + } + + /** + * 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; + + + try { + + String ContentRaw = event.getMessage().getContentRaw(); + + // Prüfen ob Leerer Command gesendet wird + String[] MsgParts = ContentRaw.replace(" ", " ").split(" ", 2); + + if(MsgParts.length < 2) { + String message = activLang.emptyCommand; + message = message.replace("%command%", this.prefixRoll); + event.getChannel().sendMessage(getAsMention(event) + 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(getAsMention(event) + activLang.language).queue(); + db.setChannelSettings(event.getChannel().getId(), "de", event.getGuild().getId(), event.getChannel().getName()); + return; + } + else if(MsgParts[1].trim().toLowerCase().equals("en")) { + activLang = langEn; + channelList.put(event.getChannel().getId(), "en"); + event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); + db.setChannelSettings(event.getChannel().getId(), "en", event.getGuild().getId(), event.getChannel().getName()); + 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(getAsMention(event) + message).queue(); + return; + } + } + else { + String message = activLang.error; + message = message.replace("%command%", MsgParts[1].trim()); + event.getChannel().sendMessage(getAsMention(event) + 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(getAsMention(event) + message).queue(); + return; + } + } + + + if(numberOfDice <= 0) { + String message = activLang.noNegativ; + event.getChannel().sendMessage(getAsMention(event) + message).queue(); + return; + } + + for(int i = 0; i < numberOfDice; i++) { + dice1 = new Random().nextInt(diceart); + verteilung[dice1]++; + result.append(dice1+1); + result.append(" "); + } + outputBox.setColor(Color.green); + String addition = ""; + + String message = activLang.basisresultText; + //%numberOfDice%%dice%%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%"; + message = message.replace("%numberOfDice%", String.valueOf(numberOfDice)).replace("%diceart%", String.valueOf(diceart)); + outputBox.setTitle(getEffectiveName(event) + 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().sendMessageEmbeds(outputBox.build()).queue(); + /*event.getChannel().sendMessage(outputBox.build()).queue(message1 -> { + message1.addReaction("sr:517528156014510111").queue(); + message1.addReaction("test:517545127376322596").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()); + }*/ + } + catch (NumberFormatException e) { + event.getChannel().sendMessage("Nope").queue(); + } + catch (Exception e) { + System.out.println("problem: " + e.getMessage()); + } + + } + + private void help(MessageReceivedEvent event) { + EmbedBuilder outputBox = new EmbedBuilder(); + StringBuilder result = new StringBuilder(""); + + + outputBox.setTitle("Hallo ich exestieren aktuell in der Version: 0.8\n"); + + result.append("Ich kann aktuell folgent Wüfe:\n"); + result.append("**/r** bzw. **/roll** für Allgemeine würfe. Ohne eine angabe vom Würfeltyp wird ein W6 benuzt\n\n"); + result.append("**/sr** für Shadowrun 5\n\n"); + result.append("**/ed** für Earthdawn 4\n\n"); + result.append("**/e** bzw **/engel** für die Arcane Version von Engel\n\n"); + result.append("**/l5r** bzw **/keep** für Legend of the 5 Rings\n"); + + outputBox.setDescription(result); + event.getChannel().sendMessage(outputBox.build().toString()).queue(); + } +} diff --git a/src/main/java/Simpleroll/messageInterpreter.java b/src/main/java/Simpleroll/messageInterpreter.java index c3b43c3..027260e 100644 --- a/src/main/java/Simpleroll/messageInterpreter.java +++ b/src/main/java/Simpleroll/messageInterpreter.java @@ -2,89 +2,226 @@ package Simpleroll; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; -import java.util.Scanner; +import java.util.Random; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class messageInterpreter { - private Integer diceart = 6; - private Integer numberOfDice = 1; - private Integer typ = 0; private Integer intResult = 0; - private language activLang; - private MessageReceivedEvent event; + private final language activLang; + private final StringBuilder bodyOutput; - public Integer getDiceart() { - return diceart; - } + private final StringBuilder resolveOutput; - public Integer getNumberOfDice() { - return numberOfDice; - } + private final StringBuilder headerOutput; + + private boolean isComplex; public Integer getIntResult() { return intResult; } - public boolean isNum() { - if(typ == 1) { - return true; - } - return false; - } - public boolean isDice() { - if(typ == 2) { - return true; - } - return false; - } /** * - * @param event JDA Event * @param activLang Aktive Sprache */ - public messageInterpreter(MessageReceivedEvent event, language activLang) { - this.event = event; + public messageInterpreter(language activLang) { this.activLang = activLang; + bodyOutput = new StringBuilder(); + resolveOutput = new StringBuilder(); + headerOutput = new StringBuilder(); + isComplex = false; } - private void reset() { - diceart = 6; - numberOfDice = 1; - typ = 0; - intResult = 0; + public messageInterpreter(language activLang, String Input) { + this(activLang); + inputInterpreter(Input); } - public void inputInterpreter(String Input) { - reset(); - Scanner sc = new Scanner(Input.trim()); - if(sc.hasNextInt()) { // ist eine Zahl - typ = 1; - intResult = Integer.parseInt(Input.trim()); - return; + public void inputInterpreter(String Input) { + + if(Input.trim().toLowerCase().replace(" ", "").matches("\\d+")) { + Input = Input.trim().toLowerCase().replace(" ", "") + "w6"; } - else { - if (Input.trim().toLowerCase().replace(" ", "").matches("([0-9]*)[dw]([0-9].*)")) { // format besteh aus (Zahlen)d(Zahlen) oder (Zahlen)w(Zahlen) - String[] diceInterpreter = Input.trim().toLowerCase().replace(" ", "").split("[wd]"); - try { - diceart = Integer.parseInt(diceInterpreter[1]); - numberOfDice = Integer.parseInt(diceInterpreter[0]); - typ = 2; - } catch (NumberFormatException e) { - String message = activLang.error; - message = message.replace("%command%", Input.trim().toLowerCase()); - //event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue(); - typ = -1; - throw new IllegalArgumentException( message ); + subpart result = new subpart(); + result = subPartAnalyse(Input); + resolveOutput.append(result.getResolveOutput()); + bodyOutput.append(result.getBodyOutput()); + headerOutput.append(result.getHeaderOutput()); + intResult = result.getResolve(); + } + + + private subpart subPartAnalyse(String part) { + subpart result = new subpart(); + part = part.trim().toLowerCase().replace(" ", ""); + boolean first = true; +/* + if(part.contains("max(")) { + /* + 1d6 + max(5d5+10,2d4+2) + 15 + + * / + Pattern pattern = Pattern.compile("(?:.*)max\\((.*?)\\).*"); + Matcher matcher = pattern.matcher(part); + if(matcher.find()) { + //String pre = part.substring(0, (matcher.start() - 3)); + //String operation = part.substring((matcher.start() + 1), (matcher.end()-1)); + //String after = part.substring(matcher.end()); + StringBuilder newBody = new StringBuilder("max("); + StringBuilder newHeader = new StringBuilder("max("); + String[] subParts = matcher.group(1).split(","); + subpart[] tempSubparts = new subpart[subParts.length]; + int i = 0; + int highest = 0; + for(String subPart : subParts) { // Vergleichen welcher wert der höhste ist + tempSubparts[i] = subPartAnalyse(subPart); + if(i != highest && tempSubparts[i].getResolve() > tempSubparts[highest].getResolve()) { + highest = i; + } + if(i > 0) { + newBody.append("), "); + newHeader.append(", "); + } + newBody.append("("); + newBody.append(tempSubparts[i].getBodyOutput()); + newHeader.append(tempSubparts[i].getHeaderOutput()); + i++; } + newBody.append(")"); + newHeader.append(")"); + + int partmarker = new Random().nextInt(1500); + //subPartAnalyse(part.substring(0, (matcher.start() - 3)) + tempSubparts[highest].getResolve() + part.substring(matcher.end())); + subpart contAnalyser = subPartAnalyse(part.substring(0, (matcher.start(1) - 4)) + " ###b" + tempSubparts[highest].getResolve() + "##" + partmarker + "e### " + part.substring(matcher.end(1)+1)); + tempSubparts[highest].getResolve(); + result.appendBodyOutput(contAnalyser.getBodyOutput().replaceAll("###b" + tempSubparts[highest].getResolve() + "##" + partmarker + "e###", newBody.toString())); + result.appendResolveOutput(contAnalyser.getResolveOutput().replaceAll("###b" + tempSubparts[highest].getResolve() + "##" + partmarker + "e###", "max(" + contAnalyser.getResolve().toString() + ")")); + result.appendHeaderOutput(contAnalyser.getHeaderOutput().replaceAll("###b" + tempSubparts[highest].getResolve() + "##" + partmarker + "e###", newHeader.toString())); + result.addResolve(contAnalyser.getResolve()); + } - else { + //part.matches("") + return result; + } + if(part.contains("min(")) { + + }*/ + if(part.contains("+")) { + String[] subParts = part.trim().split("\\+"); + subpart tempSubpart; + for(String subPart : subParts) { + tempSubpart = subPartAnalyse(subPart); + if(!first) { + result.appendBodyOutput(" + "); + result.appendResolveOutput(" + "); + result.appendHeaderOutput(" + "); + } + first = false; + result.appendBodyOutput(tempSubpart.getBodyOutput()); + result.appendResolveOutput(tempSubpart.getResolveOutput()); + result.appendHeaderOutput(tempSubpart.getHeaderOutput()); + result.addResolve(tempSubpart.getResolve()); + } + isComplex = true; + return result; + } + if(part.contains("-")) { + String[] subParts = part.trim().split("\\-"); + subpart tempSubpart; + for(String subPart : subParts) { + tempSubpart = subPartAnalyse(subPart); + if(!first) { + result.appendBodyOutput(" - "); + result.appendResolveOutput(" - "); + result.appendHeaderOutput(" - "); + result.addResolve(tempSubpart.getResolve()*-1); + } + else + result.addResolve(tempSubpart.getResolve()); + first = false; + result.appendBodyOutput(tempSubpart.getBodyOutput()); + result.appendResolveOutput(tempSubpart.getResolveOutput()); + result.appendHeaderOutput(tempSubpart.getHeaderOutput()); + + } + isComplex = true; + return result; + } + + if(part.matches("([0-9]*)[dw]([0-9]*)")) { + String[] diceInterpreter = part.split("[wd]"); + try { + int diceart = Integer.parseInt(diceInterpreter[1]); + int numberOfDice = 1; + if(!diceInterpreter[0].isEmpty()) + numberOfDice = Integer.parseInt(diceInterpreter[0]); + result = roll(diceart, numberOfDice); + } catch (NumberFormatException e) { String message = activLang.error; - message = message.replace("%command%", Input.trim().toLowerCase()); - typ = -1; + message = message.replace("%command%", part.trim().toLowerCase()); throw new IllegalArgumentException( message ); } } + + else if(part.matches("\\d+")) { + result.addResolve(Integer.parseInt(part)); + result.appendBodyOutput(part); + result.appendHeaderOutput(part); + result.appendResolveOutput(part); + } + else if(part.matches("###b\\d+##\\d+e###")) { + Pattern pattern = Pattern.compile("###b(\\d+)##\\d+e###"); + Matcher matcher = pattern.matcher(part); + matcher.find(); + result.addResolve(Integer.parseInt(matcher.group(1))); + result.appendBodyOutput(part); + result.appendHeaderOutput(part); + result.appendResolveOutput(part); + } + return result; } + + subpart roll(Integer diceart, Integer numberOfDice) { + int dice = 0; + subpart result = new subpart(); + result.appendHeaderOutput(numberOfDice.toString() + "w" + diceart.toString()); + result.appendBodyOutput("("); + for(int i = 0; i < numberOfDice; i++) { + dice = new Random().nextInt(diceart); + if(i > 0) { + result.appendBodyOutput(", "); + } + result.appendBodyOutput(dice+1); + result.addResolve(dice+1); + } + result.appendBodyOutput(")"); + result.appendResolveOutput("(" + result.getResolve() + ")"); + return result; + } + + public String getBodyOutput() { + return bodyOutput.toString(); + } + + public String getResolveOutput() { + return resolveOutput.toString(); + } + + public String getHeaderOutput() { + return headerOutput.toString(); + } + + public Integer getResult() { + return intResult; + } + + public boolean isComplex() { + return isComplex; + } + } diff --git a/src/main/java/Simpleroll/subpart.java b/src/main/java/Simpleroll/subpart.java new file mode 100644 index 0000000..a90505a --- /dev/null +++ b/src/main/java/Simpleroll/subpart.java @@ -0,0 +1,69 @@ +package Simpleroll; + +public class subpart { + private StringBuilder bodyOutput; + + private StringBuilder resolveOutput; + + private StringBuilder headerOutput; + + private Integer resolve; + + public subpart() { + bodyOutput = new StringBuilder(""); + resolveOutput = new StringBuilder(""); + headerOutput = new StringBuilder(""); + resolve = 0; + } + + public String getBodyOutput() { + return bodyOutput.toString(); + } + + public void appendBodyOutput(String bodyOutput) { + this.bodyOutput.append(bodyOutput); + } + public void appendBodyOutput(Integer bodyOutput) { + this.bodyOutput.append(bodyOutput); + } + + public String getResolveOutput() { + return resolveOutput.toString(); + } + + public void appendResolveOutput(String resolveOutput) { + this.resolveOutput.append(resolveOutput); + } + + public String getHeaderOutput() { + return headerOutput.toString(); + } + + public void appendHeaderOutput(String headerOutput) { + this.headerOutput.append(headerOutput); + } + + public Integer getResolve() { + return resolve; + } + + public void setResolve(Integer resolve) { + this.resolve = resolve; + } + + public void setBodyOutput(String bodyOutput) { + this.bodyOutput = new StringBuilder(bodyOutput); + } + + public void setResolveOutput(String resolveOutput) { + this.resolveOutput = new StringBuilder(resolveOutput); + } + + public void setHeaderOutput(String headerOutput) { + this.headerOutput = new StringBuilder(headerOutput); + } + + public void addResolve(Integer i) { + this.resolve += i; + } +} diff --git a/src/main/java/Socket/shadowrun.java b/src/main/java/Socket/shadowrun.java index 234f5c0..37b301b 100755 --- a/src/main/java/Socket/shadowrun.java +++ b/src/main/java/Socket/shadowrun.java @@ -1,7 +1,7 @@ package Socket; -import net.dv8tion.jda.core.EmbedBuilder; -import net.dv8tion.jda.core.JDA; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.JDA; import java.awt.*; import java.io.*; @@ -20,6 +20,7 @@ public class shadowrun implements Runnable{ public shadowrun(JDA jda) { this.jda = jda; + } @Override @@ -165,7 +166,7 @@ public class shadowrun implements Runnable{ } out.println("ACKSend"); } - jda.getTextChannelById(channelId).sendMessage(outputBox.build()).queue(); + jda.getTextChannelById(channelId).sendMessage(outputBox.build().toString()).queue(); } } } diff --git a/src/main/java/Vampire/dice.java b/src/main/java/Vampire/dice.java new file mode 100644 index 0000000..69defac --- /dev/null +++ b/src/main/java/Vampire/dice.java @@ -0,0 +1,302 @@ +package Vampire; + +import Shadowrun.db_connect; +import Simpleroll.help; +import Simpleroll.language; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.channel.ChannelType; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; + +import java.awt.*; +import java.util.*; +import java.util.regex.MatchResult; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class dice extends ListenerAdapter { + + private String prefixlong; + private String prefixShort; + private String prefixVeryShort; + + private language langDe = new language("de"); + private language langEn = new language("en"); + + private help helpDe = new help("de"); + private help helpEn = new help("En"); + + private language activLang; + private help activHelp; + + private db_connect db; + + private Map channelList = new HashMap<>(); + + + public dice() { + this.prefixlong = "/vampire"; + this.prefixShort = "/v"; + + this.db = new db_connect(); + } + + @Override + public void onMessageReceived(MessageReceivedEvent event) { + if ((!event.getMessage().getContentRaw().toLowerCase().startsWith(this.prefixlong) + && !event.getMessage().getContentRaw().toLowerCase().startsWith(this.prefixShort)) + || (event.getChannelType() != ChannelType.TEXT && event.getChannelType() != ChannelType.PRIVATE)) { + return; + } + + 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; + + } + User author = event.getAuthor(); + if (event.getMessage().getContentRaw().toLowerCase().startsWith(this.prefixlong) || event.getMessage().getContentRaw().toLowerCase().startsWith(this.prefixShort)) + this.roll(event); + } + + + private String getEffectiveName(MessageReceivedEvent event) { + if(event.getMember() == null) { + return ""; + } + return event.getMember().getEffectiveName() + " "; + } + + private String getAsMention(MessageReceivedEvent event) { + if(event.getMember() == null) { + return ""; + } + return event.getMember().getAsMention() + " "; + } + + /** + * + * + * @param event JDA Event + */ + private void roll(MessageReceivedEvent event) { + + EmbedBuilder outputBox = new EmbedBuilder(); + StringBuilder result = new StringBuilder(""); + StringBuilder resultDice = new StringBuilder(""); + StringBuilder resultHungerDice = new StringBuilder(""); + String msgText = ""; + String rollState = ""; + + int numberOfDice, numberOfHungerDice, successes, difficult, dice1; + numberOfDice = numberOfHungerDice = successes = difficult = 0; + + int[] verteilungGesammt = new int[11]; + int[] verteilungHunger = new int[11]; + + try { + + String ContentRaw = event.getMessage().getContentRaw(); + + // Prüfen ob Leerer Command gesendet wird + String[] MsgParts = ContentRaw.replace(" ", " ").split(" ", 2); + + if(MsgParts.length < 2) { + String message = activLang.emptyCommand; + message = message.replace("%command%", this.prefixShort); + event.getChannel().sendMessage(getAsMention(event) + message).queue(); + return; + } + + msgText = MsgParts[1].trim(); + if(msgText.matches(".*[^0-9].*")) { // es wurden andere zeichen als Zahlen gefunden + if(msgText.toLowerCase().equals("de")) { + activLang = langDe; + channelList.put(event.getChannel().getId(), "de"); + event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); + db.setChannelSettings(event.getChannel().getId(), "de", event.getGuild().getId(), event.getChannel().getName()); + return; + } + else if(msgText.toLowerCase().equals("en")) { + activLang = langEn; + channelList.put(event.getChannel().getId(), "en"); + event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); + db.setChannelSettings(event.getChannel().getId(), "en", event.getGuild().getId(), event.getChannel().getName()); + return; + } + else if(msgText.toLowerCase().equals("help") || msgText.toLowerCase().equals("hilfe")) { + event.getChannel().sendMessage(getAsMention(event) + + " Die Syntax lautet XkY z.b. 5k4\nEs werden X mal W10 gewürfelt und davon die höhsten Anzahl Y behalten und addiert. Wird eine 10 gewürfelt, wird der Wurf weiter gewürfelt und addiert aber nur als ein Wurf gezählt.\nWird nach dem XkY eine weiter Zahl angeben so ist dies die Schwierigkeit\n" + + "Wird nach dem XkY eine Zahl mit + oder - Angegeben, zählt dies als ein Modifikator für das ergebnis.\n\n" + + "Zudem gibt es folgente sonderzeichen, die an belibiger stelle gesetz werden können:\n" + + "! - auch gewüfelte 9 explodieren\n" + + "e - gewürfelte 1 werden neu gewürfelt\n" + + "# - Würfel explodierente nur einmal\n" + + "n - Würfel explodierente nicht\n" + ).queue(); + + return; + } + + if(msgText.toLowerCase().matches(".*([0-9]+) +([0-9]+) +([0-9]+).*")) { // X Y Z Aufbau in der Anfrage + Pattern pattern = Pattern.compile("([0-9]+) +([0-9]+) +([0-9]+)"); + Matcher matcher = pattern.matcher(msgText.toLowerCase()); + matcher.find(); + MatchResult elements = matcher.toMatchResult(); + numberOfDice = Integer.parseInt(elements.group(1)); + numberOfHungerDice = Integer.parseInt(elements.group(2)); + difficult = Integer.parseInt(elements.group(3)); + } + else if(msgText.toLowerCase().matches(".*([0-9]+) +([0-9]+).*")) { // XkY Aufbau in der Anfrage + Pattern pattern = Pattern.compile("([0-9]+) +([0-9]+)"); + Matcher matcher = pattern.matcher(msgText.toLowerCase()); + matcher.find(); + MatchResult elements = matcher.toMatchResult(); + numberOfDice = Integer.parseInt(elements.group(1)); + numberOfHungerDice = Integer.parseInt(elements.group(2)); + } + else { + String message = activLang.error; + message = message.replace("%command%", msgText); + event.getChannel().sendMessage(getAsMention(event) + message).queue(); + return; + } + } + else { + String message = activLang.error; + message = message.replace("%command%", msgText); + event.getChannel().sendMessage(getAsMention(event) + message).queue(); + return; + } + + if(numberOfDice <= 0) { + String message = activLang.noNegativ; + event.getChannel().sendMessage(getAsMention(event) + message).queue(); + return; + } + + if(numberOfDice < numberOfHungerDice) { + numberOfHungerDice = numberOfDice; + } + + for(int i = 0; i < numberOfDice-numberOfHungerDice; i++) { + dice1 = new Random().nextInt(10); + dice1++; + if(dice1 >= 6) { + successes++; + } + verteilungGesammt[dice1]++; + if(resultDice.length() > 0) + resultDice.append(" "); + if((dice1 >= 6)) + resultDice.append("**").append(dice1).append("**"); + else + resultDice.append(dice1); + } + for(int i = 0; i < numberOfHungerDice; i++) { + dice1 = new Random().nextInt(10); + dice1++; + if(dice1 >= 6) { + successes++; + } + verteilungGesammt[dice1]++; + verteilungHunger[dice1]++; + if(resultHungerDice.length() > 0) + resultHungerDice.append(" "); + if((dice1 >= 6)) + resultHungerDice.append("**").append(dice1).append("**"); + else + resultHungerDice.append(dice1); + } + + + if(verteilungGesammt[10] > 2) { + successes += 2; + } + + if((difficult > 0 && successes > difficult) || (difficult == 0 && successes > 0)) { // erfolg + if(verteilungGesammt[10] > 2) { + if(verteilungHunger[10] > 0) { + rollState = "Krit"; + outputBox.setColor(Color.green); + } + else { + rollState = "Schmutziger Triumphe"; + outputBox.setColor(Color.red); + } + } + else { + rollState = "Erfolg"; + outputBox.setColor(Color.green); + } + } + else if(difficult > 0 && successes > 0) { // Fehlschlag + if(verteilungHunger[1] > 0) { + rollState = "Bestialischer Fehlschlag"; + outputBox.setColor(Color.red); + } + else { + rollState = "Fehlschlag"; + outputBox.setColor(Color.darkGray); + } + } + else if(successes == 0) { // Totaler Fehlschlag + if(verteilungHunger[1] > 0) { + rollState = "Bestialischer Fehlschlag"; + outputBox.setColor(Color.red); + } + else { + rollState = "Totaler Fehlschlag"; + outputBox.setColor(Color.darkGray); + } + } + + + + // Ausgabe beginn + String addition = ""; + + if(difficult > 0) { + addition += " Schwierigkeit " + difficult; + } + + String title = getEffectiveName(event) + "Pool " + numberOfDice; + if(numberOfHungerDice > 0) { + title += " Hunger " + numberOfHungerDice; + } + if(difficult > 0) { + title += " Schwierigkeit " + difficult; + } + outputBox.setTitle(title); +/* + StringBuilder description = new StringBuilder(); + for(int i = 0; i < numberOfDice; i++) { + if(description.length() > 0) { + description.append(", "); + } + description.append(rolls[i].getText()); + } + outputBox.setDescription("(" + description + ")");*/ + event.getChannel().sendMessage(outputBox.build().toString()).queue(); + } + catch (NumberFormatException e) { + event.getChannel().sendMessage("Nope").queue(); + } + catch (Exception e) { + System.out.println("problem: " + e.getMessage()); + } + + } + +} diff --git a/src/main/java/Vampire/result.java b/src/main/java/Vampire/result.java new file mode 100644 index 0000000..905e70a --- /dev/null +++ b/src/main/java/Vampire/result.java @@ -0,0 +1,105 @@ +package Vampire; + +import java.util.Random; + +public class result { + private StringBuilder text; + private int value; + private int diceart; + private Boolean reroll9; + private Boolean reroll1; + private Boolean maxReroll; + private Boolean noreroll; + + public result() { + diceart = 10; + text = new StringBuilder(); + value = 0; + reroll9 = false; + reroll1 = false; + maxReroll = false; + noreroll = false; + } + + public String getText() { + return text.toString(); + } + + public void setText(String text) { + this.text = new StringBuilder(); + this.text.append(text); + } + + public void setMarket() { + String tmp = this.text.toString(); + this.text = new StringBuilder(); + this.text.append("**").append(tmp).append("**"); + } + + public int getValue() { + return value; + } + + public void setValue(Integer value) { + this.value = value; + } + + public result setReroll9(Boolean reroll9) { + this.reroll9 = reroll9; + return this; + } + + public result setReroll1(Boolean reroll1) { + this.reroll1 = reroll1; + return this; + } + + public result setMaxReroll(Boolean maxReroll) { + this.maxReroll = maxReroll; + return this; + } + + public result setNoreroll(Boolean noreroll) { + this.noreroll = noreroll; + return this; + } + + public result roll() { + int dice; + int rolls = 0; + Boolean reroll = false; + + do{ + reroll = false; + dice = new Random().nextInt(diceart); + dice++; + + if(text.length() > 0) { + text.append("+"); + } + if(reroll1 && dice == 1 && rolls <= 0) { + text.append("~~ ").append(dice).append(" ~~ "); + } + else { + text.append(dice); + } + + value += dice; + + if(!noreroll) { + if (dice == 10) { + reroll = rolls <= 0 || !maxReroll; // wenn maxRolls an und schon einmal gerollt wurde kein reroll + ++rolls; + } else if (reroll9 && dice == 9) { + reroll = rolls <= 0 || !maxReroll; + } else if (reroll1 && dice == 1 && rolls <= 0) { + reroll = true; + value--; + } + } + + } while(reroll); + + return this; + } +} diff --git a/src/main/java/core/Main.java b/src/main/java/core/Main.java index ae13b5c..e67043e 100755 --- a/src/main/java/core/Main.java +++ b/src/main/java/core/Main.java @@ -2,17 +2,11 @@ package core; //import Serenity.balance; -import Shadowrun.dice; -import Socket.shadowrun; -import javafx.scene.effect.Shadow; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.OnlineStatus; import net.dv8tion.jda.api.entities.*; - - - -import javax.security.auth.login.LoginException; +import net.dv8tion.jda.api.requests.GatewayIntent; public class Main { @@ -22,9 +16,9 @@ public class Main { String token = "NTQ2ODk5MzYwMDEzODc3MjU4.D0u8wA.VfA2vJzundVhCl1-ibDiBaKuA8w"; // iro //String token = "NTQ2NzEwODUwOTIxMjk5OTc5.D0sL6A.1fUd5iBr3eo2tbPXofEqyumDm6w"; - try { JDA jda = JDABuilder.createDefault(token) + .enableIntents(GatewayIntent.MESSAGE_CONTENT) .setActivity(Activity.playing("mit den Würfeln")) .setStatus(OnlineStatus.ONLINE) //.addEventListeners(new dice()) @@ -36,13 +30,13 @@ public class Main { .setAutoReconnect(true) .build(); - Thread thread = new Thread(new shadowrun(jda)); - thread.start(); + //jda.upsertCommand("sr", "Calculate ping of the bot").queue(); + + // Thread thread = new Thread(new shadowrun(jda)); + //thread.start(); + + - } - catch (LoginException e) { - e.printStackTrace(); - } } } \ No newline at end of file