commit 18caa976a148c7dde0870cf17dfdea8f71d29896
parent 3c10a0fe35c04594aa5024b2d2ea5b78722c7e36
Author: Wim Dupont <wim@wimdupont.com>
Date: Wed, 30 Oct 2024 23:14:43 +0100
added spin command
Diffstat:
3 files changed, 74 insertions(+), 1 deletion(-)
diff --git a/src/main/java/com/wimdupont/sxcybot/enums/Command.java b/src/main/java/com/wimdupont/sxcybot/enums/Command.java
@@ -4,6 +4,7 @@ public enum Command {
FORUM("Get forum link - BUMP IT UP!"),
PING("Get time in ms for bot to respond."),
+ SPIN("Get random number; separate command by numbers to specify min/max (default is 1-20)."),
RULE("Show rule by using command with rule number, separated by space."),
RULES("Show list of all the rules."),
// EVENT("Create an event."),
diff --git a/src/main/java/com/wimdupont/sxcybot/listeners/CommandListener.java b/src/main/java/com/wimdupont/sxcybot/listeners/CommandListener.java
@@ -15,6 +15,7 @@ import com.wimdupont.sxcybot.listeners.member.PvmRoleCheckListener;
import com.wimdupont.sxcybot.listeners.member.PvmRolePollListener;
import com.wimdupont.sxcybot.listeners.member.RuleListener;
import com.wimdupont.sxcybot.listeners.member.RulesListener;
+import com.wimdupont.sxcybot.listeners.member.SpinListener;
import com.wimdupont.sxcybot.listeners.member.StatsListener;
import jakarta.annotation.Nonnull;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
@@ -38,6 +39,7 @@ public class CommandListener {
private final HiscoreBossListener hiscoreBossListener;
private final PvmRoleCheckListener pvmRoleCheckListener;
private final PvmRolePollListener pvmRolePollListener;
+ private final SpinListener spinListener;
public CommandListener(RuleListener ruleListener,
RulesListener rulesListener,
@@ -53,7 +55,8 @@ public class CommandListener {
PvmListListener pvmListListener,
HiscoreBossListener hiscoreBossListener,
PvmRoleCheckListener pvmRoleCheckListener,
- PvmRolePollListener pvmRolePollListener) {
+ PvmRolePollListener pvmRolePollListener,
+ SpinListener spinListener) {
this.ruleListener = ruleListener;
this.rulesListener = rulesListener;
this.pingListener = pingListener;
@@ -69,6 +72,7 @@ public class CommandListener {
this.hiscoreBossListener = hiscoreBossListener;
this.pvmRoleCheckListener = pvmRoleCheckListener;
this.pvmRolePollListener = pvmRolePollListener;
+ this.spinListener = spinListener;
}
public void executeCommand(@Nonnull MessageReceivedEvent event, Command command) {
@@ -91,6 +95,7 @@ public class CommandListener {
case BOSSLIST -> hiscoreBossListener.process(event);
case PVMPOLL -> pvmRolePollListener.process(event);
case PVMCHECK -> pvmRoleCheckListener.process(event);
+ case SPIN -> spinListener.process(event);
case HELP -> helpListener.process(event);
}
}
diff --git a/src/main/java/com/wimdupont/sxcybot/listeners/member/SpinListener.java b/src/main/java/com/wimdupont/sxcybot/listeners/member/SpinListener.java
@@ -0,0 +1,67 @@
+package com.wimdupont.sxcybot.listeners.member;
+
+import com.wimdupont.sxcybot.enums.Command;
+import com.wimdupont.sxcybot.listeners.Listener;
+import com.wimdupont.sxcybot.util.Constants.Commands;
+import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import org.springframework.data.util.Pair;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import java.awt.Color;
+import java.util.random.RandomGenerator;
+
+@Component
+public class SpinListener implements Listener {
+
+ @Override
+ public void process(MessageReceivedEvent event) {
+ var channel = event.getChannel();
+ try {
+ var bounds = getBounds(event.getMessage().getContentRaw());
+ var random = String.valueOf(getRandom(bounds));
+
+ EmbedBuilder embedBuilder = new EmbedBuilder();
+ embedBuilder.setColor(Color.red);
+ embedBuilder.setTitle(String.format("Spinning Result (%s)", bounds));
+ embedBuilder.setDescription(random);
+
+ channel.sendMessageEmbeds(embedBuilder.build()).queue();
+ } catch (Exception e) {
+ channel.sendMessage(e.getMessage()).queue();
+ }
+ }
+
+ private Pair<Integer, Integer> getBounds(String params) {
+ int min = 1, max = 20;
+ params = getArgs(params);
+
+ var args = StringUtils.hasLength(params)
+ ? params.split("[ -/]")
+ : null;
+
+ if (args != null) {
+ if (args.length == 1) {
+ max = Integer.parseInt(args[0]);
+ }
+ if (args.length > 1) {
+ min = Integer.parseInt(args[0]);
+ max = Integer.parseInt(args[1]);
+ }
+ }
+ return Pair.of(min, max);
+ }
+
+ private int getRandom(Pair<Integer, Integer> bounds) {
+ return RandomGenerator.getDefault().nextInt(bounds.getFirst(), bounds.getSecond() + 1);
+ }
+
+ private String getArgs(String message) {
+ var commandLength = Commands.COMMAND_PREFIX.length() + Command.SPIN.name().length();
+ return message.substring(message.length() > commandLength
+ ? commandLength + 1
+ : commandLength);
+ }
+
+}