447 lines
17 KiB
Java
Executable File
447 lines
17 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 okhttp3.internal.Internal;
|
|
import org.json.JSONArray;
|
|
import org.json.JSONObject;
|
|
|
|
import java.awt.*;
|
|
|
|
import java.security.SecureRandom;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.Random;
|
|
import java.util.Scanner;
|
|
import java.util.concurrent.ThreadLocalRandom;
|
|
|
|
public class dice extends ListenerAdapter {
|
|
|
|
private String prefixSr;
|
|
private String prefixIni;
|
|
private String prefixZitat;
|
|
private String prefixTest;
|
|
|
|
private language langDe = new language("de");
|
|
private language langEn = new language("en");
|
|
|
|
private language activLang;
|
|
|
|
private db_connect db;
|
|
|
|
|
|
private Map<String, String> channelList = new HashMap<>();
|
|
|
|
|
|
public dice() {
|
|
this.prefixSr = "/sr";
|
|
this.prefixIni = "/ini";
|
|
this.prefixTest = "/rollTest";
|
|
this.prefixZitat = "/zitat";
|
|
this.db = new db_connect();
|
|
}
|
|
|
|
@Override
|
|
public void onMessageReceived(MessageReceivedEvent event) {
|
|
if ((!event.getMessage().getContentRaw().startsWith(this.prefixSr)
|
|
&& !event.getMessage().getContentRaw().startsWith(this.prefixIni)
|
|
&& !event.getMessage().getContentRaw().startsWith(this.prefixZitat)
|
|
&& !event.getMessage().getContentRaw().startsWith(this.prefixTest))
|
|
|| event.getChannelType() != ChannelType.TEXT) {
|
|
return;
|
|
}
|
|
|
|
if(!channelList.containsKey(event.getChannel().getId())) {
|
|
channelList.put(event.getChannel().getId(), "de");
|
|
activLang = langDe;
|
|
}
|
|
else {
|
|
switch (channelList.get(event.getChannel().getId())) {
|
|
case "de":
|
|
activLang = langDe;
|
|
break;
|
|
case "en":
|
|
activLang = langEn;
|
|
break;
|
|
default:
|
|
activLang = langDe;
|
|
|
|
}
|
|
}
|
|
User author = event.getAuthor();
|
|
if (!author.isBot()) {
|
|
if (event.getMessage().getContentRaw().startsWith(this.prefixSr))
|
|
this.roll(event);
|
|
else if (event.getMessage().getContentRaw().startsWith(this.prefixIni))
|
|
this.ini(event);
|
|
else if (event.getMessage().getContentRaw().startsWith(this.prefixTest))
|
|
this.rollTest(event);
|
|
else 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());
|
|
}
|
|
|
|
}
|
|
/**
|
|
* 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 edge = false;
|
|
|
|
try {
|
|
// Prüfen ob Edge wurf
|
|
if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"+") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" +")) {
|
|
edge = true;
|
|
}
|
|
|
|
// korrikiert Edge eingabe von /sr + zu /sr+
|
|
String ContentRaw = event.getMessage().getContentRaw();
|
|
if(event.getMessage().getContentRaw().startsWith(this.prefixSr+" +")) {
|
|
ContentRaw = ContentRaw.replace(this.prefixSr+" +", this.prefixSr+"+ ").replace(" ", " ");
|
|
}
|
|
|
|
// Prüfen ob Leerer Command gesendet wird
|
|
String[] MsgParts = ContentRaw.split(" ", 2);
|
|
|
|
if(MsgParts.length < 2) {
|
|
String message = activLang.emptyCommand;
|
|
message = message.replace("%command%", this.prefixSr);
|
|
event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue();
|
|
return;
|
|
}
|
|
|
|
if(MsgParts[1].trim().matches(".*[^0-9].*")) { // es wurden andere zeichen als Zahlen gefunden
|
|
if(MsgParts[1].trim().toLowerCase().equals("de")) {
|
|
activLang = langDe;
|
|
channelList.put(event.getChannel().getId(), "de");
|
|
event.getChannel().sendMessage(event.getMember().getAsMention() + activLang.language).queue();
|
|
return;
|
|
}
|
|
else if(MsgParts[1].trim().toLowerCase().equals("en")) {
|
|
activLang = langEn;
|
|
channelList.put(event.getChannel().getId(), "en");
|
|
event.getChannel().sendMessage(event.getMember().getAsMention() + activLang.language).queue();
|
|
return;
|
|
}
|
|
|
|
if(MsgParts[1].trim().toLowerCase().replace(" ", "").matches("([0-9]*)[dw]([0-9].*)")) { // format besteh aus (Zahlen)d(Zahlen) oder (Zahlen)w(Zahlen)
|
|
String[] diceInterpreter = MsgParts[1].trim().toLowerCase().replace(" ", "").split("[wd]");
|
|
try {
|
|
diceart = Integer.parseInt(diceInterpreter[1]);
|
|
numberOfDice = Integer.parseInt(diceInterpreter[0]);
|
|
verteilung = new int[diceart];
|
|
}
|
|
catch (NumberFormatException e) {
|
|
String message = activLang.error;
|
|
message = message.replace("%command%", MsgParts[1].trim().toLowerCase());
|
|
event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue();
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
String message = activLang.error;
|
|
message = message.replace("%command%", MsgParts[1].trim());
|
|
event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue();
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
try {
|
|
numberOfDice = Integer.parseInt(MsgParts[1].trim().replace(" ", ""));
|
|
}
|
|
catch (NumberFormatException e) {
|
|
String message = activLang.error;
|
|
message = message.replace("%command%", MsgParts[1].trim());
|
|
event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue();
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
if(numberOfDice <= 0) {
|
|
String message = activLang.noNegativ;
|
|
event.getChannel().sendMessage(event.getMember().getAsMention() + message).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]++;
|
|
if((dice1 >= 4) || (dice1 == 0))
|
|
result.append("**").append(dice1+1).append("**");
|
|
else
|
|
result.append(dice1+1);
|
|
result.append(" ");
|
|
}
|
|
if (verteilung[0] >= (numberOfDice+bonusEdegeDice)/2f) {
|
|
glitches = true;
|
|
}
|
|
|
|
|
|
if(hits == 0 && !glitches) { // kein Erfolg, kein Patzer
|
|
outputBox.setColor(Color.gray);
|
|
}
|
|
else if(hits == 0 && glitches) { // kritischer Patzer
|
|
outputBox.setColor(Color.red);
|
|
}
|
|
else if(glitches) { // Patzer
|
|
outputBox.setColor(Color.yellow);
|
|
}
|
|
else { // Erfolg
|
|
outputBox.setColor(Color.green);
|
|
}
|
|
|
|
String addition = "";
|
|
if(bonusEdegeDice > 0) {
|
|
addition = " + " + bonusEdegeDice + activLang.dice + diceart;
|
|
}
|
|
|
|
String message = activLang.resultText;
|
|
//%numberOfDice%%dice%%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%";
|
|
message = message.replace("%numberOfDice%", String.valueOf(numberOfDice)).replace("%diceart%", String.valueOf(diceart)).replace("%EdgeDice%", addition).replace("%hits%", String.valueOf(hits)).replace("%oneHits%", String.valueOf(verteilung[0]));
|
|
outputBox.setTitle(event.getMember().getEffectiveName() + " " + message);
|
|
|
|
|
|
outputBox.setDescription("(" + result.toString().trim() + ")");
|
|
|
|
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();
|
|
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 ini(MessageReceivedEvent event) {
|
|
|
|
EmbedBuilder outputBox = new EmbedBuilder();
|
|
|
|
int dice1;
|
|
int numberOfDice = 1;
|
|
int diceart = 6;
|
|
int iniBase = 0;
|
|
int ini = 0;
|
|
StringBuilder result = new StringBuilder("");
|
|
|
|
try {
|
|
String[] MsgParts = event.getMessage().getContentRaw().split(" ", 2);
|
|
if(MsgParts.length < 2) { // Leerer Befehl
|
|
String message = activLang.emptyCommand;
|
|
message = message.replace("%command%", this.prefixIni);
|
|
event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue();
|
|
return;
|
|
}
|
|
|
|
if(MsgParts[1].trim().matches(".*[^0-9].*")) { // es wurden andere zeichen als Zahlen gefunden
|
|
if(MsgParts[1].trim().toLowerCase().equals("de")) {
|
|
activLang = langDe;
|
|
channelList.put(event.getChannel().getId(), "de");
|
|
event.getChannel().sendMessage(event.getMember().getAsMention() + activLang.language).queue();
|
|
return;
|
|
}
|
|
else if(MsgParts[1].trim().toLowerCase().equals("en")) {
|
|
activLang = langEn;
|
|
channelList.put(event.getChannel().getId(), "en");
|
|
event.getChannel().sendMessage(event.getMember().getAsMention() + activLang.language).queue();
|
|
return;
|
|
}
|
|
|
|
|
|
String[] iniParts = MsgParts[1].trim().toLowerCase().split("\\+", 2);
|
|
messageInterpreter mI = new messageInterpreter(event, activLang);
|
|
if(iniParts.length == 1) { // Nachricht hat kein + Zeichen
|
|
mI.inputInterpreter(iniParts[0]);
|
|
if(mI.isNum()) {
|
|
numberOfDice = mI.getIntResult();
|
|
}
|
|
else if(mI.isDice()) {
|
|
diceart = mI.getDiceart();
|
|
numberOfDice = mI.getNumberOfDice();
|
|
}
|
|
|
|
}
|
|
else {
|
|
mI.inputInterpreter(iniParts[0]); // Vor dem +
|
|
if(mI.isNum()) {
|
|
iniBase = mI.getIntResult();
|
|
}
|
|
else if(mI.isDice()) {
|
|
iniBase = mI.getNumberOfDice();
|
|
}
|
|
|
|
mI.inputInterpreter(iniParts[1]); // Nach dem +
|
|
if(mI.isNum()) {
|
|
numberOfDice = mI.getIntResult();
|
|
}
|
|
else if(mI.isDice()) {
|
|
diceart = mI.getDiceart();
|
|
numberOfDice = mI.getNumberOfDice();
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
else {
|
|
try {
|
|
numberOfDice = Integer.parseInt(MsgParts[1].trim().replace(" ", ""));
|
|
}
|
|
catch (NumberFormatException e) {
|
|
String message = activLang.error;
|
|
message = message.replace("%command%", MsgParts[1].trim());
|
|
event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(numberOfDice <= 0) {
|
|
String message = activLang.noNegativ;
|
|
event.getChannel().sendMessage(event.getMember().getAsMention() + message).queue();
|
|
return;
|
|
}
|
|
|
|
|
|
ini += iniBase;
|
|
for(int i = 0; i < numberOfDice; i++) {
|
|
dice1 = new Random().nextInt(diceart);
|
|
result.append(dice1+1).append(" ");
|
|
ini += (dice1+1);
|
|
}
|
|
outputBox.setColor(new Color(104, 34, 139));
|
|
|
|
|
|
String message = "%iniBase%+%numberOfDice%w%diceart%\tIni: %ini%"; //activLang.resultText;
|
|
//%numberOfDice%%dice%%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%";
|
|
message = message.replace("%numberOfDice%", String.valueOf(numberOfDice)).replace("%diceart%", String.valueOf(diceart))
|
|
.replace("%iniBase%", String.valueOf(iniBase)).replace("%ini%", String.valueOf(ini));
|
|
outputBox.setTitle(event.getMember().getEffectiveName() + " " + message);
|
|
|
|
|
|
outputBox.setDescription(String.valueOf(iniBase) + " + (" + result.toString().trim().replace(" ", "+") + ")");
|
|
|
|
event.getChannel().sendMessage(outputBox.build()).queue();
|
|
|
|
}
|
|
catch (NumberFormatException e) {
|
|
event.getChannel().sendMessage("Nope").queue();
|
|
}
|
|
catch (IllegalArgumentException e) {
|
|
event.getChannel().sendMessage(e.getMessage()).queue();
|
|
}
|
|
catch (Exception e) {
|
|
System.out.println("problem: " + e.getMessage());
|
|
}
|
|
|
|
}
|
|
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();
|
|
}
|
|
|
|
|
|
}
|