commit 99713dca2f63576b9bc801b4f5bfafcec0de017e
parent 51cfce173296faf0e8327d0c8c24450ae0bda556
Author: Wim Dupont <wim@wimdupont.com>
Date: Fri, 7 Nov 2025 07:44:24 +0100
added spin configuration
Diffstat:
1 file changed, 29 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/wimdupont/sxcybot/listeners/member/SpinListener.java b/src/main/java/com/wimdupont/sxcybot/listeners/member/SpinListener.java
@@ -4,12 +4,17 @@ 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.entities.channel.unions.MessageChannelUnion;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import net.dv8tion.jda.api.requests.restaction.pagination.PinnedMessagePaginationAction.PinnedMessage;
import org.springframework.data.util.Pair;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.awt.Color;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Map;
import java.util.random.RandomGenerator;
@Component
@@ -20,12 +25,15 @@ public class SpinListener implements Listener {
var channel = event.getChannel();
try {
var bounds = getBounds(event.getMessage().getContentRaw());
- var random = String.valueOf(getRandom(bounds));
+ var random = getRandom(bounds);
+ var reward = getRewards(channel).get(random);
EmbedBuilder embedBuilder = new EmbedBuilder();
embedBuilder.setColor(Color.red);
embedBuilder.setTitle(String.format("Spinning Result (%s)", bounds));
- embedBuilder.setDescription(random);
+ embedBuilder.setDescription(reward == null
+ ? "You've rolled **%d**!".formatted(random)
+ : "You've rolled **%d** and won: **%s**!".formatted(random, reward));
channel.sendMessageEmbeds(embedBuilder.build()).queue();
} catch (Exception e) {
@@ -64,4 +72,23 @@ public class SpinListener implements Listener {
: commandLength);
}
+ private Map<Integer, String> getRewards(MessageChannelUnion channel) {
+ var rewards = new HashMap<Integer, String>();
+ var configMessage = channel.retrievePinnedMessages()
+ .stream()
+ .filter(f -> f.getMessage().getContentRaw().toLowerCase().contains("item prize pool"))
+ .max(Comparator.comparing(PinnedMessage::getTimePinned))
+ .map(f -> f.getMessage().getContentRaw());
+
+ for (String line : configMessage.orElse("").split("\n")) {
+ if (StringUtils.hasLength(line)) {
+ var parts = line.split("\\)");
+ if (parts.length == 2) {
+ rewards.put(Integer.parseInt(parts[0].trim()), parts[1].trim());
+ }
+ }
+ }
+ return rewards;
+ }
+
}