mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-20 05:24:09 +00:00
added Arole to command received handler in order to handle it
restructured channel service calls a little bit moved dm sending to message service fixed log level configuration added full user dto, to be used as a combination of a AUserInServer and Member, for operations which need both, to avoid converting and reloading the user added mute command and mute role command added mute table added mute role table added job to automatically unmute people at the given time period restructured warn service removed simple message log for warnings added method to templating to support formatting instants
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
package dev.sheldan.abstracto.moderation.exception;
|
||||
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
|
||||
public class MuteException extends AbstractoRunTimeException {
|
||||
public MuteException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
package dev.sheldan.abstracto.moderation.models.database;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import lombok.*;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.time.Instant;
|
||||
|
||||
@Entity
|
||||
@Table(name="mute")
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Getter
|
||||
@Setter
|
||||
public class Mute {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "mutedUser", nullable = false)
|
||||
private AUserInAServer mutedUser;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "mutingUser", nullable = false)
|
||||
private AUserInAServer mutingUser;
|
||||
|
||||
private String reason;
|
||||
|
||||
private Instant muteDate;
|
||||
|
||||
private Instant muteTargetDate;
|
||||
|
||||
@Column
|
||||
private Long messageId;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "mutingServer", nullable = false)
|
||||
private AServer mutingServer;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "mutingChannel")
|
||||
private AChannel mutingChannel;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package dev.sheldan.abstracto.moderation.models.database;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import lombok.*;
|
||||
|
||||
import javax.persistence.*;
|
||||
|
||||
/**
|
||||
* Represents a role to be used for muting users on a certain server
|
||||
*/
|
||||
@Builder
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table(name = "mute_role")
|
||||
@Getter
|
||||
@Setter
|
||||
public class MuteRole {
|
||||
|
||||
/**
|
||||
* The abstracto unique id of this mute role.
|
||||
*/
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* Reference to the {@link AServer} at which this role is used as an mute role.
|
||||
*/
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@Getter
|
||||
@Setter
|
||||
@JoinColumn(name = "server_id", nullable = false)
|
||||
private AServer roleServer;
|
||||
|
||||
/**
|
||||
* Reference to the actual {@link ARole} being used to mute.
|
||||
*/
|
||||
@OneToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "role_id", nullable = false)
|
||||
private ARole role;
|
||||
}
|
||||
@@ -6,7 +6,9 @@ import lombok.Setter;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
|
||||
@Getter @SuperBuilder @Setter
|
||||
@Getter
|
||||
@SuperBuilder
|
||||
@Setter
|
||||
public class BanIdLog extends UserInitiatedServerContext {
|
||||
private String reason;
|
||||
private Member banningUser;
|
||||
|
||||
@@ -6,7 +6,9 @@ import lombok.Setter;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
|
||||
@Getter @SuperBuilder @Setter
|
||||
@Getter
|
||||
@SuperBuilder
|
||||
@Setter
|
||||
public class BanLog extends UserInitiatedServerContext {
|
||||
|
||||
private String reason;
|
||||
|
||||
@@ -6,7 +6,9 @@ import lombok.Setter;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
|
||||
@Getter @SuperBuilder @Setter
|
||||
@Getter
|
||||
@SuperBuilder
|
||||
@Setter
|
||||
public class KickLogModel extends UserInitiatedServerContext {
|
||||
private String reason;
|
||||
private Member kickingUser;
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package dev.sheldan.abstracto.moderation.models.template.commands;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
|
||||
import dev.sheldan.abstracto.moderation.models.database.Mute;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
|
||||
@Getter
|
||||
@SuperBuilder
|
||||
@Setter
|
||||
public class MuteLog extends UserInitiatedServerContext {
|
||||
|
||||
private Member mutedUser;
|
||||
private Member mutingUser;
|
||||
private Message message;
|
||||
private Mute mute;
|
||||
|
||||
public Duration getMuteDuration() {
|
||||
return Duration.between(mute.getMuteDate(), mute.getMuteTargetDate());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package dev.sheldan.abstracto.moderation.models.template.commands;
|
||||
|
||||
import dev.sheldan.abstracto.moderation.models.database.Mute;
|
||||
import lombok.Builder;
|
||||
import lombok.Value;
|
||||
|
||||
@Value
|
||||
@Builder
|
||||
public class MuteNotification {
|
||||
private Mute mute;
|
||||
private String serverName;
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package dev.sheldan.abstracto.moderation.models.template.commands;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.context.ServerContext;
|
||||
import dev.sheldan.abstracto.core.utils.MessageUtils;
|
||||
import dev.sheldan.abstracto.moderation.models.database.Mute;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
|
||||
@Getter
|
||||
@SuperBuilder
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
public class UnMuteLog extends ServerContext {
|
||||
private Member unMutedUser;
|
||||
private Member mutingUser;
|
||||
private Mute mute;
|
||||
|
||||
public Duration getMuteDuration() {
|
||||
return Duration.between(mute.getMuteDate(), mute.getMuteTargetDate());
|
||||
}
|
||||
|
||||
public String getMessageUrl() {
|
||||
return MessageUtils.buildMessageUrl(this.mute.getMutingServer().getId() ,this.getMute().getMutingChannel().getId(), this.mute.getMessageId());
|
||||
}
|
||||
}
|
||||
@@ -8,8 +8,9 @@ import lombok.experimental.SuperBuilder;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
|
||||
|
||||
@Getter @SuperBuilder @Setter
|
||||
@Getter
|
||||
@SuperBuilder
|
||||
@Setter
|
||||
public class WarnLog extends UserInitiatedServerContext {
|
||||
|
||||
private String reason;
|
||||
|
||||
@@ -4,7 +4,8 @@ import dev.sheldan.abstracto.moderation.models.database.Warning;
|
||||
import lombok.Builder;
|
||||
import lombok.Value;
|
||||
|
||||
@Value @Builder
|
||||
@Value
|
||||
@Builder
|
||||
public class WarnNotification {
|
||||
private Warning warning;
|
||||
private String serverName;
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package dev.sheldan.abstracto.moderation.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.FullUser;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.moderation.models.database.Mute;
|
||||
import dev.sheldan.abstracto.moderation.models.template.commands.MuteLog;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
public interface MuteService {
|
||||
Mute muteMember(Member memberToMute, Member userMuting, String reason, Instant unmuteDate, Message message);
|
||||
Mute muteMember(AUserInAServer member, AUserInAServer userMuting, String reason, Instant unmuteDate, Message message);
|
||||
Mute muteUser(FullUser userToMute, FullUser userMuting, String reason, Instant unmuteDate, Message message);
|
||||
void muteMemberWithLog(Member memberToMute, Member memberMuting, String reason, Instant unmuteDate, MuteLog log, Message message);
|
||||
void startUnmuteJobFor(Instant unmuteDate, Mute mute);
|
||||
void unmuteUser(Mute mute);
|
||||
void endMute(Long muteId);
|
||||
}
|
||||
@@ -1,11 +1,16 @@
|
||||
package dev.sheldan.abstracto.moderation.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.FullUser;
|
||||
import dev.sheldan.abstracto.moderation.models.database.Warning;
|
||||
import dev.sheldan.abstracto.moderation.models.template.commands.WarnLog;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
|
||||
|
||||
public interface WarnService {
|
||||
void warnUser(AUserInAServer warnedAUser, AUserInAServer warningAUser, String reason, WarnLog warnLog);
|
||||
void warnUser(Member warnedUser, Member warningUser, String reason, WarnLog warnLog);
|
||||
Warning warnUser(AUserInAServer warnedAUser, AUserInAServer warningAUser, String reason, TextChannel feedbackChannel);
|
||||
Warning warnUser(Member warnedMember, Member warningMember, String reason, TextChannel feedbackChannel);
|
||||
Warning warnUser(FullUser warnedUser, FullUser warningUser, String reason, TextChannel feedbackChannel);
|
||||
void warnUserWithLog(Member warnedMember, Member warningMember, String reason, WarnLog warnLog, TextChannel feedbackChannel);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package dev.sheldan.abstracto.moderation.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.AServerAChannelMessage;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.moderation.models.database.Mute;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
public interface MuteManagementService {
|
||||
Mute createMute(AUserInAServer aUserInAServer, AUserInAServer mutingUser, String reason, Instant unmuteDate, AServerAChannelMessage creation);
|
||||
Mute findMute(Long muteId);
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package dev.sheldan.abstracto.moderation.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.moderation.models.database.MuteRole;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface MuteRoleManagementService {
|
||||
MuteRole retrieveMuteRoleForServer(AServer server);
|
||||
MuteRole createMuteRoleForServer(AServer server, ARole role);
|
||||
List<MuteRole> retrieveMuteRolesForServer(AServer server);
|
||||
MuteRole setMuteRoleForServer(AServer server, ARole role);
|
||||
boolean muteRoleForServerExists(AServer server);
|
||||
}
|
||||
Reference in New Issue
Block a user