sxcybot

OSRS oriented Discord Bot
git clone git://git.wimdupont.com/sxcybot.git
Log | Files | Refs | README | LICENSE

commit 4755eaa04cac6b3936626238d8cae92d65667532
parent 32491b2ad3b44e0bf15b9a16278c292cabdd7af0
Author: Wim Dupont <wim@wimdupont.com>
Date:   Fri, 19 Jul 2024 22:13:16 +0200

retrieve textchannels by name

Diffstat:
Msrc/main/java/com/wimdupont/sxcybot/services/PvMRoleResolver.java | 40+++++++++++++++++++++++++---------------
Msrc/main/java/com/wimdupont/sxcybot/services/guild/pvmrole/PvmRoleAssignerService.java | 6++++--
Msrc/main/java/com/wimdupont/sxcybot/util/ReleaseNotesUtil.java | 10++++++----
3 files changed, 35 insertions(+), 21 deletions(-)

diff --git a/src/main/java/com/wimdupont/sxcybot/services/PvMRoleResolver.java b/src/main/java/com/wimdupont/sxcybot/services/PvMRoleResolver.java @@ -2,12 +2,15 @@ package com.wimdupont.sxcybot.services; import com.wimdupont.sxcybot.enums.PvmRole; import com.wimdupont.sxcybot.exceptions.EntityNotFoundException; +import com.wimdupont.sxcybot.repository.guild.dao.ChannelDetail; import com.wimdupont.sxcybot.repository.guild.pvmrole.dao.PvmKcSnapshot; import com.wimdupont.sxcybot.repository.guild.pvmrole.dao.PvmRoleUser; import com.wimdupont.sxcybot.services.guild.ChannelDetailService; import com.wimdupont.sxcybot.services.guild.pvmrole.PvmRoleAssignerService; import com.wimdupont.sxcybot.services.guild.pvmrole.PvmRoleSnapshotComparatorService; import com.wimdupont.sxcybot.services.guild.pvmrole.PvmRoleUserService; +import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.MessageChannel; import net.dv8tion.jda.api.entities.PrivateChannel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,22 +57,29 @@ public class PvMRoleResolver { scoreBoard.put(pvmRole, new LinkedHashMap<>()); } channelDetailService.getJda().getGuilds().forEach(guild -> - channelDetailService.findAll().stream().findAny().ifPresent(channelDetail -> - (privateChannel == null ? guild.getTextChannelsByName(channelDetail.getPvmRoleChannel(), true) : List.of(privateChannel)) - .forEach(textChannel -> { - for (PvmRoleUser pvmRoleUser : pvmRoleUserService.findAll()) { - List<PvmKcSnapshot> pvmKcSnapshots = new ArrayList<>(); - try { - pvmKcSnapshots.add(pvmRoleSnapshotComparatorService.takeSnapshot(textChannel, pvmRoleUser, false, persist)); - } catch (EntityNotFoundException e) { - textChannel.sendMessage(e.getMessage()).queue(); - continue; - } - pvmRoleSnapshotComparatorService.updateScoreboard(pvmRoleUser, scoreBoard, persist ? null : pvmKcSnapshots); - } - pvmRoleAssignerService.postScoreboardAndAssignRoles(guild, textChannel, scoreBoard, channelDetail, persist); - }) + channelDetailService.findAll().forEach(channelDetail -> { + var textChannel = getTextChannel(guild, channelDetail, privateChannel); + for (PvmRoleUser pvmRoleUser : pvmRoleUserService.findAll()) { + List<PvmKcSnapshot> pvmKcSnapshots = new ArrayList<>(); + try { + pvmKcSnapshots.add(pvmRoleSnapshotComparatorService.takeSnapshot(textChannel, pvmRoleUser, false, persist)); + } catch (EntityNotFoundException e) { + textChannel.sendMessage(e.getMessage()).queue(); + continue; + } + pvmRoleSnapshotComparatorService.updateScoreboard(pvmRoleUser, scoreBoard, persist ? null : pvmKcSnapshots); + } + pvmRoleAssignerService.postScoreboardAndAssignRoles(guild, textChannel, scoreBoard, channelDetail, persist); + } ) ); } + + private MessageChannel getTextChannel(Guild guild, ChannelDetail channelDetail, PrivateChannel privateChannel) { + MessageChannel textChannel = null; + if (privateChannel == null) { + textChannel = guild.getTextChannelById(channelDetail.getPvmRoleChannel()); + } + return textChannel == null ? privateChannel : textChannel; + } } diff --git a/src/main/java/com/wimdupont/sxcybot/services/guild/pvmrole/PvmRoleAssignerService.java b/src/main/java/com/wimdupont/sxcybot/services/guild/pvmrole/PvmRoleAssignerService.java @@ -25,7 +25,8 @@ import java.util.Optional; @Transactional public class PvmRoleAssignerService { - public void postScoreboardAndAssignRoles(Guild guild, MessageChannel textChannel, Map<PvmRole, LinkedHashMap<PvmRoleUser, BigDecimal>> scoreBoard, ChannelDetail channelDetail, boolean persist) { + public void postScoreboardAndAssignRoles(Guild guild, MessageChannel textChannel, Map<PvmRole, + LinkedHashMap<PvmRoleUser, BigDecimal>> scoreBoard, ChannelDetail channelDetail, boolean persist) { for (PvmRole pvmRole : scoreBoard.keySet()) { String rolename = getRolename(pvmRole, channelDetail); EmbedBuilder embedBuilder = new EmbedBuilder(); @@ -46,7 +47,8 @@ public class PvmRoleAssignerService { int winningRank = 1; for (Map.Entry<PvmRoleUser, BigDecimal> entry : scoreBoard.get(pvmRole).entrySet()) { if (limit-- == 0) break; - Optional<Member> member = memberlist.stream().filter(f -> f.getUser().getId().equals(entry.getKey().getDiscordId())).findAny(); + Optional<Member> member = memberlist.stream() + .filter(f -> f.getUser().getId().equals(entry.getKey().getDiscordId())).findAny(); if (member.isPresent()) { embedBuilder.addField(String.format("#%s %s", i, entry.getKey().getRsn()), String.format("%s with a score of %s!", member.get(), entry.getValue()), false); if (i == winningRank && persist) { diff --git a/src/main/java/com/wimdupont/sxcybot/util/ReleaseNotesUtil.java b/src/main/java/com/wimdupont/sxcybot/util/ReleaseNotesUtil.java @@ -1,6 +1,7 @@ package com.wimdupont.sxcybot.util; +import com.wimdupont.sxcybot.repository.guild.dao.ChannelDetail; import com.wimdupont.sxcybot.services.guild.ChannelDetailService; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.JDA; @@ -41,10 +42,11 @@ public class ReleaseNotesUtil { embedBuilder.addField(entry.getKey(), entry.getValue(), false); } - channelDetailService.findAll().stream().findAny() - .ifPresent(detail -> jda.getTextChannelsByName(detail.getBotUpdateChannel(), false).forEach(f -> - f.sendMessageEmbeds(embedBuilder.build()).queue() - )); + for (ChannelDetail channelDetail : channelDetailService.findAll()) { + var channel = jda.getTextChannelById(channelDetail.getBotUpdateChannel()); + if (channel != null) + channel.sendMessageEmbeds(embedBuilder.build()).queue(); + } } }