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 ); + } + } + } +}