mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-30 10:49:04 +00:00
[AB-281] adding ban and unban command
removing banId command in favor of the normal ban command removing various feature modes for moderation for clearer configuration
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
package dev.sheldan.abstracto.core.command.handler;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.Command;
|
||||
import dev.sheldan.abstracto.core.command.CommandConstants;
|
||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||
import dev.sheldan.abstracto.core.command.exception.AbstractoTemplatedException;
|
||||
import dev.sheldan.abstracto.core.command.execution.UnparsedCommandParameterPiece;
|
||||
import dev.sheldan.abstracto.core.command.handler.provided.MemberParameterHandler;
|
||||
import dev.sheldan.abstracto.core.command.handler.provided.UserParameterHandler;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@Component
|
||||
public class UserParameterHandlerImpl implements UserParameterHandler {
|
||||
|
||||
@Autowired
|
||||
private MemberParameterHandler memberParameterHandler;
|
||||
|
||||
@Override
|
||||
public boolean handles(Class clazz, UnparsedCommandParameterPiece value) {
|
||||
return clazz.equals(User.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean async() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Object> handleAsync(UnparsedCommandParameterPiece input, CommandParameterIterators iterators, Parameter param, Message context, Command command) {
|
||||
CompletableFuture<Object> memberParseFuture = memberParameterHandler.handleAsync(input, iterators, param, context, command);
|
||||
CompletableFuture<Object> mainFuture = new CompletableFuture<>();
|
||||
memberParseFuture.thenAccept(o -> mainFuture.complete(((Member)o).getUser())).exceptionally(throwable -> {
|
||||
String inputString = ((String) input.getValue()).trim();
|
||||
if(NumberUtils.isParsable(inputString)) {
|
||||
long userId = Long.parseLong(inputString);
|
||||
context.getGuild().getJDA().retrieveUserById(userId).queue(mainFuture::complete, mainFuture::completeExceptionally);
|
||||
} else {
|
||||
mainFuture.completeExceptionally(new AbstractoTemplatedException("No user found.", "no_user_found_exception"));
|
||||
}
|
||||
return null;
|
||||
});
|
||||
return mainFuture;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return CommandConstants.CORE_HANDLER_PRIORITY;
|
||||
}
|
||||
}
|
||||
@@ -132,4 +132,14 @@ public class ListenerExecutorConfig {
|
||||
return executorService.setupExecutorFor("channelDeletedListener");
|
||||
}
|
||||
|
||||
@Bean(name = "userUnBannedListenerExecutor")
|
||||
public TaskExecutor userUnBannedListenerExecutor() {
|
||||
return executorService.setupExecutorFor("userUnBannedListener");
|
||||
}
|
||||
|
||||
@Bean(name = "userBannedListenerExecutor")
|
||||
public TaskExecutor userBannedListenerExecutor() {
|
||||
return executorService.setupExecutorFor("userBannedListener");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
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 lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.events.guild.GuildBanEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.core.task.TaskExecutor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class AsyncUserBannedListenerBean extends ListenerAdapter {
|
||||
@Autowired(required = false)
|
||||
private List<AsyncUserBannedListener> listenerList;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("userBannedListenerExecutor")
|
||||
private TaskExecutor leaveListenerExecutor;
|
||||
|
||||
@Autowired
|
||||
private ListenerService listenerService;
|
||||
|
||||
@Override
|
||||
public void onGuildBan(@NotNull GuildBanEvent event) {
|
||||
if(listenerList == null) return;
|
||||
UserBannedModel model = getModel(event);
|
||||
listenerList.forEach(leaveListener -> listenerService.executeFeatureAwareListener(leaveListener, model, leaveListenerExecutor));
|
||||
}
|
||||
|
||||
private UserBannedModel getModel(GuildBanEvent event) {
|
||||
ServerUser serverUser = ServerUser
|
||||
.builder()
|
||||
.serverId(event.getGuild().getIdLong())
|
||||
.userId(event.getUser().getIdLong())
|
||||
.build();
|
||||
return UserBannedModel
|
||||
.builder()
|
||||
.bannedUser(serverUser)
|
||||
.guild(event.getGuild())
|
||||
.user(event.getUser())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
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 lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.events.guild.GuildUnbanEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.core.task.TaskExecutor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class AsyncUserUnBannedListenerBean extends ListenerAdapter {
|
||||
@Autowired(required = false)
|
||||
private List<AsyncUserUnBannedListener> listenerList;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("userUnBannedListenerExecutor")
|
||||
private TaskExecutor leaveListenerExecutor;
|
||||
|
||||
@Autowired
|
||||
private ListenerService listenerService;
|
||||
|
||||
@Override
|
||||
public void onGuildUnban(@NotNull GuildUnbanEvent event) {
|
||||
if(listenerList == null) return;
|
||||
UserUnBannedModel model = getModel(event);
|
||||
listenerList.forEach(leaveListener -> listenerService.executeFeatureAwareListener(leaveListener, model, leaveListenerExecutor));
|
||||
}
|
||||
|
||||
private UserUnBannedModel getModel(GuildUnbanEvent event) {
|
||||
ServerUser serverUser = ServerUser
|
||||
.builder()
|
||||
.serverId(event.getGuild().getIdLong())
|
||||
.userId(event.getUser().getIdLong())
|
||||
.build();
|
||||
return UserUnBannedModel
|
||||
.builder()
|
||||
.unbannedUser(serverUser)
|
||||
.guild(event.getGuild())
|
||||
.user(event.getUser())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package dev.sheldan.abstracto.core.command.handler.provided;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.handler.CommandParameterHandler;
|
||||
|
||||
public interface UserParameterHandler extends CommandParameterHandler {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package dev.sheldan.abstracto.core.listener.async.jda;
|
||||
|
||||
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
|
||||
import dev.sheldan.abstracto.core.listener.FeatureAwareListener;
|
||||
import dev.sheldan.abstracto.core.models.listener.UserBannedModel;
|
||||
|
||||
public interface AsyncUserBannedListener extends FeatureAwareListener<UserBannedModel, DefaultListenerResult> {
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package dev.sheldan.abstracto.core.listener.async.jda;
|
||||
|
||||
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
|
||||
import dev.sheldan.abstracto.core.listener.FeatureAwareListener;
|
||||
import dev.sheldan.abstracto.core.models.listener.UserUnBannedModel;
|
||||
|
||||
public interface AsyncUserUnBannedListener extends FeatureAwareListener<UserUnBannedModel, DefaultListenerResult> {
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package dev.sheldan.abstracto.core.models.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.listener.FeatureAwareListenerModel;
|
||||
import dev.sheldan.abstracto.core.models.ServerUser;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class UserBannedModel implements FeatureAwareListenerModel {
|
||||
private ServerUser bannedUser;
|
||||
private User user;
|
||||
private Guild guild;
|
||||
@Override
|
||||
public Long getServerId() {
|
||||
return guild.getIdLong();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package dev.sheldan.abstracto.core.models.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.listener.FeatureAwareListenerModel;
|
||||
import dev.sheldan.abstracto.core.models.ServerUser;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class UserUnBannedModel implements FeatureAwareListenerModel {
|
||||
private ServerUser unbannedUser;
|
||||
private User user;
|
||||
private Guild guild;
|
||||
@Override
|
||||
public Long getServerId() {
|
||||
return guild.getIdLong();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user