From b0d3498d1cb563df057001e9d6903ff781c3a70c Mon Sep 17 00:00:00 2001 From: akastijn Date: Sat, 8 Nov 2025 20:48:56 +0100 Subject: [PATCH] Add `.queue()` to embed action in `CommandSyncNitro` for proper execution --- .../commands/CommandSyncNitro.java | 25 ++++++++-- .../queries/QueriesUserDiscordId.java | 46 +++++++++++++++---- 2 files changed, 57 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/alttd/commandManager/commands/CommandSyncNitro.java b/src/main/java/com/alttd/commandManager/commands/CommandSyncNitro.java index 724607f..aae808e 100644 --- a/src/main/java/com/alttd/commandManager/commands/CommandSyncNitro.java +++ b/src/main/java/com/alttd/commandManager/commands/CommandSyncNitro.java @@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j; 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.entities.Role; import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.interactions.InteractionContextType; @@ -55,13 +56,22 @@ public class CommandSyncNitro extends DiscordCommand { ReplyCallbackAction replyCallbackAction = event.deferReply(true); - QueriesUserByRole.getUserIdsByRole("alpha").thenAcceptAsync(optionalUserIdList -> { + QueriesUserByRole.getUserIdsByRole("nitro").thenAcceptAsync(optionalUserIdList -> { if (optionalUserIdList.isEmpty()) { replyCallbackAction.setEmbeds(Util.genericErrorEmbed("Error", "No users found.")) .setEphemeral(true).queue(RestAction.getDefaultSuccess(), Util::handleFailure); return; } checkAllMembers(optionalUserIdList.get(), guildById, replyCallbackAction); + }, error -> replyCallbackAction + .setEmbeds(Util.genericErrorEmbed("Error", "Unable to retrieve user list.")) + .queue(RestAction.getDefaultSuccess(), Util::handleFailure)); + + Role roleById = guildById.getRoleById(585557866275012633L); + guildById.getMembersWithRoles(roleById).forEach(member -> { + QueriesUserDiscordId.addRoleIfMissing(member.getIdLong(), "nitro").thenAccept(success -> { + log.info("Added nitro role to user {}.", member.getIdLong()); + }); }); } @@ -74,7 +84,8 @@ public class CommandSyncNitro extends DiscordCommand { Member member = guildById.getMemberById(userId); if (member == null) { guildById.retrieveMemberById(userId) - .queue(retrievedMember -> checkMember(retrievedMember, userId)); + .queue(retrievedMember -> checkMember(retrievedMember, userId), + error -> checkMember(null, userId)); } else { checkMember(member, userId); } @@ -89,14 +100,18 @@ public class CommandSyncNitro extends DiscordCommand { private void checkMember(Member member, long userId) { if (member == null) { - QueriesUserDiscordId.removeLinkedUserByDiscordId(userId); + QueriesUserDiscordId.removeLinkedUserByDiscordId(userId).thenAccept(success -> { + log.info("User {} not found in guild. Removed from database.", userId); + }); log.info("User {} not found in guild. Removing from database.", userId); return; } boolean hasNitro = member.getRoles().stream().anyMatch(role -> role.getIdLong() == 585557866275012633L); if (!hasNitro) { - log.info("User {} does not have nitro. Removing from database.", userId); - QueriesUserDiscordId.removeRole(userId, "nitro"); + log.info("User {} does not have nitro. Removing nitro role from database.", userId); + QueriesUserDiscordId.removeRole(userId, "nitro").thenAccept(success -> { + log.info("User {} does not have nitro. Removed nitro role from database.", userId); + }); } } diff --git a/src/main/java/com/alttd/database/queries/QueriesUserDiscordId.java b/src/main/java/com/alttd/database/queries/QueriesUserDiscordId.java index 6b53fe8..1a07520 100644 --- a/src/main/java/com/alttd/database/queries/QueriesUserDiscordId.java +++ b/src/main/java/com/alttd/database/queries/QueriesUserDiscordId.java @@ -2,6 +2,7 @@ package com.alttd.database.queries; import com.alttd.database.Database; import com.alttd.util.Logger; +import net.dv8tion.jda.api.entities.Member; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -43,7 +44,7 @@ public class QueriesUserDiscordId { }); } - public static void removeRole(long userId, String role) { + public static CompletableFuture removeRole(long userId, String role) { String sql = """ DELETE FROM account_roles WHERE uuid IN ( @@ -54,13 +55,40 @@ public class QueriesUserDiscordId { AND role_name = ? """; - try { - PreparedStatement preparedStatement = Database.getDatabase().getConnection().prepareStatement(sql); - preparedStatement.setLong(1, userId); - preparedStatement.setString(2, role); - preparedStatement.executeUpdate(); - } catch (SQLException exception) { - Logger.altitudeLogs.error(exception); - } + return CompletableFuture.runAsync(() -> { + try { + PreparedStatement preparedStatement = Database.getDatabase().getConnection().prepareStatement(sql); + preparedStatement.setLong(1, userId); + preparedStatement.setString(2, role); + preparedStatement.executeUpdate(); + } catch (SQLException exception) { + Logger.altitudeLogs.error(exception); + } + }); + } + + public static CompletableFuture addRoleIfMissing(long userId, String role) { + String sql = """ + INSERT INTO account_roles (uuid, role_name) + SELECT player_uuid, ? + FROM linked_accounts + WHERE discord_id = ? + AND NOT EXISTS ( + SELECT 1 + FROM account_roles + WHERE uuid = player_uuid + AND role_name = ?) + """; + return CompletableFuture.runAsync(() -> { + try { + PreparedStatement preparedStatement = Database.getDatabase().getConnection().prepareStatement(sql); + preparedStatement.setString(1, role); + preparedStatement.setLong(2, userId); + preparedStatement.setString(3, role); + preparedStatement.executeUpdate(); + } catch (SQLException exception) { + Logger.altitudeLogs.error(exception); + } + }); } }