[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:
Sheldan
2021-06-01 21:10:17 +02:00
parent 55e0879e06
commit 3bf761a2e5
41 changed files with 645 additions and 393 deletions

View File

@@ -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;
}
}

View File

@@ -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");
}
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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 {
}

View File

@@ -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> {
}

View File

@@ -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> {
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}