mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-03-27 22:31:45 +00:00
[AB-xxx] reworking ban logging to use audit log instead of actively logging or using the banned event
partially fixing broken infraction handling adding CompletableFutureMap to handle futures easier updating user display object to also hold name replaced some references to UserObjects in models with UserDisplay objects
This commit is contained in:
@@ -3,8 +3,12 @@ package dev.sheldan.abstracto.core.listener.async.jda;
|
||||
import dev.sheldan.abstracto.core.listener.ListenerService;
|
||||
import dev.sheldan.abstracto.core.models.ServerUser;
|
||||
import dev.sheldan.abstracto.core.models.listener.UserBannedModel;
|
||||
import dev.sheldan.abstracto.core.service.UserService;
|
||||
import dev.sheldan.abstracto.core.utils.CompletableFutureMap;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.events.guild.GuildBanEvent;
|
||||
import net.dv8tion.jda.api.audit.ActionType;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
@@ -12,11 +16,13 @@ import org.springframework.core.task.TaskExecutor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class AsyncUserBannedListenerBean extends ListenerAdapter {
|
||||
|
||||
@Autowired(required = false)
|
||||
private List<AsyncUserBannedListener> listenerList;
|
||||
|
||||
@@ -27,25 +33,48 @@ public class AsyncUserBannedListenerBean extends ListenerAdapter {
|
||||
@Autowired
|
||||
private ListenerService listenerService;
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Override
|
||||
public void onGuildBan(@Nonnull GuildBanEvent event) {
|
||||
public void onGuildAuditLogEntryCreate(@Nonnull GuildAuditLogEntryCreateEvent event) {
|
||||
if(listenerList == null) return;
|
||||
UserBannedModel model = getModel(event);
|
||||
listenerList.forEach(leaveListener -> listenerService.executeFeatureAwareListener(leaveListener, model, leaveListenerExecutor));
|
||||
if(event.getEntry().getType().equals(ActionType.BAN)) {
|
||||
log.info("Handling ban audit log entry created for user {} in server {}.", event.getEntry().getTargetIdLong(), event.getGuild().getIdLong());
|
||||
CompletableFutureMap<Long, User> longUserCompletableFutureMap = userService.retrieveUsersMapped(Arrays.asList(event.getEntry().getTargetIdLong(), event.getEntry().getUserIdLong()));
|
||||
longUserCompletableFutureMap.getMainFuture().thenAccept(avoid -> {
|
||||
User bannedUser = longUserCompletableFutureMap.getElement(event.getEntry().getTargetIdLong());
|
||||
User banningUser = longUserCompletableFutureMap.getElement(event.getEntry().getUserIdLong());
|
||||
UserBannedModel model = getModel(event, bannedUser, banningUser);
|
||||
listenerList.forEach(leaveListener -> listenerService.executeFeatureAwareListener(leaveListener, model, leaveListenerExecutor));
|
||||
}).exceptionally(throwable -> {
|
||||
log.warn("Failed to fetch users {} or {} for banned event.", event.getEntry().getTargetIdLong(), event.getEntry().getUserIdLong(), throwable);
|
||||
UserBannedModel model = getModel(event, null, null);
|
||||
listenerList.forEach(leaveListener -> listenerService.executeFeatureAwareListener(leaveListener, model, leaveListenerExecutor));
|
||||
return null;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private UserBannedModel getModel(GuildBanEvent event) {
|
||||
ServerUser serverUser = ServerUser
|
||||
private UserBannedModel getModel(GuildAuditLogEntryCreateEvent event, User bannedUser, User banningUser) {
|
||||
ServerUser bannedServerUser = ServerUser
|
||||
.builder()
|
||||
.serverId(event.getGuild().getIdLong())
|
||||
.userId(event.getUser().getIdLong())
|
||||
.isBot(event.getUser().isBot())
|
||||
.userId(event.getEntry().getTargetIdLong())
|
||||
.build();
|
||||
ServerUser banningServerUser = ServerUser
|
||||
.builder()
|
||||
.serverId(event.getGuild().getIdLong())
|
||||
.userId(event.getEntry().getUserIdLong())
|
||||
.build();
|
||||
return UserBannedModel
|
||||
.builder()
|
||||
.bannedUser(serverUser)
|
||||
.bannedServerUser(bannedServerUser)
|
||||
.banningUser(banningUser)
|
||||
.banningServerUser(banningServerUser)
|
||||
.guild(event.getGuild())
|
||||
.user(event.getUser())
|
||||
.reason(event.getEntry().getReason())
|
||||
.bannedUser(bannedUser)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,12 @@ package dev.sheldan.abstracto.core.listener.async.jda;
|
||||
import dev.sheldan.abstracto.core.listener.ListenerService;
|
||||
import dev.sheldan.abstracto.core.models.ServerUser;
|
||||
import dev.sheldan.abstracto.core.models.listener.UserUnBannedModel;
|
||||
import dev.sheldan.abstracto.core.service.UserService;
|
||||
import dev.sheldan.abstracto.core.utils.CompletableFutureMap;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.events.guild.GuildUnbanEvent;
|
||||
import net.dv8tion.jda.api.audit.ActionType;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
@@ -12,6 +16,7 @@ import org.springframework.core.task.TaskExecutor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
@@ -27,25 +32,48 @@ public class AsyncUserUnBannedListenerBean extends ListenerAdapter {
|
||||
@Autowired
|
||||
private ListenerService listenerService;
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Override
|
||||
public void onGuildUnban(@Nonnull GuildUnbanEvent event) {
|
||||
public void onGuildAuditLogEntryCreate(@Nonnull GuildAuditLogEntryCreateEvent event) {
|
||||
if(listenerList == null) return;
|
||||
UserUnBannedModel model = getModel(event);
|
||||
listenerList.forEach(leaveListener -> listenerService.executeFeatureAwareListener(leaveListener, model, leaveListenerExecutor));
|
||||
if(event.getEntry().getType().equals(ActionType.UNBAN)) {
|
||||
log.info("Handling unBan audit log entry created for user {} in server {}.", event.getEntry().getTargetIdLong(), event.getGuild().getIdLong());
|
||||
CompletableFutureMap<Long, User> longUserCompletableFutureMap = userService.retrieveUsersMapped(Arrays.asList(event.getEntry().getTargetIdLong(), event.getEntry().getUserIdLong()));
|
||||
longUserCompletableFutureMap.getMainFuture().thenAccept(avoid -> {
|
||||
User unBannedUser = longUserCompletableFutureMap.getElement(event.getEntry().getTargetIdLong());
|
||||
User unBanningUser = longUserCompletableFutureMap.getElement(event.getEntry().getUserIdLong());
|
||||
UserUnBannedModel model = getModel(event, unBannedUser, unBanningUser);
|
||||
listenerList.forEach(leaveListener -> listenerService.executeFeatureAwareListener(leaveListener, model, leaveListenerExecutor));
|
||||
}).exceptionally(throwable -> {
|
||||
log.warn("Failed to fetch users {} or {} for unbanned event.", event.getEntry().getTargetIdLong(), event.getEntry().getUserIdLong(), throwable);
|
||||
UserUnBannedModel model = getModel(event, null, null);
|
||||
listenerList.forEach(leaveListener -> listenerService.executeFeatureAwareListener(leaveListener, model, leaveListenerExecutor));
|
||||
return null;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private UserUnBannedModel getModel(GuildUnbanEvent event) {
|
||||
ServerUser serverUser = ServerUser
|
||||
private UserUnBannedModel getModel(GuildAuditLogEntryCreateEvent event, User unBannedUser, User unBanningUser) {
|
||||
ServerUser unBannedServerUser = ServerUser
|
||||
.builder()
|
||||
.serverId(event.getGuild().getIdLong())
|
||||
.userId(event.getUser().getIdLong())
|
||||
.isBot(event.getUser().isBot())
|
||||
.userId(event.getEntry().getTargetIdLong())
|
||||
.build();
|
||||
ServerUser unBanningServerUser = ServerUser
|
||||
.builder()
|
||||
.serverId(event.getGuild().getIdLong())
|
||||
.userId(event.getEntry().getUserIdLong())
|
||||
.build();
|
||||
return UserUnBannedModel
|
||||
.builder()
|
||||
.unbannedUser(serverUser)
|
||||
.unBannedServerUser(unBannedServerUser)
|
||||
.unBanningUser(unBanningUser)
|
||||
.unBanningServerUser(unBanningServerUser)
|
||||
.guild(event.getGuild())
|
||||
.user(event.getUser())
|
||||
.reason(event.getEntry().getReason())
|
||||
.unBannedUser(unBannedUser)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.utils.CompletableFutureList;
|
||||
import dev.sheldan.abstracto.core.utils.CompletableFutureMap;
|
||||
import net.dv8tion.jda.api.entities.SelfUser;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -8,6 +9,7 @@ import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
@@ -30,6 +32,12 @@ public class UserServiceBean implements UserService {
|
||||
return new CompletableFutureList<>(userFutures);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFutureMap<Long, User> retrieveUsersMapped(List<Long> ids) {
|
||||
return new CompletableFutureMap<>(ids.stream()
|
||||
.collect(Collectors.toMap(Function.identity(), this::retrieveUserForId)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public SelfUser getSelfUser() {
|
||||
return botService.getInstance().getSelfUser();
|
||||
|
||||
Reference in New Issue
Block a user