MissingIdentifier/src/main/java/Modules/Dice.java

157 lines
5.2 KiB
Java

package Modules;
import Controll.GuildController;
import Controll.SuperModule;
import net.dv8tion.jda.api.events.GenericEvent;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.security.SecureRandom;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Dice extends SuperModule {
private final Logger logger = LoggerFactory.getLogger(Dice.class);
public static final String COMMAND = "dice";
/**
* Construcker of a Module
*
* @param guildController Guild where Module is used, each guild get its own Module
*/
public Dice(GuildController guildController) {
super(COMMAND, guildController);
}
@Override
public String getCommand() {
return COMMAND;
}
@Override
public String getDescription() {
return "Dice uhm some bits\n" +
"`-n NUMBER` number of repeats\n" +
"`-r NUMBER` range of digits";
}
@Override
public void execute(GenericEvent event) {
if (event instanceof GuildMessageReceivedEvent) {
GuildMessageReceivedEvent thisEvent = (GuildMessageReceivedEvent) event;
if (!isCommand(thisEvent.getMessage()))
return;
logger.debug(COMMAND + "triggered");
int numberOfTimes = 1;
int range = 6;
Matcher m = Pattern.compile("(?is:-n [0-9]+)").matcher(thisEvent.getMessage().getContentRaw());
if (m.find()) {
numberOfTimes = Integer.parseInt(m.group(0).replaceAll("^...", ""));
}
m = Pattern.compile("(?is:-r [0-9]+)").matcher(thisEvent.getMessage().getContentRaw());
if (m.find()) {
range = Integer.parseInt(m.group(0).replaceAll("^...", ""));
}
SecureRandom r = new SecureRandom();
StringBuilder sb = new StringBuilder();
sb.append("Your dices:\n");
if (range <= 6) {
if (numberOfTimes < 10) {
for (int i = 0; i < numberOfTimes; i++) {
switch (r.nextInt(range + 1)) {
case 1:
sb.append(" . \n");
break;
case 2:
sb.append(" :\n");
break;
case 3:
sb.append(" :.\n");
break;
case 4:
sb.append(" ::\n");
break;
case 5:
sb.append(" :.:\n");
break;
case 6:
sb.append(" :::\n");
break;
default:
i--;
break;
}
}
} else {
int[] counter = new int[]{0, 0, 0, 0, 0, 0, 0};
for (int i = 0; i < numberOfTimes; i++) {
int rand = r.nextInt(range + 1);
if (rand > 0)
counter[rand]++;
else
i--;
}
for (int i = 1; i <= range; i++) {
switch (i) {
case 1:
sb.append(counter[i]).append("x - .\n");
break;
case 2:
sb.append(counter[i]).append("x - :\n");
break;
case 3:
sb.append(counter[i]).append("x - :.\n");
break;
case 4:
sb.append(counter[i]).append("x - ::\n");
break;
case 5:
sb.append(counter[i]).append("x - :.:\n");
break;
case 6:
sb.append(counter[i]).append("x - :::\n");
break;
}
}
}
} else {
int[] counter = new int[range+1];
Arrays.fill(counter, 0);
for (int i = 0; i < numberOfTimes; i++){
int rand = r.nextInt(range+1);
if (rand > 0)
counter[rand]++;
else
i--;
}
for (int num = 1; num <= range; num++){
sb.append(counter[num]).append("x ").append(num).append("\n");
}
}
thisEvent.getChannel().sendMessage(sb.toString()).queue();
}
}
@Override
public String showSettings() {
return null;
}
}