Files
W-rfel-Bot/src/main/java/Shadowrun/dice.java

282 lines
11 KiB
Java
Executable File

package Shadowrun;
import net.dv8tion.jda.core.EmbedBuilder;
import net.dv8tion.jda.core.entities.ChannelType;
import net.dv8tion.jda.core.entities.User;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import net.dv8tion.jda.core.hooks.ListenerAdapter;
import org.json.JSONArray;
import org.json.JSONObject;
import java.awt.*;
import java.security.SecureRandom;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
public class dice extends ListenerAdapter {
private String prefixSr;
private String prefixZitat;
private String prefixTest;
public dice() {
this.prefixSr = "!sr";
this.prefixTest = "!rollTest";
this.prefixZitat = "!zitat";
}
@Override
public void onMessageReceived(MessageReceivedEvent event) {
if ((!event.getMessage().getContentRaw().startsWith(this.prefixSr) && !event.getMessage().getContentRaw().startsWith(this.prefixZitat) && !event.getMessage().getContentRaw().startsWith(this.prefixTest)) || event.getChannelType() != ChannelType.TEXT) {
return;
}
User author = event.getAuthor();
if (!author.isBot()) {
if (event.getMessage().getContentRaw().startsWith(this.prefixSr))
this.roll(event);
if (event.getMessage().getContentRaw().startsWith(this.prefixTest))
this.rollTest(event);
if (event.getMessage().getContentRaw().startsWith(this.prefixZitat))
this.zitat(event);
}
}
/**
* rolltest
*
* @param event JDA Event
*/
private void rollTest(MessageReceivedEvent event) {
EmbedBuilder test = new EmbedBuilder();
test.setTitle("Das ist ein Test");
test.setColor(Color.red);
test.setDescription("Text " + event.getMember().getAsMention());
int[] verteilung = new int[6];
int[] verteilung2 = new int[6];
int[] verteilung3 = new int[6];
int dice1, dice2, dice3;
try {
String[] MsgParts_exl_Mention = event.getMessage().getContentRaw().split(" ");
int rounds = Integer.parseInt(MsgParts_exl_Mention[1]);
if(rounds <= 0) {
event.getChannel().sendMessage("Nope").queue();
return;
}
for(int i = 0; i < rounds; i++) {
dice1 = new Random().nextInt(6);
dice2 = new SecureRandom().nextInt(6);
//dice3 = new ThreadLocalRandom().current().nextInt(6);
dice3 = ThreadLocalRandom.current().nextInt(0, 6);
verteilung[dice1]++;
verteilung2[dice2]++;
verteilung3[dice3]++;
}
for(int i = 0; i < 6; i++) {
float pro = verteilung[i]*100f/rounds;
test.addField(Integer.toString(i+1), Integer.toString(verteilung[i]) + " - " + String.format("%.2f", pro) + "%", true);
}
test.addBlankField(false);
for(int i = 0; i < 6; i++) {
float pro = verteilung2[i]*100f/rounds;
test.addField(Integer.toString(i+1), Integer.toString(verteilung2[i]) + " - " + String.format("%.2f", pro) + "%", true);
}
test.addBlankField(false);
for(int i = 0; i < 6; i++) {
float pro = verteilung3[i]*100f/rounds;
test.addField(Integer.toString(i+1), Integer.toString(verteilung3[i]) + " - " + String.format("%.2f", pro) + "%", true);
}
event.getChannel().sendMessage(test.build()).queue();
}
catch (NumberFormatException e) {
event.getChannel().sendMessage("Nope").queue();
}
catch (Exception e) {
System.out.println("problem: " + e.getMessage());
} finally {
}
}
/**
* 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 critGlitches = false;
boolean edge = false;
try {
if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"+")) {
edge = true;
}
String[] MsgParts = event.getMessage().getContentRaw().split(" ", 2);
if(MsgParts.length < 2) {
event.getChannel().sendMessage(event.getMember().getAsMention() + " der " + this.prefixSr + " befehl benötigt einen Wert").queue();
return;
}
if(MsgParts[1].trim().matches(".*[^0-9].*")) { // es wurden andere zeichen als Zahlen gefunden
if(MsgParts[1].trim().toLowerCase().replace(" ", "").matches("([0-9]*)[dw]([0-9].*)")) { // format besteh aus (Zahlen)d(Zahlen) oder (Zahlen)w(Zahlen)
String[] diceInterpreter = MsgParts[1].trim().toLowerCase().replace(" ", "").split("[wd]");
try {
diceart = Integer.parseInt(diceInterpreter[1]);
numberOfDice = Integer.parseInt(diceInterpreter[0]);
}
catch (NumberFormatException e) {
event.getChannel().sendMessage(event.getMember().getAsMention() + " Irgent was dummes ist passiert beim Verstehen von " + MsgParts[1].trim().toLowerCase()).queue();
return;
}
}
else {
event.getChannel().sendMessage(event.getMember().getAsMention() + " ich verstehe nicht was du von mir willst mit " + MsgParts[1].trim()).queue();
return;
}
}
else {
try {
numberOfDice = Integer.parseInt(MsgParts[1].trim().replace(" ", ""));
}
catch (NumberFormatException e) {
event.getChannel().sendMessage(event.getMember().getAsMention() + " Irgent was dummes ist passiert beim Verstehen von " + MsgParts[1].trim()).queue();
return;
}
}
/*
if(MsgParts[1].trim().toLowerCase().replace(" ", "").matches("^([0-9]*\\+)?[0-9]*([dw][0-9]*)?(\\+[0-9]*)?")) { // format besteh aus (Zahlen)+(Zahlen)d(Zahlen) oder (Zahlen)d(Zahlen)+(Zahlen)
String[] diceInterpreter = MsgParts[1].trim().toLowerCase().replace(" ", "").split("\\+");
try {
diceart = Integer.parseInt(diceInterpreter[1]);
numberOdDice = Integer.parseInt(diceInterpreter[0]);
}
catch (NumberFormatException e) {
event.getChannel().sendMessage(event.getMember().getAsMention() + " Irgent was dummes ist passiert beim Verstehen von " + MsgParts[1].trim().toLowerCase()).queue();
return;
}
}*/
if(numberOfDice <= 0) {
event.getChannel().sendMessage(event.getMember().getAsMention() + " es darf kein Negativen Wurf geben").queue();
return;
}
int bonusEdegeDice = 0;
for(int i = 0; i < numberOfDice+bonusEdegeDice; i++) {
dice1 = new Random().nextInt(diceart);
if(edge && dice1 == 5)
bonusEdegeDice++;
if(dice1 >= 4) {
hits++;
}
verteilung[dice1]++;
result.append(dice1+1);
result.append(" ");
}
if (verteilung[0] >= (numberOfDice+bonusEdegeDice)/2 && verteilung[0] > 0) {
glitches = true;
}
if(hits == 0) {
outputBox.setColor(Color.red);
if(glitches == true) {
outputBox.setDescription("**Kritischer Patzer** :,(");
}
else {
outputBox.setDescription("**nicht geschafft**");
}
}
else if(glitches == true) {
outputBox.setColor(Color.yellow);
outputBox.setDescription("**Patzer** :(");
}
else {
outputBox.setColor(Color.green);
if(hits == 1) {
outputBox.setDescription("**" + String.valueOf(hits) + " Erfolg**");
}
else if(hits < 4) {
outputBox.setDescription("**" + String.valueOf(hits) + " Erfolge**");
}
else if(hits < 6) {
outputBox.setDescription("**" + String.valueOf(hits) + " Erfolge**, das ist schon ordentlich");
}
else if(hits < 10) {
outputBox.setDescription("**" + String.valueOf(hits) + " Erfolge**, WOW sowas mal nachmachen");
}
else {
outputBox.setDescription("**" + String.valueOf(hits) + " Erfolge**, bist du Wahnsinnig?");
}
}
outputBox.setTitle(event.getMember().getEffectiveName() + " dein Wurf " + MsgParts[1] + " ergibt:");
outputBox.addField("Erfolge", String.valueOf(hits), true);
outputBox.addField("Misserfolge", String.valueOf(verteilung[0]), true);
outputBox.addField("Ergbenise", result.toString(), false);
for(int i = 0; i < diceart; i++) {
float pro = verteilung[i]*100f/numberOfDice;
//outputBox.addField(Integer.toString(i+1), Integer.toString(verteilung[i]) + " - " + String.format("%.2f", pro) + "%", true);
}
event.getChannel().sendMessage(outputBox.build()).queue();
}
catch (NumberFormatException e) {
event.getChannel().sendMessage("Nope").queue();
}
catch (Exception e) {
System.out.println("problem: " + e.getMessage());
} finally {
}
}
private void zitat(MessageReceivedEvent event) {
String[] quotes = new String[7];
quotes[0] = "*quiek quiek quiek*";
quotes[1] = "" +
"(\\\\_____/)\n" +
"( ͡ ͡° ͜ ʖ ͡ ͡°) *snuff snuff*\n" +
"\\\\╭☞ \\\\╭☞\n" +
"";
quotes[2] = "(づ。◕‿‿◕。)づ";
quotes[3] = "zzzZZZZZzzZZ";
quotes[4] = "piiiep";
quotes[5] = "grrrrr";
//quotes[6] = "ʕᵔᴥᵔʔ =*Auto translator*=> In meiner psychophysischen Konstituton manifestiert sich eine absolute Dominanz positiver Effekte für die Individualität Deiner Person. ";
int dice = new Random().nextInt(600);
event.getChannel().sendMessage(quotes[dice%6]).queue();
}
}