mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-03 08:19:54 +00:00
added kick command, made ban reason optional
This commit is contained in:
@@ -52,7 +52,7 @@ public class Ban implements Command {
|
||||
public CommandConfiguration getConfiguration() {
|
||||
List<Parameter> parameters = new ArrayList<>();
|
||||
parameters.add(Parameter.builder().name("user").type(Member.class).optional(false).build());
|
||||
parameters.add(Parameter.builder().name("reason").type(String.class).optional(false).remainder(true).build());
|
||||
parameters.add(Parameter.builder().name("reason").type(String.class).optional(true).remainder(true).build());
|
||||
HelpInfo helpInfo = HelpInfo.builder().usageTemplate("ban_usage").longHelpTemplate("ban_long_help").build();
|
||||
return CommandConfiguration.builder()
|
||||
.name("ban")
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
package dev.sheldan.abstracto.moderation.command;
|
||||
|
||||
import dev.sheldan.abstracto.command.Command;
|
||||
import dev.sheldan.abstracto.command.HelpInfo;
|
||||
import dev.sheldan.abstracto.command.execution.CommandConfiguration;
|
||||
import dev.sheldan.abstracto.command.execution.CommandContext;
|
||||
import dev.sheldan.abstracto.command.execution.Parameter;
|
||||
import dev.sheldan.abstracto.command.execution.Result;
|
||||
import dev.sheldan.abstracto.moderation.Moderation;
|
||||
import dev.sheldan.abstracto.moderation.models.BanLog;
|
||||
import dev.sheldan.abstracto.moderation.models.KickLogModel;
|
||||
import dev.sheldan.abstracto.moderation.service.KickServiceBean;
|
||||
import dev.sheldan.abstracto.templating.TemplateService;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class Kick implements Command {
|
||||
|
||||
@Autowired
|
||||
private TemplateService templateService;
|
||||
|
||||
@Autowired
|
||||
private KickServiceBean kickService;
|
||||
@Override
|
||||
public Result execute(CommandContext commandContext) {
|
||||
|
||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
||||
Member member = (Member) parameters.get(0);
|
||||
String defaultReason = templateService.renderTemplate("ban_default_reason", null);
|
||||
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
|
||||
kickService.kickMember(member, reason);
|
||||
KickLogModel kickLogModel = KickLogModel
|
||||
.parentBuilder()
|
||||
.commandTemplateContext(commandContext.getCommandTemplateContext())
|
||||
.kickedUser(member)
|
||||
.kickingUser(commandContext.getAuthor())
|
||||
.reason(reason)
|
||||
.build();
|
||||
kickService.sendKickLog(kickLogModel);
|
||||
return Result.fromSuccess();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandConfiguration getConfiguration() {
|
||||
List<Parameter> parameters = new ArrayList<>();
|
||||
parameters.add(Parameter.builder().name("user").type(Member.class).optional(false).build());
|
||||
parameters.add(Parameter.builder().name("reason").type(String.class).optional(true).remainder(true).build());
|
||||
HelpInfo helpInfo = HelpInfo.builder().usageTemplate("kick_usage").longHelpTemplate("kick_long_help").build();
|
||||
return CommandConfiguration.builder()
|
||||
.name("kick")
|
||||
.module(Moderation.MODERATION)
|
||||
.descriptionTemplate("kick_help_description")
|
||||
.causesReaction(true)
|
||||
.parameters(parameters)
|
||||
.help(helpInfo)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -39,6 +39,6 @@ public class BanServiceBean implements BanService {
|
||||
@Override
|
||||
public void sendBanLog(BanLog banLog) {
|
||||
String warnLogMessage = templateService.renderTemplate(BAN_LOG_TEMPLATE, banLog);
|
||||
postTargetService.sendTextInPostTarget(warnLogMessage, PostTarget.WARN_LOG, banLog.getServer().getId());
|
||||
postTargetService.sendTextInPostTarget(warnLogMessage, PostTarget.BAN_LOG, banLog.getServer().getId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
package dev.sheldan.abstracto.moderation.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.PostTarget;
|
||||
import dev.sheldan.abstracto.core.service.Bot;
|
||||
import dev.sheldan.abstracto.core.service.PostTargetService;
|
||||
import dev.sheldan.abstracto.moderation.models.KickLogModel;
|
||||
import dev.sheldan.abstracto.templating.TemplateService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class KickServiceBean implements KickService {
|
||||
|
||||
public static final String KICK_LOG_TEMPLATE = "kick_log";
|
||||
@Autowired
|
||||
private Bot bot;
|
||||
|
||||
@Autowired
|
||||
private TemplateService templateService;
|
||||
|
||||
@Autowired
|
||||
private PostTargetService postTargetService;
|
||||
|
||||
@Override
|
||||
public void kickMember(Member member, String reason) {
|
||||
Guild guildById = bot.getInstance().getGuildById(member.getGuild().getIdLong());
|
||||
if(guildById != null) {
|
||||
guildById.kick(member, reason).queue();
|
||||
} else {
|
||||
log.warn("Failed to kick member {} from guild {}. Guild was not found.", member.getId(), member.getGuild().getId());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendKickLog(KickLogModel kickLogModel) {
|
||||
String warnLogMessage = templateService.renderTemplate(KICK_LOG_TEMPLATE, kickLogModel);
|
||||
postTargetService.sendTextInPostTarget(warnLogMessage, PostTarget.WARN_LOG, kickLogModel.getServer().getId());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
default reason
|
||||
@@ -0,0 +1 @@
|
||||
Kicks the user with the given reason
|
||||
@@ -0,0 +1 @@
|
||||
User ${kickedUser.effectiveName} (${kickedUser.asMention}) has been kicked with reason: ${reason}.
|
||||
@@ -0,0 +1 @@
|
||||
Kicks the user with the given reason.
|
||||
@@ -0,0 +1 @@
|
||||
You were kicked from the server ${serverName} for the following reason: ${warning.reason}.
|
||||
@@ -0,0 +1 @@
|
||||
kick <user> <reason>
|
||||
@@ -0,0 +1,21 @@
|
||||
package dev.sheldan.abstracto.moderation.models;
|
||||
|
||||
import dev.sheldan.abstracto.command.execution.CommandTemplateContext;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
|
||||
@Getter
|
||||
public class KickLogModel extends CommandTemplateContext {
|
||||
private String reason;
|
||||
private Member kickingUser;
|
||||
private Member kickedUser;
|
||||
|
||||
@Builder(builderMethodName = "parentBuilder")
|
||||
public KickLogModel(CommandTemplateContext commandTemplateContext, Member kickedUser, Member kickingUser, String reason) {
|
||||
super(commandTemplateContext);
|
||||
this.kickedUser = kickedUser;
|
||||
this.kickingUser = kickingUser;
|
||||
this.reason = reason;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.sheldan.abstracto.moderation.service;
|
||||
|
||||
import dev.sheldan.abstracto.moderation.models.KickLogModel;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
|
||||
public interface KickService {
|
||||
void kickMember(Member member, String reason);
|
||||
void sendKickLog(KickLogModel kickLogModel);
|
||||
}
|
||||
@@ -28,7 +28,6 @@ public class SetPostTargetCommand implements Command {
|
||||
private ChannelManagementService channelManagementService;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public Result execute(CommandContext commandContext) {
|
||||
GuildChannel channel = (GuildChannel) commandContext.getParameters().getParameters().get(1);
|
||||
String targetName = (String) commandContext.getParameters().getParameters().get(0);
|
||||
|
||||
@@ -36,6 +36,8 @@ public class PostTarget {
|
||||
public static String JOIN_LOG = "joinlog";
|
||||
public static String LEAVE_LOG = "leavelog";
|
||||
public static String WARN_LOG = "warnlog";
|
||||
public static String KICK_LOG = "kicklog";
|
||||
public static String BAN_LOG = "banlog";
|
||||
|
||||
public static List<String> AVAILABLE_POST_TARGETS = Arrays.asList(JOIN_LOG, LEAVE_LOG, WARN_LOG);
|
||||
public static List<String> AVAILABLE_POST_TARGETS = Arrays.asList(JOIN_LOG, LEAVE_LOG, WARN_LOG, KICK_LOG, BAN_LOG);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user