From 7083235d68182812cd668da5dd9708234ae75cf6 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Fri, 24 Jan 2025 20:23:08 +0100 Subject: [PATCH] Refactor account linking to use InteractionHook Updated the account linking process to use `InteractionHook` for improved response handling and consistency. Replaced direct event replies with deferred interactions and streamlined role management and error messages. This ensures better compatibility with asynchronous operations and cleaner user feedback. --- .../commandManager/commands/CommandLink.java | 36 ++++++++++--------- .../proxydiscordlink/util/Utilities.java | 6 ++++ 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/alttd/proxydiscordlink/bot/commandManager/commands/CommandLink.java b/src/main/java/com/alttd/proxydiscordlink/bot/commandManager/commands/CommandLink.java index 208b57c..3b774da 100644 --- a/src/main/java/com/alttd/proxydiscordlink/bot/commandManager/commands/CommandLink.java +++ b/src/main/java/com/alttd/proxydiscordlink/bot/commandManager/commands/CommandLink.java @@ -11,6 +11,7 @@ import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; +import net.dv8tion.jda.api.interactions.InteractionHook; import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions; import net.dv8tion.jda.api.interactions.commands.OptionMapping; import net.dv8tion.jda.api.interactions.commands.OptionType; @@ -53,23 +54,25 @@ public class CommandLink extends DiscordCommand { return; } - List discordRoles = Utilities.getDiscordRolesForUser(uuid, member); + event.deferReply(true).queue(interactionHook -> { + List discordRoles = Utilities.getDiscordRolesForUser(uuid, member); - DiscordLinkPlayer discordLinkPlayer = new DiscordLinkPlayer( - member.getIdLong(), - uuid, - getUsername(uuid), - member.getUser().getName(), - false, - true, - discordRoles.stream() - .map(DiscordRole::getInternalName) - .collect(Collectors.toList())); + DiscordLinkPlayer discordLinkPlayer = new DiscordLinkPlayer( + member.getIdLong(), + uuid, + getUsername(uuid), + member.getUser().getName(), + false, + true, + discordRoles.stream() + .map(DiscordRole::getInternalName) + .collect(Collectors.toList())); - linkAccount(discordLinkPlayer, event); + linkAccount(discordLinkPlayer, event, interactionHook); + }); } - private void linkAccount(DiscordLinkPlayer discordLinkPlayer, SlashCommandInteractionEvent event) { + private void linkAccount(DiscordLinkPlayer discordLinkPlayer, SlashCommandInteractionEvent event, InteractionHook interactionHook) { discordLinkPlayer.updateDiscord( DiscordRole.getDiscordRoles().stream() .filter(role -> discordLinkPlayer.getRoles().contains(role.getInternalName())) @@ -87,7 +90,7 @@ public class CommandLink extends DiscordCommand { Guild guild = event.getGuild(); Member member = event.getMember(); if (guild == null || member == null) { - Utilities.commandErrAutoRem("Unable to find guild", event); + Utilities.commandErrAutoRem("Unable to find guild", interactionHook); return; } if (player != null || user != null) { @@ -104,11 +107,10 @@ public class CommandLink extends DiscordCommand { discordLinkPlayer.getUsername()); } - event.replyEmbeds(Utilities.genericSuccessEmbed("Success","You have successfully linked " + + interactionHook.editOriginalEmbeds(Utilities.genericSuccessEmbed("Success","You have successfully linked " + discordLinkPlayer.getUsername() + " with " + discordLinkPlayer.getDiscordUsername() + "!")) - .setEphemeral(true) - .queue(result -> result.deleteOriginal().queueAfter(5, TimeUnit.SECONDS)); + .queue(result -> result.delete().queueAfter(5, TimeUnit.SECONDS)); DiscordLinkPlayer.addDiscordLinkPlayer(discordLinkPlayer); DiscordLink.getPlugin().getDatabase().syncPlayer(discordLinkPlayer); diff --git a/src/main/java/com/alttd/proxydiscordlink/util/Utilities.java b/src/main/java/com/alttd/proxydiscordlink/util/Utilities.java index 1b56f6e..8453988 100644 --- a/src/main/java/com/alttd/proxydiscordlink/util/Utilities.java +++ b/src/main/java/com/alttd/proxydiscordlink/util/Utilities.java @@ -15,6 +15,7 @@ import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.MessageEmbed; import net.dv8tion.jda.api.entities.Role; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; +import net.dv8tion.jda.api.interactions.InteractionHook; import net.dv8tion.jda.api.interactions.commands.build.CommandData; import net.dv8tion.jda.api.requests.RestAction; import net.kyori.adventure.text.minimessage.MiniMessage; @@ -218,6 +219,11 @@ public class Utilities { .queue(res -> res.deleteOriginal().queueAfter(5, TimeUnit.SECONDS)); } + public static void commandErrAutoRem(String text, InteractionHook event) { + event.editOriginalEmbeds(Utilities.genericErrorEmbed("Error", text)) + .queue(res -> res.delete().queueAfter(5, TimeUnit.SECONDS)); + } + public static boolean removeRole(UUID uuid, String group) { User user = getLuckPerms().getUserManager().getUser(uuid);