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