Update Keeprool, Engel + Aufräumen
This commit is contained in:
@ -1,394 +0,0 @@
|
||||
package de.ocame.wuerfelbot.Earthdawn;
|
||||
|
||||
import de.ocame.wuerfelbot.Shadowrun.db_connect;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
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.hooks.ListenerAdapter;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class dice extends ListenerAdapter {
|
||||
|
||||
private final String prefixSr;
|
||||
|
||||
private final language langDe = new language("de");
|
||||
private final language langEn = new language("en");
|
||||
|
||||
private language activLang;
|
||||
|
||||
private final db_connect db;
|
||||
|
||||
private final Map<String, String> channelList = new HashMap<>();
|
||||
|
||||
private final step dieRoll = new step();
|
||||
|
||||
|
||||
public dice() {
|
||||
this.prefixSr = "/ed";
|
||||
//this.prefixIni = "/ini";
|
||||
|
||||
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<String, String> Einstellungen = db.getChannelSettings(event.getChannel().getId());
|
||||
channelList.put(event.getChannel().getId(), Einstellungen.get("lang"));
|
||||
}
|
||||
switch (channelList.get(event.getChannel().getId())) {
|
||||
case "de":
|
||||
activLang = langDe;
|
||||
break;
|
||||
case "en":
|
||||
activLang = langEn;
|
||||
break;
|
||||
default:
|
||||
activLang = langDe;
|
||||
|
||||
}
|
||||
User author = event.getAuthor();
|
||||
author.isBot();
|
||||
if (true) {
|
||||
if (event.getMessage().getContentRaw().startsWith(this.prefixSr))
|
||||
this.roll(event);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* rolltest
|
||||
*
|
||||
* @param event JDA Event
|
||||
*/
|
||||
private void roll(MessageReceivedEvent event) {
|
||||
|
||||
EmbedBuilder outputBox = new EmbedBuilder();
|
||||
|
||||
int[] verteilung = new int[6];
|
||||
int dice1;
|
||||
int numberOfDice = 1;
|
||||
int diceart = 6;
|
||||
StringBuilder result = new StringBuilder();
|
||||
|
||||
int hits = 0;
|
||||
boolean glitches = false;
|
||||
|
||||
boolean 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 {
|
||||
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;
|
||||
}
|
||||
|
||||
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.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(DicePart.equals("de")) {
|
||||
activLang = langDe;
|
||||
channelList.put(event.getChannel().getId(), "de");
|
||||
event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue();
|
||||
return;
|
||||
}
|
||||
else if(DicePart.equals("en")) {
|
||||
activLang = langEn;
|
||||
channelList.put(event.getChannel().getId(), "en");
|
||||
event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
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].replaceAll("[^0-9]", "")));
|
||||
if(iniParts.length > 1) { // Nachricht hat kein + Zeichen
|
||||
|
||||
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(DicePart));
|
||||
}
|
||||
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().sendMessageEmbeds(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) {
|
||||
|
||||
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;
|
||||
default:
|
||||
int w20 = 0;
|
||||
w20 = (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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
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";
|
||||
*/
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,89 +0,0 @@
|
||||
package de.ocame.wuerfelbot.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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,117 +0,0 @@
|
||||
package de.ocame.wuerfelbot.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 final language activLang;
|
||||
private final MessageReceivedEvent event;
|
||||
boolean glitches = true;
|
||||
|
||||
public Integer getDiceart() {
|
||||
return diceart;
|
||||
}
|
||||
|
||||
public Integer getNumberOfDice() {
|
||||
return numberOfDice;
|
||||
}
|
||||
|
||||
public Integer getIntResult() {
|
||||
return intResult;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public boolean isNum() {
|
||||
return typ == 1;
|
||||
}
|
||||
|
||||
public boolean isDice() {
|
||||
return typ == 2;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @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());
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,292 +0,0 @@
|
||||
package de.ocame.wuerfelbot.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
143
src/main/java/de/ocame/wuerfelbot/Engel/EngelCommand.java
Normal file
143
src/main/java/de/ocame/wuerfelbot/Engel/EngelCommand.java
Normal file
@ -0,0 +1,143 @@
|
||||
package de.ocame.wuerfelbot.Engel;
|
||||
|
||||
|
||||
import de.ocame.wuerfelbot.Earthdawn.EarthdawnLogic;
|
||||
import de.ocame.wuerfelbot.commands.ICommand;
|
||||
import de.ocame.wuerfelbot.core.LoggerUtil;
|
||||
import de.ocame.wuerfelbot.output.DiceOutputFormatter;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.Commands;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class EngelCommand implements ICommand {
|
||||
|
||||
private final EarthdawnLogic earthdawnLogic;
|
||||
private final DiceOutputFormatter outputFormatter;
|
||||
|
||||
public EngelCommand() {
|
||||
this.earthdawnLogic = new EarthdawnLogic();
|
||||
this.outputFormatter = new DiceOutputFormatter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "engel";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Zieht eine Karte aus dem Engel-Taro-Deck und Zeigt die Bedeutung.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void executeSlash(SlashCommandInteractionEvent event) {
|
||||
|
||||
|
||||
try {
|
||||
EngelLogic result = new EngelLogic();
|
||||
result.draw();
|
||||
|
||||
String NameAdd = "";
|
||||
|
||||
Color color = Color.red;
|
||||
if(result.isLoF()) {
|
||||
color = Color.red;
|
||||
}
|
||||
else if(!result.isSide()) {
|
||||
color = Color.green;
|
||||
}
|
||||
else {
|
||||
color = Color.orange;
|
||||
NameAdd = " Umgekehrt ";
|
||||
}
|
||||
|
||||
EmbedBuilder response = outputFormatter.DCDefaultOutput(
|
||||
getEffectiveName(event) + "du ziehst " + NameAdd + result.getName(),
|
||||
result.getDescription(),
|
||||
color);
|
||||
response.setImage(result.getImage());
|
||||
|
||||
event.deferReply().queue();
|
||||
event.getHook().editOriginalEmbeds(response.build()).queue();
|
||||
// event.replyEmbeds(response.build()).queue();
|
||||
} catch (Exception e) {
|
||||
LoggerUtil.log("error", "EngelCommand", "Fehler bei Earthdawn-Probe: " + e.getMessage());
|
||||
event.reply(outputFormatter.formatError("Ein Fehler ist bei der Earthdawn-Probe aufgetreten.")).setEphemeral(true).queue();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void executeText(MessageReceivedEvent event, String[] args) {
|
||||
|
||||
|
||||
try {
|
||||
EngelLogic result = new EngelLogic();
|
||||
result.draw();
|
||||
|
||||
String NameAdd = "";
|
||||
|
||||
Color color = Color.red;
|
||||
if(result.isLoF()) {
|
||||
color = Color.red;
|
||||
}
|
||||
else if(!result.isSide()) {
|
||||
color = Color.green;
|
||||
}
|
||||
else {
|
||||
color = Color.orange;
|
||||
NameAdd = " Umgekehrt ";
|
||||
}
|
||||
|
||||
EmbedBuilder response = outputFormatter.DCDefaultOutput(
|
||||
getEffectiveName(event) + "du ziehst " + NameAdd + result.getName(),
|
||||
result.getDescription(),
|
||||
color);
|
||||
response.setImage(result.getImage());
|
||||
event.getChannel().sendMessageEmbeds(response.build()).queue();
|
||||
} catch (Exception e) {
|
||||
LoggerUtil.log("error", "EngelCommand", "Fehler bei Engel-Probe: " + e.getMessage());
|
||||
event.getChannel().sendMessage(outputFormatter.formatError("Ein Fehler ist bei der Engel-Probe aufgetreten.")).queue();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandData getSlashCommandData() {
|
||||
return Commands.slash(getName(), getDescription());
|
||||
}
|
||||
|
||||
private String getEffectiveName(MessageReceivedEvent event) {
|
||||
if (event.getMember() == null) {
|
||||
return "";
|
||||
}
|
||||
return event.getMember().getEffectiveName() + " ";
|
||||
}
|
||||
|
||||
private String getEffectiveName(SlashCommandInteractionEvent event) {
|
||||
if (event.getMember() == null) {
|
||||
return "";
|
||||
}
|
||||
return event.getMember().getEffectiveName() + " ";
|
||||
}
|
||||
|
||||
private static int parseCharacterStat(String currentElement, char targetChar) {
|
||||
int result = 0;
|
||||
Pattern pattern = Pattern.compile("((" + targetChar + "+) *(\\d*))");
|
||||
Matcher matcher = pattern.matcher(currentElement);
|
||||
if (matcher.find()) {
|
||||
if (matcher.group(2).length() == 1 && !matcher.group(3).isEmpty()) { // nur die K
|
||||
result += Integer.parseInt(matcher.group(3));
|
||||
}
|
||||
else {
|
||||
result += matcher.group(2).length();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@ -4,7 +4,7 @@ import net.dv8tion.jda.api.EmbedBuilder;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class arcanaList {
|
||||
public class EngelLogic {
|
||||
|
||||
private arcana[] arcanas;
|
||||
|
||||
@ -23,7 +23,7 @@ public class arcanaList {
|
||||
|
||||
private boolean LoF;
|
||||
|
||||
public arcanaList() {
|
||||
public EngelLogic() {
|
||||
usedCard = new boolean[22];
|
||||
for(int i = 0; i < 22; i++)
|
||||
usedCard[i] = false;
|
||||
@ -41,8 +41,6 @@ public class arcanaList {
|
||||
}
|
||||
|
||||
public void draw() {
|
||||
EmbedBuilder outputBox = new EmbedBuilder();
|
||||
StringBuilder resultConstruction = new StringBuilder();
|
||||
|
||||
if(stack < 1) {
|
||||
reset();
|
||||
@ -91,6 +89,13 @@ public class arcanaList {
|
||||
}
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
StringBuilder result = new StringBuilder();
|
||||
result.append("**").append(getMeaning()).append("**");
|
||||
result.append("\n").append(getExplain());
|
||||
return result.toString().trim();
|
||||
}
|
||||
|
||||
public String getImage() {
|
||||
String baseURL = "http://ocame.de/engelcards/";
|
||||
if(activArcana == -1)
|
||||
@ -1,139 +0,0 @@
|
||||
package de.ocame.wuerfelbot.Engel;
|
||||
|
||||
import de.ocame.wuerfelbot.Shadowrun.db_connect;
|
||||
import de.ocame.wuerfelbot.Simpleroll.help;
|
||||
import de.ocame.wuerfelbot.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.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class dice extends ListenerAdapter {
|
||||
|
||||
private final String prefixEngel;
|
||||
private final String prefixEngelShort;
|
||||
|
||||
private final language langDe = new language("de");
|
||||
private final language langEn = new language("en");
|
||||
|
||||
private final help helpDe = new help("de");
|
||||
private final help helpEn = new help("En");
|
||||
|
||||
private language activLang;
|
||||
private help activHelp;
|
||||
|
||||
private arcanaList activArcanaList;
|
||||
|
||||
private final db_connect db;
|
||||
|
||||
private final Map<String, String> channelList = new HashMap<>();
|
||||
private final Map<String, arcanaList> 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<String, String> Einstellungen = db.getChannelSettings(event.getChannel().getId());
|
||||
channelList.put(event.getChannel().getId(), Einstellungen.get("lang"));
|
||||
}
|
||||
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().sendMessageEmbeds(outputBox.build()).queue();
|
||||
|
||||
}
|
||||
catch (NumberFormatException e) {
|
||||
event.getChannel().sendMessage("Nope").queue();
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println("problem: " + e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,89 +0,0 @@
|
||||
package de.ocame.wuerfelbot.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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
213
src/main/java/de/ocame/wuerfelbot/Keeproll/KeeprollCommand.java
Normal file
213
src/main/java/de/ocame/wuerfelbot/Keeproll/KeeprollCommand.java
Normal file
@ -0,0 +1,213 @@
|
||||
package de.ocame.wuerfelbot.Keeproll;
|
||||
|
||||
|
||||
import de.ocame.wuerfelbot.Earthdawn.EarthdawnLogic;
|
||||
import de.ocame.wuerfelbot.commands.ICommand;
|
||||
import de.ocame.wuerfelbot.core.LoggerUtil;
|
||||
import de.ocame.wuerfelbot.output.DiceOutputFormatter;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.Commands;
|
||||
|
||||
import java.util.regex.MatchResult;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class KeeprollCommand implements ICommand {
|
||||
|
||||
private final KeeprollLogic keeprollLogic;
|
||||
private final DiceOutputFormatter outputFormatter;
|
||||
|
||||
public KeeprollCommand() {
|
||||
this.keeprollLogic = new KeeprollLogic();
|
||||
this.outputFormatter = new DiceOutputFormatter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "k";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Führt eine X keep Y-Probe mit W10 durch. X > 10 wird 2:1 auf Y Übertragen";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void executeSlash(SlashCommandInteractionEvent event) {
|
||||
|
||||
Integer numberOfDice = event.getOption("wuerfel").getAsInt();
|
||||
Integer diceCount = event.getOption("keep").getAsInt();
|
||||
Integer target = event.getOption("ziel") != null ? event.getOption("ziel").getAsInt() : 0;
|
||||
Integer modifier = event.getOption("modifier") != null ? event.getOption("modifier").getAsInt() : 0;
|
||||
|
||||
Boolean unskilled = event.getOption("unskilled") != null && event.getOption("unskilled").getAsBoolean();
|
||||
Boolean emphases = event.getOption("emphases") != null && event.getOption("emphases").getAsBoolean();
|
||||
Integer explode = event.getOption("explode") != null ? event.getOption("explode").getAsInt() : 10;
|
||||
Boolean explodedOnce = event.getOption("exploded-once") != null && event.getOption("exploded-once").getAsBoolean();
|
||||
|
||||
if (numberOfDice < 1 || diceCount < 1 || target < 0 || explode < 1 || explode > 10) {
|
||||
if (numberOfDice < 1) {
|
||||
event.reply(outputFormatter.formatError("Die Anzahl der Würfel muss mindestens 1 sein.")).setEphemeral(true).queue();
|
||||
}
|
||||
if (diceCount < 1) {
|
||||
event.reply(outputFormatter.formatError("Die Anzahl der behaltende Würfelergebnisse muss mindestens 1 sein.")).setEphemeral(true).queue();
|
||||
}
|
||||
if (target < 0) {
|
||||
event.reply(outputFormatter.formatError("Ziel darf nicht negativ sein.")).setEphemeral(true).queue();
|
||||
}
|
||||
if (explode < 1 || explode > 10) {
|
||||
event.reply(outputFormatter.formatError("Würfel können nicht unter 1 oder über 10 Explodieren")).setEphemeral(true).queue();
|
||||
}
|
||||
return;
|
||||
}
|
||||
try {
|
||||
KeeprollLogic.KeeprollResult result = keeprollLogic.performKeeprollRoll(numberOfDice, diceCount, target, modifier, unskilled, emphases, explode, explodedOnce);
|
||||
EmbedBuilder response = outputFormatter.DCDefaultOutput(getEffectiveName(event) + result.getTitle(), result.getDescription(), result.isGlitch());
|
||||
event.deferReply().queue();
|
||||
event.getHook().editOriginalEmbeds(response.build()).queue();
|
||||
} catch (Exception e) {
|
||||
LoggerUtil.log("error", "KeeprollCommand", "Fehler bei Keeproll-Probe: " + e.getMessage());
|
||||
event.reply(outputFormatter.formatError("Ein Fehler ist bei der Keeproll-Probe aufgetreten.")).setEphemeral(true).queue();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void executeText(MessageReceivedEvent event, String[] args) {
|
||||
if (args.length < 1) {
|
||||
event.getChannel().sendMessage(outputFormatter.formatError("Verwendung: `!k <stufe> [karma]`")).queue();
|
||||
return;
|
||||
}
|
||||
|
||||
Integer numberOfDice = 1;
|
||||
Integer diceCount = 1;
|
||||
Integer target = 0;
|
||||
Integer modifier = 0;
|
||||
|
||||
Boolean unskilled = false;
|
||||
Boolean emphases = false;
|
||||
Integer explode = 10;
|
||||
Boolean explodedOnce = false;
|
||||
|
||||
boolean stufeParsed = false;
|
||||
|
||||
String ContentRaw = event.getMessage().getContentRaw();
|
||||
|
||||
// Prüfen ob Leerer Command gesendet wird
|
||||
String[] MsgParts = ContentRaw.replace(" ", " ").split(" ", 2);
|
||||
String msgText = MsgParts[1].trim();
|
||||
if(msgText.equalsIgnoreCase("help") || msgText.equalsIgnoreCase("hilfe")) {
|
||||
event.getChannel().sendMessage(event.getMember().getAsMention() + " "
|
||||
+ " 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("!")) {
|
||||
explode = 9;
|
||||
msgText = msgText.replace("!", "");
|
||||
}
|
||||
if(msgText.contains("e")) {
|
||||
emphases = true;
|
||||
msgText = msgText.replace("e", "");
|
||||
}
|
||||
if(msgText.contains("#")) {
|
||||
explodedOnce = true;
|
||||
msgText = msgText.replace("#", "");
|
||||
}
|
||||
if(msgText.contains("n")) {
|
||||
unskilled = 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();
|
||||
modifier = Integer.parseInt(elements.group(2));
|
||||
if(elements.group(1).equals("-")) {
|
||||
modifier *= -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));
|
||||
target = 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));
|
||||
}
|
||||
|
||||
try {
|
||||
KeeprollLogic.KeeprollResult result = keeprollLogic.performKeeprollRoll(numberOfDice, diceCount, target, modifier, unskilled, emphases, explode, explodedOnce);
|
||||
EmbedBuilder response = outputFormatter.DCDefaultOutput(getEffectiveName(event) + result.getTitle(), result.getDescription(), result.isGlitch());
|
||||
event.getChannel().sendMessageEmbeds(response.build()).queue();
|
||||
} catch (Exception e) {
|
||||
LoggerUtil.log("error", "KeepCommand", "Fehler bei Keeproll-Probe: " + e.getMessage());
|
||||
event.getChannel().sendMessage(outputFormatter.formatError("Ein Fehler ist bei der Keeproll-Probe aufgetreten.")).queue();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandData getSlashCommandData() {
|
||||
return Commands.slash(getName(), getDescription())
|
||||
.addOption(OptionType.INTEGER, "wuerfel", "Die Anzahl der zu würfelende Würfeln", true)
|
||||
.addOption(OptionType.INTEGER, "keep", "Die Anzahl behaltende Würfelergebnisse", true)
|
||||
.addOption(OptionType.INTEGER, "ziel", "Ziel Wert, Zeigt optisch Ergebnis an", false)
|
||||
.addOption(OptionType.INTEGER, "modifier", "Bonus oder Abzug auf Ergebnis", false)
|
||||
.addOption(OptionType.BOOLEAN, "unskilled", "Würfel explodieren nicht", false)
|
||||
.addOption(OptionType.BOOLEAN, "emphases", "gewürfelte 1 werden neu gewürfelt", false)
|
||||
.addOption(OptionType.INTEGER, "explode", "Ab wann Explodieren Würfel, Standard ist 10", false)
|
||||
.addOption(OptionType.BOOLEAN, "exploded-once", "Würfel explodieren nur einmal", false);
|
||||
}
|
||||
|
||||
private String getEffectiveName(MessageReceivedEvent event) {
|
||||
if (event.getMember() == null) {
|
||||
return "";
|
||||
}
|
||||
return event.getMember().getEffectiveName() + " ";
|
||||
}
|
||||
|
||||
private String getEffectiveName(SlashCommandInteractionEvent event) {
|
||||
if (event.getMember() == null) {
|
||||
return "";
|
||||
}
|
||||
return event.getMember().getEffectiveName() + " ";
|
||||
}
|
||||
|
||||
private static int parseCharacterStat(String currentElement, char targetChar) {
|
||||
int result = 0;
|
||||
Pattern pattern = Pattern.compile("((" + targetChar + "+) *(\\d*))");
|
||||
Matcher matcher = pattern.matcher(currentElement);
|
||||
if (matcher.find()) {
|
||||
if (matcher.group(2).length() == 1 && !matcher.group(3).isEmpty()) { // nur die K
|
||||
result += Integer.parseInt(matcher.group(3));
|
||||
} else {
|
||||
result += matcher.group(2).length();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
216
src/main/java/de/ocame/wuerfelbot/Keeproll/KeeprollLogic.java
Normal file
216
src/main/java/de/ocame/wuerfelbot/Keeproll/KeeprollLogic.java
Normal file
@ -0,0 +1,216 @@
|
||||
package de.ocame.wuerfelbot.Keeproll;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class KeeprollLogic {
|
||||
|
||||
private final Random random;
|
||||
|
||||
private int numberOfDice;
|
||||
private int diceCount;
|
||||
private int target;
|
||||
private int modifier;
|
||||
private boolean unskilled;
|
||||
private boolean emphases;
|
||||
private int explode;
|
||||
private boolean explodedOnce;
|
||||
|
||||
private result[] rolls;
|
||||
|
||||
private boolean glitches;
|
||||
private int resultInt;
|
||||
|
||||
StringBuilder resultStructur;
|
||||
|
||||
public KeeprollLogic() {
|
||||
this.random = new Random();
|
||||
reset();
|
||||
}
|
||||
|
||||
public KeeprollLogic reset() {
|
||||
|
||||
glitches = false;
|
||||
resultInt = 0;
|
||||
|
||||
resultStructur = new StringBuilder();
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Führt eine Earthdawn-Würfelprobe durch.
|
||||
* Würfelt eine bestimmte Anzahl an Ws Abhänig von Stufe und optional Würfeln (z.b. Karma).
|
||||
*
|
||||
* @param numberOfDicePar Die Anzahl der zu würfelende Würfeln
|
||||
* @param diceCountPar Die Anzahl behaltende Würfelergebnisse
|
||||
* @param targetPar Ziel Wert, Zeigt optisch Ergebnis an
|
||||
* @param modifierPar Bonus oder Abzug auf Ergebnis
|
||||
* @param unskilledPar Würfel explodieren nicht.
|
||||
* @param emphasesPar gewürfelte 1 werden neu gewürfelt
|
||||
* @param explodePar Ab wann Explodieren Würfel, Standard ist 10
|
||||
* @param explodedOncePar Würfel explodieren nur einma
|
||||
*
|
||||
* @return Ein {@link KeeprollResult}-Objekt mit den einzelnen Würfelergebnissen und Summen.
|
||||
* @throws IllegalArgumentException Wenn stufe < 1 oder optionale < 0 ist.
|
||||
*/
|
||||
public KeeprollResult performKeeprollRoll(int numberOfDicePar, int diceCountPar, int targetPar, int modifierPar, boolean unskilledPar, boolean emphasesPar, int explodePar, boolean explodedOncePar) {
|
||||
|
||||
if (numberOfDicePar < 1) {
|
||||
throw new IllegalArgumentException("Die Stufe muss mindestens 1 sein.");
|
||||
}
|
||||
if (diceCountPar < 0) {
|
||||
throw new IllegalArgumentException("Karma kann nicht negativ sein.");
|
||||
}
|
||||
if (targetPar < 0) {
|
||||
throw new IllegalArgumentException("Meister-Karma kann nicht negativ sein");
|
||||
}
|
||||
|
||||
this.numberOfDice = numberOfDicePar;
|
||||
this.diceCount = diceCountPar;
|
||||
this.target = targetPar;
|
||||
this.modifier = modifierPar;
|
||||
this.unskilled = unskilledPar;
|
||||
this.emphases = emphasesPar;
|
||||
this.explode = explodePar;
|
||||
this.explodedOnce = explodedOncePar;
|
||||
|
||||
|
||||
reset();
|
||||
|
||||
// Korrektur gewürfelte Würfel dürfen nicht kleiner sein als gezählte Würfel
|
||||
if(numberOfDice < diceCount && numberOfDice <= 10) {
|
||||
numberOfDice = diceCount;
|
||||
}
|
||||
|
||||
// Überzähle gewürfelte Würfel werden mit 2:1 auf gewertete Würfel verlegt
|
||||
if(numberOfDice > 10) {
|
||||
int diceOvflow = numberOfDice-10;
|
||||
numberOfDice = 10;
|
||||
|
||||
// Wenn gewertete 10 oder mehr, überzählige gewürfelte werden 1:2 auf Modifier gerechnet
|
||||
if(diceCount > 10) {
|
||||
modifier += diceOvflow*2;
|
||||
}
|
||||
else {
|
||||
if(diceCount + Math.floorDiv(diceOvflow, 2) <= 10) {
|
||||
diceCount += Math.floorDiv(diceOvflow, 2);
|
||||
}
|
||||
else {
|
||||
diceCount = 10;
|
||||
modifier += (diceCount + Math.floorDiv(diceOvflow, 2) - 10)*2;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(diceCount > 10) {
|
||||
modifier += (diceCount-10)*2;
|
||||
diceCount = 10;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Würfelarten durchgehen und Würfeln, Sonderwürfel werden imm am Schluss abgearbeitet
|
||||
StringBuilder resultConstruction = new StringBuilder();
|
||||
rollDice();
|
||||
|
||||
|
||||
// Modifikator separat behandeln, da er nicht gewürfelt wird
|
||||
if (modifier != 0) {
|
||||
resultInt += modifier; // Addiere den Modifikator zur Gesamtsum
|
||||
|
||||
if (!resultConstruction.isEmpty()) {
|
||||
resultConstruction.append(modifier > 0 ? " + " : " - "); // Füge + oder - hinzu
|
||||
}
|
||||
resultConstruction.append(Math.abs(modifier)); // Zeige den absoluten Wert an
|
||||
}
|
||||
|
||||
return new KeeprollResult(numberOfDice, diceCount, modifier, target, resultInt, rolls, isGlitches()); }
|
||||
|
||||
/**
|
||||
* Eine innere Klasse, die das Ergebnis einer Earthdawn-Probe kapselt.
|
||||
* Dies macht die Rückgabe mehrerer Werte einfacher und lesbarer.
|
||||
*/
|
||||
public static class KeeprollResult {
|
||||
private final String resultStructur;
|
||||
private final boolean glitch;
|
||||
|
||||
private final String title;
|
||||
|
||||
public boolean isGlitch() {
|
||||
return glitch;
|
||||
}
|
||||
|
||||
public KeeprollResult(int numberOfDice, int diceCount, int modifier, int target, int resultInt, result[] rolls, boolean glitch) {
|
||||
this.glitch = glitch;
|
||||
|
||||
String addition = "";
|
||||
if(modifier != 0) {
|
||||
if(modifier < 0) {
|
||||
addition += " - " + (modifier*-1) + " ";
|
||||
}
|
||||
else {
|
||||
addition += " + " + modifier + " ";
|
||||
}
|
||||
}
|
||||
if(target > 0) {
|
||||
addition += " Schwierigkeit " + target;
|
||||
}
|
||||
|
||||
title = numberOfDice + "k" + diceCount + addition + ": " + resultInt;
|
||||
|
||||
StringBuilder description = new StringBuilder();
|
||||
for(int i = 0; i < numberOfDice; i++) {
|
||||
if(description.length() > 0) {
|
||||
description.append(", ");
|
||||
}
|
||||
description.append(rolls[i].getText());
|
||||
}
|
||||
|
||||
resultStructur = description.toString();
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return "(" + resultStructur + ")";
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public boolean isGlitches() {
|
||||
return glitches;
|
||||
}
|
||||
|
||||
private void rollDice() {
|
||||
rolls = new result[numberOfDice];
|
||||
int [][] sortRolls = new int[numberOfDice][2];
|
||||
resultInt = 0;
|
||||
|
||||
for(int i = 0; i < numberOfDice; i++) {
|
||||
rolls[i] = new result();
|
||||
rolls[i].setMaxReroll(explodedOnce).setReroll1(emphases).setExplode(explode).setNoreroll(unskilled);
|
||||
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--) {
|
||||
resultInt += sortRolls[i-1][1];
|
||||
rolls[sortRolls[i-1][0]].setMarket();
|
||||
}
|
||||
resultInt += modifier;
|
||||
|
||||
// Border Farbe
|
||||
if(resultInt < target) {
|
||||
glitches = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -24,11 +24,8 @@ public class dice extends ListenerAdapter {
|
||||
private final language langDe = new language("de");
|
||||
private final language langEn = new language("en");
|
||||
|
||||
private final help helpDe = new help("de");
|
||||
private final help helpEn = new help("En");
|
||||
|
||||
private language activLang;
|
||||
private help activHelp;
|
||||
|
||||
private final db_connect db;
|
||||
|
||||
|
||||
@ -6,19 +6,18 @@ public class result {
|
||||
private StringBuilder text;
|
||||
private int value;
|
||||
private final int diceart;
|
||||
private Boolean reroll9;
|
||||
private Boolean reroll1;
|
||||
private Boolean maxReroll;
|
||||
private Boolean noreroll;
|
||||
private Integer explode;
|
||||
|
||||
public result() {
|
||||
diceart = 10;
|
||||
text = new StringBuilder();
|
||||
value = 0;
|
||||
reroll9 = false;
|
||||
reroll1 = false;
|
||||
maxReroll = false;
|
||||
noreroll = false;
|
||||
explode = 10;
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
@ -45,7 +44,6 @@ public class result {
|
||||
}
|
||||
|
||||
public result setReroll9(Boolean reroll9) {
|
||||
this.reroll9 = reroll9;
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -64,6 +62,11 @@ public class result {
|
||||
return this;
|
||||
}
|
||||
|
||||
public result setExplode(Integer explode) {
|
||||
this.explode = explode;
|
||||
return this;
|
||||
}
|
||||
|
||||
public result roll() {
|
||||
int dice;
|
||||
int rolls = 0;
|
||||
@ -87,11 +90,9 @@ public class result {
|
||||
value += dice;
|
||||
|
||||
if(!noreroll) {
|
||||
if (dice == 10) {
|
||||
if (dice >= explode) {
|
||||
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--;
|
||||
|
||||
@ -2,6 +2,7 @@ package de.ocame.wuerfelbot.Simpleroll;
|
||||
|
||||
|
||||
import de.ocame.wuerfelbot.commands.ICommand;
|
||||
import de.ocame.wuerfelbot.core.LoggerUtil;
|
||||
import de.ocame.wuerfelbot.output.DiceOutputFormatter;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
@ -80,8 +81,7 @@ public class SimplerollCommand implements ICommand {
|
||||
} catch (IllegalArgumentException e) {
|
||||
event.getChannel().sendMessage(outputFormatter.formatError(e.getMessage())).queue();
|
||||
} catch (Exception e) {
|
||||
System.err.println("Fehler beim Ausführen von Text-Befehl roll/r: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
LoggerUtil.log("error", "SimbelRollCommand", "Fehler beim Ausführen von Text-Befehl roll/r: " + e.getMessage());
|
||||
event.getChannel().sendMessage(outputFormatter.formatError("Ein unerwarteter Fehler ist beim Würfeln aufgetreten.")).queue();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,173 +0,0 @@
|
||||
package de.ocame.wuerfelbot.Simpleroll;
|
||||
|
||||
import de.ocame.wuerfelbot.Shadowrun.db_connect;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
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.hooks.ListenerAdapter;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class dice extends ListenerAdapter {
|
||||
|
||||
private final String prefixR;
|
||||
private final String prefixRoll;
|
||||
private final String prefixHelp;
|
||||
|
||||
private final language langDe = new language("de");
|
||||
private final language langEn = new language("en");
|
||||
|
||||
private final help helpDe = new help("de");
|
||||
private final help helpEn = new help("En");
|
||||
|
||||
private language activLang;
|
||||
private help activHelp;
|
||||
|
||||
private final db_connect db;
|
||||
|
||||
private final Map<String, String> channelList = new HashMap<>();
|
||||
|
||||
|
||||
public dice() {
|
||||
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<String, String> Einstellungen = db.getChannelSettings(event.getChannel().getId());
|
||||
channelList.put(event.getChannel().getId(), Einstellungen.get("lang"));
|
||||
}
|
||||
switch (channelList.get(event.getChannel().getId())) {
|
||||
case "en":
|
||||
activLang = langEn;
|
||||
break;
|
||||
case "de":
|
||||
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();
|
||||
|
||||
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().equalsIgnoreCase("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().equalsIgnoreCase("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;
|
||||
}
|
||||
|
||||
messageInterpreter mI = new messageInterpreter(activLang, MsgParts[1]);
|
||||
|
||||
|
||||
outputBox.setColor(Color.green);
|
||||
|
||||
outputBox.setTitle(getEffectiveName(event) + " " + mI.getHeaderOutput() + ": " + mI.getResult());
|
||||
|
||||
|
||||
if(mI.isComplex())
|
||||
outputBox.setDescription(mI.getResolveOutput() + "\n" + mI.getBodyOutput());
|
||||
else
|
||||
outputBox.setDescription(mI.getBodyOutput());
|
||||
|
||||
|
||||
event.getChannel().sendMessageEmbeds(outputBox.build()).queue();
|
||||
|
||||
//System.runFinalization();
|
||||
System.gc();
|
||||
|
||||
}
|
||||
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.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");
|
||||
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().sendMessageEmbeds(outputBox.build()).queue();
|
||||
}
|
||||
|
||||
|
||||
//7d4+19+1d7
|
||||
}
|
||||
@ -1,238 +0,0 @@
|
||||
package de.ocame.wuerfelbot.Simpleroll;
|
||||
|
||||
import de.ocame.wuerfelbot.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 final String prefixR;
|
||||
private final String prefixRoll;
|
||||
private final String prefixHelp;
|
||||
|
||||
private final language langDe = new language("de");
|
||||
private final language langEn = new language("en");
|
||||
|
||||
private final help helpDe = new help("de");
|
||||
private final help helpEn = new help("En");
|
||||
|
||||
private language activLang;
|
||||
private help activHelp;
|
||||
|
||||
private final db_connect db;
|
||||
|
||||
private final Map<String, String> 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<String, String> Einstellungen = db.getChannelSettings(event.getChannel().getId());
|
||||
channelList.put(event.getChannel().getId(), Einstellungen.get("lang"));
|
||||
}
|
||||
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().equalsIgnoreCase("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().equalsIgnoreCase("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 de.ocame.wuerfelbot.Shadowrun 5\n\n");
|
||||
result.append("**/ed** für de.ocame.wuerfelbot.Earthdawn 4\n\n");
|
||||
result.append("**/e** bzw **/engel** für die Arcane Version von de.ocame.wuerfelbot.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();
|
||||
}
|
||||
}
|
||||
@ -1,225 +0,0 @@
|
||||
package de.ocame.wuerfelbot.Simpleroll;
|
||||
|
||||
import java.util.Random;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
||||
public class messageInterpreter {
|
||||
|
||||
private Integer intResult = 0;
|
||||
|
||||
private final language activLang;
|
||||
|
||||
private final StringBuilder bodyOutput;
|
||||
|
||||
private final StringBuilder resolveOutput;
|
||||
|
||||
private final StringBuilder headerOutput;
|
||||
|
||||
private boolean isComplex;
|
||||
|
||||
public Integer getIntResult() {
|
||||
return intResult;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param activLang Aktive Sprache
|
||||
*/
|
||||
public messageInterpreter(language activLang) {
|
||||
this.activLang = activLang;
|
||||
bodyOutput = new StringBuilder();
|
||||
resolveOutput = new StringBuilder();
|
||||
headerOutput = new StringBuilder();
|
||||
isComplex = false;
|
||||
}
|
||||
public messageInterpreter(language activLang, String Input) {
|
||||
this(activLang);
|
||||
inputInterpreter(Input);
|
||||
}
|
||||
|
||||
public void inputInterpreter(String Input) {
|
||||
|
||||
if(Input.trim().toLowerCase().replace(" ", "").matches("\\d+")) {
|
||||
Input = Input.trim().toLowerCase().replace(" ", "") + "w6";
|
||||
}
|
||||
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());
|
||||
|
||||
}
|
||||
//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%", 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;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,69 +0,0 @@
|
||||
package de.ocame.wuerfelbot.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;
|
||||
}
|
||||
}
|
||||
@ -1,302 +0,0 @@
|
||||
package de.ocame.wuerfelbot.Vampire;
|
||||
|
||||
import de.ocame.wuerfelbot.Shadowrun.db_connect;
|
||||
import de.ocame.wuerfelbot.Simpleroll.help;
|
||||
import de.ocame.wuerfelbot.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 final String prefixlong;
|
||||
private final String prefixShort;
|
||||
private String prefixVeryShort;
|
||||
|
||||
private final language langDe = new language("de");
|
||||
private final language langEn = new language("en");
|
||||
|
||||
private final help helpDe = new help("de");
|
||||
private final help helpEn = new help("En");
|
||||
|
||||
private language activLang;
|
||||
private help activHelp;
|
||||
|
||||
private final db_connect db;
|
||||
|
||||
private final Map<String, String> 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<String, String> Einstellungen = db.getChannelSettings(event.getChannel().getId());
|
||||
channelList.put(event.getChannel().getId(), Einstellungen.get("lang"));
|
||||
}
|
||||
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.equalsIgnoreCase("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.equalsIgnoreCase("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.equalsIgnoreCase("help") || msgText.equalsIgnoreCase("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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,105 +0,0 @@
|
||||
package de.ocame.wuerfelbot.Vampire;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class result {
|
||||
private StringBuilder text;
|
||||
private int value;
|
||||
private final 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;
|
||||
}
|
||||
}
|
||||
@ -2,6 +2,8 @@ package de.ocame.wuerfelbot.commands;
|
||||
|
||||
|
||||
import de.ocame.wuerfelbot.Earthdawn.EarthdawnCommand;
|
||||
import de.ocame.wuerfelbot.Engel.EngelCommand;
|
||||
import de.ocame.wuerfelbot.Keeproll.KeeprollCommand;
|
||||
import de.ocame.wuerfelbot.Simpleroll.SimplerollCommand;
|
||||
import de.ocame.wuerfelbot.core.LoggerUtil;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
@ -34,6 +36,9 @@ public class CommandManager {
|
||||
// Füge deine Befehlsimplementierungen hier hinzu
|
||||
//addCommand(new SimpleRollCommand());
|
||||
addCommand(new EarthdawnCommand());
|
||||
addCommand(new EngelCommand());
|
||||
addCommand(new KeeprollCommand());
|
||||
|
||||
SimplerollCommand simplerollCmd = new SimplerollCommand();
|
||||
addCommand(simplerollCmd); // Registriert unter "roll"
|
||||
commands.put("r", simplerollCmd); // Alias für SimpleRollCommand
|
||||
|
||||
@ -1,41 +0,0 @@
|
||||
package de.ocame.wuerfelbot.dicebase;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class DiceResult {
|
||||
private final List<Integer> rolls;
|
||||
private final int total;
|
||||
private final String breakdown;
|
||||
private final boolean glitch;
|
||||
|
||||
public DiceResult(List<Integer> rolls, int total, String breakdown, boolean glitch) {
|
||||
this.rolls = rolls;
|
||||
this.total = total;
|
||||
this.breakdown = breakdown;
|
||||
this.glitch = glitch;
|
||||
}
|
||||
|
||||
public List<Integer> getRolls() {
|
||||
return rolls;
|
||||
}
|
||||
|
||||
public int getTotal() {
|
||||
return total;
|
||||
}
|
||||
|
||||
public String getBreakdown() {
|
||||
return breakdown;
|
||||
}
|
||||
|
||||
public boolean isGlitch() {
|
||||
return glitch;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Ergebnis: " + total + "\n" +
|
||||
"Würfe: " + rolls + "\n" +
|
||||
"Details: " + breakdown +
|
||||
(glitch ? "\n Patzer erkannt!" : "");
|
||||
}
|
||||
}
|
||||
@ -1,24 +0,0 @@
|
||||
package de.ocame.wuerfelbot.dicebase;
|
||||
|
||||
import de.ocame.wuerfelbot.dicebase.DiceResult;
|
||||
|
||||
public interface DiceSystem {
|
||||
/**
|
||||
* Gibt den internen Namen des Systems zurück, z.B. "earthdawn" oder "shadowrun".
|
||||
*/
|
||||
String getName();
|
||||
|
||||
/**
|
||||
* Führt einen Wurf mit dem angegebenen Nutzereingabe-String aus.
|
||||
* @param input Der Eingabestring, z.B. "5" für Earthdawn-Stufe 5 oder "4w6+1" für klassische Systeme.
|
||||
* @return Ein DiceResult-Objekt mit allen relevanten Würfelinformationen.
|
||||
*/
|
||||
DiceResult roll(String input);
|
||||
|
||||
/**
|
||||
* Gibt eine kurze Beschreibung oder Hilfe zu diesem Würfelsystem zurück.
|
||||
*/
|
||||
default String getDescription() {
|
||||
return "Kein Beschreibungstext verfügbar.";
|
||||
}
|
||||
}
|
||||
@ -1,96 +0,0 @@
|
||||
package de.ocame.wuerfelbot.dicebase;
|
||||
|
||||
import de.ocame.wuerfelbot.Earthdawn.language;
|
||||
import de.ocame.wuerfelbot.Earthdawn.messageInterpreter;
|
||||
import de.ocame.wuerfelbot.Earthdawn.step;
|
||||
import de.ocame.wuerfelbot.Shadowrun.db_connect;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
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.hooks.ListenerAdapter;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class dice extends ListenerAdapter {
|
||||
|
||||
private final String prefixSr;
|
||||
|
||||
private final language langDe = new language("de");
|
||||
private final language langEn = new language("en");
|
||||
|
||||
private language activLang;
|
||||
|
||||
private final db_connect db;
|
||||
|
||||
private final Map<String, String> channelList = new HashMap<>();
|
||||
|
||||
private final step dieRoll = new step();
|
||||
|
||||
|
||||
public dice() {
|
||||
this.prefixSr = "/ed";
|
||||
//this.prefixIni = "/ini";
|
||||
|
||||
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<String, String> Einstellungen = db.getChannelSettings(event.getChannel().getId());
|
||||
channelList.put(event.getChannel().getId(), Einstellungen.get("lang"));
|
||||
}
|
||||
switch (channelList.get(event.getChannel().getId())) {
|
||||
case "de":
|
||||
activLang = langDe;
|
||||
break;
|
||||
case "en":
|
||||
activLang = langEn;
|
||||
break;
|
||||
default:
|
||||
activLang = langDe;
|
||||
|
||||
}
|
||||
User author = event.getAuthor();
|
||||
author.isBot();
|
||||
if (true) {
|
||||
if (event.getMessage().getContentRaw().startsWith(this.prefixSr))
|
||||
this.roll(event);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @param event JDA Event
|
||||
*/
|
||||
private void roll(MessageReceivedEvent 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() + " ";
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,39 +0,0 @@
|
||||
package de.ocame.wuerfelbot.dicebase.output;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
public class OutputContentElement {
|
||||
|
||||
private final String message;
|
||||
private final String image;
|
||||
private final Color color;
|
||||
|
||||
public OutputContentElement(String message) {
|
||||
this.message = message;
|
||||
this.image = null;
|
||||
this.color = new Color(36, 153, 245);
|
||||
}
|
||||
public OutputContentElement(String message, String image) {
|
||||
this.message = message;
|
||||
this.image = image;
|
||||
this.color = new Color(36, 153, 245);
|
||||
}
|
||||
public OutputContentElement(String message, String image, Color color) {
|
||||
this.message = message;
|
||||
this.image = image;
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public String getImage() {
|
||||
return image;
|
||||
}
|
||||
|
||||
public Color getColor() {
|
||||
return color;
|
||||
}
|
||||
|
||||
}
|
||||
@ -17,15 +17,11 @@ public class DiceOutputFormatter {
|
||||
*/
|
||||
|
||||
public EmbedBuilder DCDefaultOutput(String title, String description, boolean glitch) {
|
||||
return DCDefaultOutput(title, description, glitch?Color.red:Color.green);
|
||||
}
|
||||
public EmbedBuilder DCDefaultOutput(String title, String description, Color color) {
|
||||
EmbedBuilder outputBox = new EmbedBuilder();
|
||||
|
||||
if(glitch) { // Patzer
|
||||
outputBox.setColor(Color.red);
|
||||
}
|
||||
else { // Erfolg
|
||||
outputBox.setColor(Color.green);
|
||||
}
|
||||
|
||||
outputBox.setColor(color);
|
||||
outputBox.setTitle(title);
|
||||
outputBox.setDescription(description);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user