Add .queue() to embed action in CommandSyncNitro for proper execution

This commit is contained in:
akastijn 2025-11-08 20:48:56 +01:00
parent 1bd6602421
commit b0d3498d1c
2 changed files with 57 additions and 14 deletions

View File

@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member; 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.CommandAutoCompleteInteractionEvent;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.InteractionContextType; import net.dv8tion.jda.api.interactions.InteractionContextType;
@ -55,13 +56,22 @@ public class CommandSyncNitro extends DiscordCommand {
ReplyCallbackAction replyCallbackAction = event.deferReply(true); ReplyCallbackAction replyCallbackAction = event.deferReply(true);
QueriesUserByRole.getUserIdsByRole("alpha").thenAcceptAsync(optionalUserIdList -> { QueriesUserByRole.getUserIdsByRole("nitro").thenAcceptAsync(optionalUserIdList -> {
if (optionalUserIdList.isEmpty()) { if (optionalUserIdList.isEmpty()) {
replyCallbackAction.setEmbeds(Util.genericErrorEmbed("Error", "No users found.")) replyCallbackAction.setEmbeds(Util.genericErrorEmbed("Error", "No users found."))
.setEphemeral(true).queue(RestAction.getDefaultSuccess(), Util::handleFailure); .setEphemeral(true).queue(RestAction.getDefaultSuccess(), Util::handleFailure);
return; return;
} }
checkAllMembers(optionalUserIdList.get(), guildById, replyCallbackAction); 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); Member member = guildById.getMemberById(userId);
if (member == null) { if (member == null) {
guildById.retrieveMemberById(userId) guildById.retrieveMemberById(userId)
.queue(retrievedMember -> checkMember(retrievedMember, userId)); .queue(retrievedMember -> checkMember(retrievedMember, userId),
error -> checkMember(null, userId));
} else { } else {
checkMember(member, userId); checkMember(member, userId);
} }
@ -89,14 +100,18 @@ public class CommandSyncNitro extends DiscordCommand {
private void checkMember(Member member, long userId) { private void checkMember(Member member, long userId) {
if (member == null) { 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); log.info("User {} not found in guild. Removing from database.", userId);
return; return;
} }
boolean hasNitro = member.getRoles().stream().anyMatch(role -> role.getIdLong() == 585557866275012633L); boolean hasNitro = member.getRoles().stream().anyMatch(role -> role.getIdLong() == 585557866275012633L);
if (!hasNitro) { if (!hasNitro) {
log.info("User {} does not have nitro. Removing from database.", userId); log.info("User {} does not have nitro. Removing nitro role from database.", userId);
QueriesUserDiscordId.removeRole(userId, "nitro"); QueriesUserDiscordId.removeRole(userId, "nitro").thenAccept(success -> {
log.info("User {} does not have nitro. Removed nitro role from database.", userId);
});
} }
} }

View File

@ -2,6 +2,7 @@ package com.alttd.database.queries;
import com.alttd.database.Database; import com.alttd.database.Database;
import com.alttd.util.Logger; import com.alttd.util.Logger;
import net.dv8tion.jda.api.entities.Member;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
@ -43,7 +44,7 @@ public class QueriesUserDiscordId {
}); });
} }
public static void removeRole(long userId, String role) { public static CompletableFuture<Void> removeRole(long userId, String role) {
String sql = """ String sql = """
DELETE FROM account_roles DELETE FROM account_roles
WHERE uuid IN ( WHERE uuid IN (
@ -54,13 +55,40 @@ public class QueriesUserDiscordId {
AND role_name = ? AND role_name = ?
"""; """;
try { return CompletableFuture.runAsync(() -> {
PreparedStatement preparedStatement = Database.getDatabase().getConnection().prepareStatement(sql); try {
preparedStatement.setLong(1, userId); PreparedStatement preparedStatement = Database.getDatabase().getConnection().prepareStatement(sql);
preparedStatement.setString(2, role); preparedStatement.setLong(1, userId);
preparedStatement.executeUpdate(); preparedStatement.setString(2, role);
} catch (SQLException exception) { preparedStatement.executeUpdate();
Logger.altitudeLogs.error(exception); } catch (SQLException exception) {
} Logger.altitudeLogs.error(exception);
}
});
}
public static CompletableFuture<Void> 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);
}
});
} }
} }