added kick command, made ban reason optional

This commit is contained in:
Sheldan
2020-03-18 19:25:49 +01:00
parent bd848d31d3
commit 9119d57108
14 changed files with 147 additions and 4 deletions

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1 @@
User ${kickedUser.effectiveName} (${kickedUser.asMention}) has been kicked with reason: ${reason}.

View File

@@ -0,0 +1 @@
You were kicked from the server ${serverName} for the following reason: ${warning.reason}.

View File

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

View File

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

View File

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

View File

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