sxcybot

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

commit a34e7856419bb98475a057782f2db128c2b758a8
parent d2f4cf2ac42d7c7d0bd5e4453e17d5c5c21f6467
Author: Wim Dupont <wim@wimdupont.com>
Date:   Sat,  1 Apr 2023 20:27:20 +0200

delete pvm role user by RSN

Diffstat:
Msrc/main/java/com/wimdupont/sxcybot/listeners/admin/pvmrole/AddPvmListener.java | 1-
Msrc/main/java/com/wimdupont/sxcybot/listeners/admin/pvmrole/DeletePvmListener.java | 43+++++++++++++++++++++++++++++++++----------
Msrc/main/java/com/wimdupont/sxcybot/repository/guild/pvmrole/PvmRoleUserRepository.java | 1+
Msrc/main/java/com/wimdupont/sxcybot/repository/guild/pvmrole/dao/PvmRoleUser.java | 6------
Msrc/main/java/com/wimdupont/sxcybot/services/guild/pvmrole/PvmRoleUserService.java | 7+++++++
Msrc/main/java/com/wimdupont/sxcybot/util/JdaUtil.java | 8++++++--
Msrc/main/resources/releasenotes.csv | 2+-
7 files changed, 48 insertions(+), 20 deletions(-)

diff --git a/src/main/java/com/wimdupont/sxcybot/listeners/admin/pvmrole/AddPvmListener.java b/src/main/java/com/wimdupont/sxcybot/listeners/admin/pvmrole/AddPvmListener.java @@ -49,7 +49,6 @@ public class AddPvmListener implements PrivateListener { String creator = JdaUtil.getName(event).orElse(null); try { PvmRoleUser pvmRoleUser = pvmRoleUserService.save(PvmRoleUser.Builder.newBuilder() - .discordName(member.getEffectiveName()) .rsn(rsnReceiver.getMessage().getContentRaw()) .discordId(member.getUser().getId()) .createdBy(creator) diff --git a/src/main/java/com/wimdupont/sxcybot/listeners/admin/pvmrole/DeletePvmListener.java b/src/main/java/com/wimdupont/sxcybot/listeners/admin/pvmrole/DeletePvmListener.java @@ -1,18 +1,23 @@ package com.wimdupont.sxcybot.listeners.admin.pvmrole; +import com.wimdupont.sxcybot.enums.Command; import com.wimdupont.sxcybot.exceptions.EntityNotFoundException; import com.wimdupont.sxcybot.listeners.EventWaiterUtil; import com.wimdupont.sxcybot.listeners.PrivateListener; import com.wimdupont.sxcybot.repository.guild.pvmrole.dao.PvmRoleUser; import com.wimdupont.sxcybot.services.guild.pvmrole.PvmKcSnapshotService; import com.wimdupont.sxcybot.services.guild.pvmrole.PvmRoleUserService; +import com.wimdupont.sxcybot.util.Constants.Commands; import com.wimdupont.sxcybot.util.JdaUtil; +import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.entities.PrivateChannel; import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.priv.PrivateMessageReceivedEvent; import org.springframework.stereotype.Component; +import java.awt.Color; + @Component public class DeletePvmListener implements PrivateListener { @@ -31,19 +36,37 @@ public class DeletePvmListener implements PrivateListener { @Override public void proces(PrivateMessageReceivedEvent privateMessageReceivedEvent, MessageReceivedEvent event) { PrivateChannel privateChannel = privateMessageReceivedEvent.getChannel(); - privateChannel.sendMessage("Type the discord name of the user you want to delete.").queue(); + EmbedBuilder embedBuilder = new EmbedBuilder(); + embedBuilder.setColor(Color.RED); + embedBuilder.setTitle("Delete user from PvM competition."); + embedBuilder.addField("Type the discord name or RSN of the user you want to delete.", "", false); + privateChannel.sendMessageEmbeds(embedBuilder.build()).queue(); + embedBuilder.clearFields(); eventWaiterUtil.waitForPrivateChannelEvent(discordNameReceiver -> { - String discordName = discordNameReceiver.getMessage().getContentRaw(); + String name = discordNameReceiver.getMessage().getContentRaw(); event.getGuild().loadMembers().onSuccess(members -> { try { - var userId = JdaUtil.getUserByName(members, discordName) - .map(User::getId) - .orElseThrow(() -> new EntityNotFoundException(String.format("No discord user found with name: %s", discordName))); - PvmRoleUser pvmRoleUser = pvmRoleUserService.findByDiscordId(userId); - pvmKcSnapshotService.deleteAll(pvmKcSnapshotService.findAllByPvmRoleUser(pvmRoleUser)); - pvmRoleUserService.delete(pvmRoleUser); - privateChannel.sendMessage(String.format("%s has been succesfully deleted.", pvmRoleUser)).queue(); - event.getChannel().sendMessage(String.format("PvM competitor %s has been deleted by %s", discordName, JdaUtil.getUser(event))).queue(); + var userId = JdaUtil.getUserByName(members, name) + .map(User::getId); + PvmRoleUser pvmRoleUser = userId.isPresent() + ? pvmRoleUserService.findByDiscordId(userId.get()) + : pvmRoleUserService.findByRsn(name); + embedBuilder.addField("Confirm by typing ``yes or y``.", + String.format("Is " + System.lineSeparator() + "Discord: %s | RSN: %s " + System.lineSeparator() + "the correct member?" + , JdaUtil.getMemberById(members, pvmRoleUser.getDiscordId()).orElse(null), pvmRoleUser.getRsn()), false); + privateChannel.sendMessageEmbeds(embedBuilder.build()).queue(); + embedBuilder.clearFields(); + eventWaiterUtil.waitForPrivateChannelEvent(memberVerifyReceiver -> { + String verifyMessage = memberVerifyReceiver.getMessage().getContentRaw(); + if ("y".equalsIgnoreCase(verifyMessage) || "yes".equalsIgnoreCase(verifyMessage)) { + pvmKcSnapshotService.deleteAll(pvmKcSnapshotService.findAllByPvmRoleUser(pvmRoleUser)); + pvmRoleUserService.delete(pvmRoleUser); + privateChannel.sendMessage(String.format("%s has been succesfully deleted.", pvmRoleUser)).queue(); + event.getChannel().sendMessage(String.format("PvM competitor %s has been deleted by %s", name, JdaUtil.getUser(event))).queue(); + } else { + privateChannel.sendMessage(String.format("You can check all competitors with the \"%s\" command.", Commands.COMMAND_PREFIX + Command.PVMLIST.name().toLowerCase())).queue(); + } + }, privateMessageReceivedEvent, privateChannel); } catch (EntityNotFoundException e) { privateChannel.sendMessage(e.getMessage()).queue(); } diff --git a/src/main/java/com/wimdupont/sxcybot/repository/guild/pvmrole/PvmRoleUserRepository.java b/src/main/java/com/wimdupont/sxcybot/repository/guild/pvmrole/PvmRoleUserRepository.java @@ -10,4 +10,5 @@ import java.util.Optional; public interface PvmRoleUserRepository extends JpaRepository<PvmRoleUser, String> { Optional<PvmRoleUser> findByDiscordId(String discordId); + Optional<PvmRoleUser> findByRsn(String rsn); } diff --git a/src/main/java/com/wimdupont/sxcybot/repository/guild/pvmrole/dao/PvmRoleUser.java b/src/main/java/com/wimdupont/sxcybot/repository/guild/pvmrole/dao/PvmRoleUser.java @@ -100,7 +100,6 @@ public class PvmRoleUser { public static final class Builder { private String id; - private String discordName; private String rsn; private String discordId; private LocalDateTime createdDate; @@ -120,11 +119,6 @@ public class PvmRoleUser { return this; } - public Builder discordName(String val) { - discordName = val; - return this; - } - public Builder rsn(String val) { rsn = val; return this; diff --git a/src/main/java/com/wimdupont/sxcybot/services/guild/pvmrole/PvmRoleUserService.java b/src/main/java/com/wimdupont/sxcybot/services/guild/pvmrole/PvmRoleUserService.java @@ -37,6 +37,13 @@ public class PvmRoleUserService { , System.lineSeparator(), COMMAND_PREFIX + PVMLIST.name().toLowerCase()))); } + public PvmRoleUser findByRsn(String rsn) throws EntityNotFoundException { + LOGGER.debug("Searching pvmRoleUser by RSN: {}", rsn); + return pvmRoleUserRepository.findByRsn(rsn).orElseThrow(() + -> new EntityNotFoundException(String.format("No such discord user found in the PvM competition.%sYou can check all competitors with the \"%s\" command." + , System.lineSeparator(), COMMAND_PREFIX + PVMLIST.name().toLowerCase()))); + } + public void delete(PvmRoleUser pvmRoleUser) { pvmRoleUserRepository.delete(pvmRoleUser); } diff --git a/src/main/java/com/wimdupont/sxcybot/util/JdaUtil.java b/src/main/java/com/wimdupont/sxcybot/util/JdaUtil.java @@ -29,10 +29,14 @@ public class JdaUtil { } public static Optional<String> getNameById(List<Member> members, String discordId) { + return getMemberById(members, discordId) + .map(Member::getEffectiveName); + } + + public static Optional<Member> getMemberById(List<Member> members, String discordId) { return members.stream() .filter(f -> f.getUser().getId().equals(discordId)) - .findAny() - .map(Member::getEffectiveName); + .findAny(); } public static User getUser(MessageReceivedEvent event) { diff --git a/src/main/resources/releasenotes.csv b/src/main/resources/releasenotes.csv @@ -1 +1 @@ -Discord names of PvM Competitors are removed;This is a follow-up on the previous update to always search PvM competitors on their unique discord ID instead of discord name. This way it is unaffected by namechanges. +Delete PvM Role by RSN added;Because of the previous changes, deletions were not possible if discordId was not findable by name. This solves this issue.