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.
This commit is contained in:
parent
baf88ed43e
commit
7083235d68
|
|
@ -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<DiscordRole> discordRoles = Utilities.getDiscordRolesForUser(uuid, member);
|
||||
event.deferReply(true).queue(interactionHook -> {
|
||||
List<DiscordRole> 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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user