sxcybot

Discord bot for OSRS based channels
git clone git://git.wimdupont.com/sxcybot.git
Log | Files | Refs | README | LICENSE

commit 18caa976a148c7dde0870cf17dfdea8f71d29896
parent 3c10a0fe35c04594aa5024b2d2ea5b78722c7e36
Author: Wim Dupont <wim@wimdupont.com>
Date:   Wed, 30 Oct 2024 23:14:43 +0100

added spin command

Diffstat:
Msrc/main/java/com/wimdupont/sxcybot/enums/Command.java | 1+
Msrc/main/java/com/wimdupont/sxcybot/listeners/CommandListener.java | 7++++++-
Asrc/main/java/com/wimdupont/sxcybot/listeners/member/SpinListener.java | 67+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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); + } + +}