added warn and ban command

changed command context to be a member instead of user, commands are only supported within guilds
added custom exception templating for the error message
added error message in case the parameters for a command were too little
added support for templates on command help descriptions
added post execution to be executed to print exception messages
refactored command handling to be able to support exceptions
added user and userInServer management
This commit is contained in:
Sheldan
2020-03-18 18:21:06 +01:00
parent 167bbb0f8b
commit bd848d31d3
82 changed files with 913 additions and 151 deletions

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>moderation</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>moderation-int</artifactId>
</project>

View File

@@ -0,0 +1,21 @@
package dev.sheldan.abstracto.moderation;
import dev.sheldan.abstracto.command.Module;
import dev.sheldan.abstracto.command.module.ModuleInfo;
import org.springframework.stereotype.Component;
@Component
public class Moderation implements Module {
public static final String MODERATION = "moderation";
@Override
public ModuleInfo getInfo() {
return ModuleInfo.builder().name(MODERATION).description("Utilities to moderate the server").build();
}
@Override
public String getParentModule() {
return "default";
}
}

View File

@@ -0,0 +1,22 @@
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 BanLog extends CommandTemplateContext {
private String reason;
private Member banningUser;
private Member bannedUser;
@Builder(builderMethodName = "parentBuilder")
public BanLog(CommandTemplateContext commandTemplateContext, Member bannedUser, Member banningUser, String reason) {
super(commandTemplateContext);
this.bannedUser = bannedUser;
this.banningUser = banningUser;
this.reason = reason;
}
}

View File

@@ -0,0 +1,23 @@
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 WarnLog extends CommandTemplateContext {
private Warning warning;
private Member warnedUser;
private Member warningUser;
@Builder(builderMethodName = "parentBuilder")
public WarnLog(CommandTemplateContext commandTemplateContext, Warning warning, Member warnedUser, Member warningUser) {
super(commandTemplateContext);
this.warning = warning;
this.warnedUser = warnedUser;
this.warningUser = warningUser;
}
}

View File

@@ -0,0 +1,10 @@
package dev.sheldan.abstracto.moderation.models;
import lombok.Builder;
import lombok.Value;
@Value @Builder
public class WarnNotification {
private Warning warning;
private String serverName;
}

View File

@@ -0,0 +1,47 @@
package dev.sheldan.abstracto.moderation.models;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.time.Instant;
@Entity
@Table(name="warning")
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Warning {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Getter
private Long id;
@Getter
@ManyToOne
@JoinColumn(name = "warnedUserId")
private AUserInAServer warnedUser;
@Getter
@ManyToOne
@JoinColumn(name = "warningUserId")
private AUserInAServer warningUser;
@Getter
private String reason;
@Getter
private Instant warnDate;
@Getter
private Boolean decayed;
@Getter
private Instant decayDate;
}

View File

@@ -0,0 +1,9 @@
package dev.sheldan.abstracto.moderation.service;
import dev.sheldan.abstracto.moderation.models.BanLog;
import net.dv8tion.jda.api.entities.Member;
public interface BanService {
void banMember(Member member, String reason);
void sendBanLog(BanLog banLog);
}

View File

@@ -0,0 +1,13 @@
package dev.sheldan.abstracto.moderation.service;
import dev.sheldan.abstracto.moderation.models.WarnLog;
import dev.sheldan.abstracto.moderation.models.Warning;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import net.dv8tion.jda.api.entities.Member;
public interface WarnService {
Warning warnUser(AUserInAServer warnedAUser, AUserInAServer warningAUser, String reason);
Warning warnUser(Member warnedUser, Member warningUser, String reason);
void sendWarnLog(WarnLog warnLogModel);
}

View File

@@ -0,0 +1,8 @@
package dev.sheldan.abstracto.moderation.service.management;
import dev.sheldan.abstracto.moderation.models.Warning;
import dev.sheldan.abstracto.core.models.AUserInAServer;
public interface WarnManagementService {
Warning createWarning(AUserInAServer warnedAUser, AUserInAServer warningAUser, String reason);
}