114 lines
4.4 KiB
Java
114 lines
4.4 KiB
Java
package com.alttd.commandManager.commands;
|
|
|
|
import com.alttd.commandManager.CommandManager;
|
|
import com.alttd.commandManager.DiscordCommand;
|
|
import com.alttd.config.MessagesConfig;
|
|
import com.alttd.database.queries.QueriesUserByRole;
|
|
import com.alttd.database.queries.QueriesUserDiscordId;
|
|
import com.alttd.util.Util;
|
|
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.CommandAutoCompleteInteractionEvent;
|
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
|
import net.dv8tion.jda.api.interactions.InteractionContextType;
|
|
import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions;
|
|
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
|
|
import net.dv8tion.jda.api.interactions.commands.build.Commands;
|
|
import net.dv8tion.jda.api.requests.RestAction;
|
|
import net.dv8tion.jda.api.requests.restaction.interactions.ReplyCallbackAction;
|
|
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
import java.util.concurrent.Executors;
|
|
import java.util.concurrent.ScheduledExecutorService;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
public class CommandSyncNitro extends DiscordCommand {
|
|
|
|
private final CommandData commandData;
|
|
private final JDA jda;
|
|
|
|
public CommandSyncNitro(JDA jda, CommandManager commandManager) {
|
|
this.jda = jda;
|
|
commandData = Commands.slash(getName(), "Sync nitro users.")
|
|
.setContexts(InteractionContextType.GUILD)
|
|
.setDefaultPermissions(DefaultMemberPermissions.DISABLED);
|
|
Util.registerCommand(commandManager, jda, commandData, getName());
|
|
}
|
|
|
|
@Override
|
|
public String getName() {
|
|
return "syncnitro";
|
|
}
|
|
|
|
@Override
|
|
public void execute(SlashCommandInteractionEvent event) {
|
|
Guild guildById = jda.getGuildById(141644560005595136L);
|
|
if (guildById == null) {
|
|
event.replyEmbeds(Util.genericErrorEmbed("Error", "Unable to find guild."))
|
|
.setEphemeral(true).queue(RestAction.getDefaultSuccess(), Util::handleFailure);
|
|
return;
|
|
}
|
|
|
|
ReplyCallbackAction replyCallbackAction = event.deferReply(true);
|
|
|
|
QueriesUserByRole.getUserIdsByRole("alpha").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);
|
|
});
|
|
}
|
|
|
|
private void checkAllMembers(List<Long> userIdList, Guild guildById, ReplyCallbackAction replyCallbackAction) {
|
|
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
|
|
|
|
for (int i = 0; i < userIdList.size(); i++) {
|
|
long userId = userIdList.get(i);
|
|
scheduler.schedule(() -> {
|
|
Member member = guildById.getMemberById(userId);
|
|
if (member == null) {
|
|
guildById.retrieveMemberById(userId)
|
|
.queue(retrievedMember -> checkMember(retrievedMember, userId));
|
|
} else {
|
|
checkMember(member, userId);
|
|
}
|
|
}, i, TimeUnit.SECONDS);
|
|
}
|
|
|
|
replyCallbackAction.setEmbeds(Util.genericSuccessEmbed("Success", "Syncing " + userIdList.size() + " users in background"));
|
|
|
|
scheduler.shutdown();
|
|
}
|
|
|
|
private void checkMember(Member member, long userId) {
|
|
if (member == null) {
|
|
QueriesUserDiscordId.removeLinkedUserByDiscordId(userId);
|
|
return;
|
|
}
|
|
boolean hasNitro = member.getRoles().stream().anyMatch(role -> role.getIdLong() == 585557866275012633L);
|
|
if (!hasNitro) {
|
|
QueriesUserDiscordId.removeRole(userId, "nitro");
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void suggest(CommandAutoCompleteInteractionEvent event) {
|
|
event.replyChoices(Collections.emptyList())
|
|
.queue(RestAction.getDefaultSuccess(), Util::handleFailure);
|
|
}
|
|
|
|
@Override
|
|
public String getHelpMessage() {
|
|
return MessagesConfig.HELP_SYNC_NITRO;
|
|
}
|
|
|
|
@Override
|
|
public CommandData getCommandData() {
|
|
return commandData;
|
|
}
|
|
}
|