mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-27 23:09:05 +00:00
[AB-111] adding ability to perform moderation actions on various logging/report messages
This commit is contained in:
@@ -38,6 +38,6 @@ public class ReportReactionFeatureConfig implements FeatureConfig {
|
||||
|
||||
@Override
|
||||
public List<FeatureMode> getAvailableModes() {
|
||||
return Arrays.asList(ReportReactionMode.SINGULAR_MESSAGE, ReportReactionMode.ANONYMOUS);
|
||||
return Arrays.asList(ReportReactionMode.values());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,6 @@ public class WarningDecayFeatureConfig implements FeatureConfig {
|
||||
|
||||
@Override
|
||||
public List<FeatureMode> getAvailableModes() {
|
||||
return Arrays.asList(WarnDecayMode.AUTOMATIC_WARN_DECAY_LOG);
|
||||
return Arrays.asList(WarnDecayMode.values());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ public class WarningFeatureConfig implements FeatureConfig {
|
||||
|
||||
@Override
|
||||
public List<FeatureMode> getAvailableModes() {
|
||||
return Arrays.asList(WarningMode.WARN_DECAY_LOG);
|
||||
return Arrays.asList(WarningMode.values());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5,7 +5,7 @@ import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public enum ReportReactionMode implements FeatureMode {
|
||||
SINGULAR_MESSAGE("singularReportReactions"), ANONYMOUS("anonymousReportReactions");
|
||||
SINGULAR_MESSAGE("singularReportReactions"), ANONYMOUS("anonymousReportReactions"), REPORT_ACTIONS("reactionReportActions");
|
||||
|
||||
private final String key;
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package dev.sheldan.abstracto.moderation.model;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
public class ModerationActionButton {
|
||||
private String componentId;
|
||||
private String action;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package dev.sheldan.abstracto.moderation.model;
|
||||
|
||||
public enum MuteResult {
|
||||
NOTIFICATION_FAILED, SUCCESSFUL
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package dev.sheldan.abstracto.moderation.model.interaction;
|
||||
|
||||
import dev.sheldan.abstracto.core.interaction.modal.ModalPayload;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
public class ModerationActionBanPayload implements ModalPayload {
|
||||
private String modalId;
|
||||
private String reasonInputId;
|
||||
private String durationInputId;
|
||||
private Long serverId;
|
||||
private Long bannedUserId;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package dev.sheldan.abstracto.moderation.model.interaction;
|
||||
|
||||
import dev.sheldan.abstracto.core.interaction.modal.ModalPayload;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
public class ModerationActionKickPayload implements ModalPayload {
|
||||
private String modalId;
|
||||
private String reasonInputId;
|
||||
private Long serverId;
|
||||
private Long kickedUserId;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package dev.sheldan.abstracto.moderation.model.interaction;
|
||||
|
||||
import dev.sheldan.abstracto.core.interaction.modal.ModalPayload;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
public class ModerationActionMutePayload implements ModalPayload {
|
||||
private String modalId;
|
||||
private String reasonInputId;
|
||||
private String durationInputId;
|
||||
private Long serverId;
|
||||
private Long mutedUserId;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package dev.sheldan.abstracto.moderation.model.interaction;
|
||||
|
||||
import dev.sheldan.abstracto.core.interaction.modal.ModalPayload;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
public class ModerationActionWarnPayload implements ModalPayload {
|
||||
private String modalId;
|
||||
private String reasonInputId;
|
||||
private Long serverId;
|
||||
private Long warnedUserId;
|
||||
}
|
||||
@@ -1,11 +1,10 @@
|
||||
package dev.sheldan.abstracto.moderation.model.template.command;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.template.display.MemberDisplay;
|
||||
import dev.sheldan.abstracto.core.models.template.display.UserDisplay;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
@@ -24,11 +23,10 @@ public class BanLog {
|
||||
/**
|
||||
* The member executing the ban
|
||||
*/
|
||||
private Member banningMember;
|
||||
private MemberDisplay banningMember;
|
||||
/**
|
||||
* The user being banned
|
||||
*/
|
||||
private User bannedUser;
|
||||
private Message commandMessage;
|
||||
private UserDisplay bannedUser;
|
||||
private Duration deletionDuration;
|
||||
}
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
package dev.sheldan.abstracto.moderation.model.template.command;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.template.display.MemberDisplay;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel;
|
||||
|
||||
/**
|
||||
* Used when rendering the notification when a member was kicked. The template is: "kick_log_embed"
|
||||
@@ -14,15 +12,7 @@ import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel;
|
||||
@Builder
|
||||
@Setter
|
||||
public class KickLogModel {
|
||||
/**
|
||||
* The reason of the kick
|
||||
*/
|
||||
private String reason;
|
||||
/**
|
||||
* The member being kicked
|
||||
*/
|
||||
private Member kickedUser;
|
||||
private Member member;
|
||||
private Guild guild;
|
||||
private GuildMessageChannel channel;
|
||||
private MemberDisplay kickedMember;
|
||||
private MemberDisplay kickingMember;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package dev.sheldan.abstracto.moderation.model.template.command;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.template.display.MemberDisplay;
|
||||
import lombok.Getter;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
@@ -13,27 +14,19 @@ public class MuteListenerModel {
|
||||
/**
|
||||
* The {@link Member} being muted
|
||||
*/
|
||||
private Member mutedUser;
|
||||
private MemberDisplay mutedUser;
|
||||
/**
|
||||
* The {@link Member} executing the mute
|
||||
*/
|
||||
private Member mutingUser;
|
||||
private MemberDisplay mutingUser;
|
||||
/**
|
||||
* The persisted mute object from the database containing the information about the mute
|
||||
*/
|
||||
private Long muteId;
|
||||
private Instant muteTargetDate;
|
||||
private Instant oldMuteTargetDate;
|
||||
private Duration duration;
|
||||
private String reason;
|
||||
private Long channelId;
|
||||
|
||||
/**
|
||||
* The {@link Duration} of the mute between the mute was cast and and the date it should end
|
||||
* @return The {@link Duration} between start and target date
|
||||
*/
|
||||
public Duration getMuteDuration() {
|
||||
return Duration.between(Instant.now(), muteTargetDate);
|
||||
}
|
||||
|
||||
public boolean getMuteEnded() {
|
||||
return oldMuteTargetDate != null && muteTargetDate == null || oldMuteTargetDate == null && muteTargetDate == null;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
package dev.sheldan.abstracto.moderation.model.template.command;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.template.display.MemberDisplay;
|
||||
import dev.sheldan.abstracto.core.models.template.display.UserDisplay;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
|
||||
|
||||
/**
|
||||
* Used when rendering the notification when a member was banned. The template is: "ban_log_embed"
|
||||
@@ -18,10 +16,9 @@ public class UnBanLog {
|
||||
/**
|
||||
* The member executing the unban
|
||||
*/
|
||||
private Member unBanningMember;
|
||||
private MemberDisplay unBanningMember;
|
||||
/**
|
||||
* The user being unbanned
|
||||
*/
|
||||
private User bannedUser;
|
||||
private Message commandMessage;
|
||||
private UserDisplay bannedUser;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package dev.sheldan.abstracto.moderation.model.template.command;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.context.ServerContext;
|
||||
import dev.sheldan.abstracto.core.models.template.display.MemberDisplay;
|
||||
import dev.sheldan.abstracto.core.utils.MessageUtils;
|
||||
import dev.sheldan.abstracto.moderation.model.database.Mute;
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -8,7 +8,6 @@ import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
@@ -21,15 +20,15 @@ import java.time.Instant;
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class UnMuteLog extends ServerContext {
|
||||
public class UnMuteLog {
|
||||
/**
|
||||
* The un-muted Member, is null if the member left the server
|
||||
*/
|
||||
private Member unMutedUser;
|
||||
private MemberDisplay unMutedUser;
|
||||
/**
|
||||
* The user casting the mute, is null if the member left the server
|
||||
*/
|
||||
private Member mutingUser;
|
||||
private MemberDisplay mutingUser;
|
||||
/**
|
||||
* The persisted mute object from the database containing the information about the mute
|
||||
*/
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
package dev.sheldan.abstracto.moderation.model.template.command;
|
||||
|
||||
import dev.sheldan.abstracto.moderation.model.database.Warning;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel;
|
||||
|
||||
/**
|
||||
* Used when rendering the notification when a member was warned. The template is: "warn_log_embed"
|
||||
*/
|
||||
@Getter
|
||||
@Builder
|
||||
@Setter
|
||||
public class WarnContext {
|
||||
/**
|
||||
* The reason why the warn was cast
|
||||
*/
|
||||
private String reason;
|
||||
/**
|
||||
* The {@link Member} being warned
|
||||
*/
|
||||
private Member warnedMember;
|
||||
/**
|
||||
* The persisted {@link Warning} object from the database containing the information about the warning
|
||||
*/
|
||||
private Long warnId;
|
||||
private Long infractionId;
|
||||
private Member member;
|
||||
private Guild guild;
|
||||
private Message message;
|
||||
private GuildMessageChannel channel;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package dev.sheldan.abstracto.moderation.model.template.command;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.ServerChannelMessage;
|
||||
import dev.sheldan.abstracto.core.models.template.display.MemberDisplay;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
|
||||
/**
|
||||
* Used when rendering the notification when a member was warned. The template is: "warn_log_embed"
|
||||
*/
|
||||
@Getter
|
||||
@Builder
|
||||
@Setter
|
||||
public class WarnLogModel {
|
||||
/**
|
||||
* The reason why warn was cast
|
||||
*/
|
||||
private String reason;
|
||||
/**
|
||||
* The {@link Member} being warned
|
||||
*/
|
||||
private MemberDisplay warnedMember;
|
||||
private Long warnId;
|
||||
private Long infractionId;
|
||||
private MemberDisplay warningMember;
|
||||
private ServerChannelMessage channelMessage;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package dev.sheldan.abstracto.moderation.model.template.listener;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
public class ModerationActionBanModalModel {
|
||||
private String modalId;
|
||||
private String reasonComponentId;
|
||||
private String durationComponentId;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package dev.sheldan.abstracto.moderation.model.template.listener;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
public class ModerationActionKickModalModel {
|
||||
private String modalId;
|
||||
private String reasonComponentId;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package dev.sheldan.abstracto.moderation.model.template.listener;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
public class ModerationActionMuteModalModel {
|
||||
private String modalId;
|
||||
private String reasonComponentId;
|
||||
private String durationComponentId;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package dev.sheldan.abstracto.moderation.model.template.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.interaction.button.ButtonPayload;
|
||||
import dev.sheldan.abstracto.core.models.ServerUser;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class ModerationActionPayloadModel implements ButtonPayload {
|
||||
private String action;
|
||||
private ServerUser user;
|
||||
|
||||
public static ModerationActionPayloadModel forAction(String action, ServerUser user) {
|
||||
return ModerationActionPayloadModel
|
||||
.builder()
|
||||
.user(user)
|
||||
.action(action)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package dev.sheldan.abstracto.moderation.model.template.listener;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
public class ModerationActionWarnModalModel {
|
||||
private String modalId;
|
||||
private String reasonComponentId;
|
||||
}
|
||||
@@ -2,10 +2,13 @@ package dev.sheldan.abstracto.moderation.model.template.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.ServerUser;
|
||||
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
||||
import dev.sheldan.abstracto.moderation.model.ModerationActionButton;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
@@ -15,4 +18,5 @@ public class ReportReactionNotificationModel {
|
||||
private Integer reportCount;
|
||||
private String context;
|
||||
private Boolean singularMessage;
|
||||
private List<ModerationActionButton> moderationActionComponents;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package dev.sheldan.abstracto.moderation.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.ServerUser;
|
||||
import dev.sheldan.abstracto.moderation.model.BanResult;
|
||||
import net.dv8tion.jda.api.entities.*;
|
||||
|
||||
@@ -10,9 +11,9 @@ public interface BanService {
|
||||
String BAN_EFFECT_KEY = "ban";
|
||||
String BAN_INFRACTION_TYPE = "ban";
|
||||
String INFRACTION_PARAMETER_DELETION_DURATION_KEY = "DELETION_DURATION";
|
||||
CompletableFuture<BanResult> banUserWithNotification(User user, String reason, Member banningMember, Duration deletionDuration);
|
||||
CompletableFuture<Void> unBanUserWithNotification(User user, Member unBanningUser);
|
||||
CompletableFuture<Void> banUser(Guild guild, User user, Duration deletionDuration, String reason);
|
||||
CompletableFuture<Void> unbanUser(Guild guild, User user);
|
||||
CompletableFuture<Void> softBanUser(Guild guild, User user, Duration delDays);
|
||||
CompletableFuture<BanResult> banUserWithNotification(ServerUser userToBeBanned, String reason, ServerUser banningUser, Guild guild, Duration deletionDuration);
|
||||
CompletableFuture<Void> unBanUserWithNotification(Long userId, ServerUser unBanningMember, Guild guild);
|
||||
CompletableFuture<Void> banUser(Guild guild, ServerUser userToBeBanned, Duration deletionDuration, String reason);
|
||||
CompletableFuture<Void> unbanUser(Guild guild, Long userId);
|
||||
CompletableFuture<Void> softBanUser(Guild guild, ServerUser user, Duration delDays);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package dev.sheldan.abstracto.moderation.service;
|
||||
|
||||
import dev.sheldan.abstracto.moderation.model.template.command.KickLogModel;
|
||||
import dev.sheldan.abstracto.core.models.ServerUser;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@@ -8,5 +9,6 @@ import java.util.concurrent.CompletableFuture;
|
||||
public interface KickService {
|
||||
String KICK_EFFECT_KEY = "kick";
|
||||
String KICK_INFRACTION_TYPE = "kick";
|
||||
CompletableFuture<Void> kickMember(Member member, String reason, KickLogModel kickLogModel);
|
||||
CompletableFuture<Void> kickMember(Member kickedMember, Member kickingMember, String reason);
|
||||
CompletableFuture<Void> kickMember(Guild guild, ServerUser kickedUser, String reason, ServerUser kickingUser);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package dev.sheldan.abstracto.moderation.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.ServerUser;
|
||||
import dev.sheldan.abstracto.moderation.model.ModerationActionButton;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ModerationActionService {
|
||||
List<ModerationActionButton> getModerationActionButtons(ServerUser serverUser);
|
||||
}
|
||||
@@ -1,11 +1,13 @@
|
||||
package dev.sheldan.abstracto.moderation.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.FullUserInServer;
|
||||
import dev.sheldan.abstracto.core.models.ServerChannelMessage;
|
||||
import dev.sheldan.abstracto.core.models.ServerUser;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.moderation.model.MuteResult;
|
||||
import dev.sheldan.abstracto.moderation.model.database.Mute;
|
||||
import dev.sheldan.abstracto.moderation.model.template.command.MuteContext;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@@ -13,14 +15,13 @@ public interface MuteService {
|
||||
String MUTE_EFFECT_KEY = "mute";
|
||||
String MUTE_INFRACTION_TYPE = "mute";
|
||||
String INFRACTION_PARAMETER_DURATION_KEY = "DURATION";
|
||||
CompletableFuture<Void> muteMember(Member memberToMute, String reason, Instant unMuteDate, Long channelId);
|
||||
CompletableFuture<Void> muteUserInServer(FullUserInServer userToMute, String reason, Instant unMuteDate, Long channelId);
|
||||
CompletableFuture<Void> muteMemberWithLog(MuteContext context);
|
||||
CompletableFuture<MuteResult> muteUserInServer(Guild guild, ServerUser userBeingMuted, String reason, Duration duration);
|
||||
CompletableFuture<MuteResult> muteMemberWithLog(ServerUser userToMute, ServerUser mutingUser, String reason, Duration duration, Guild guild, ServerChannelMessage origin);
|
||||
String startUnMuteJobFor(Instant unMuteDate, Long muteId, Long serverId);
|
||||
void cancelUnMuteJob(Mute mute);
|
||||
CompletableFuture<Void> unMuteUser(AUserInAServer userToUnmute, Member memberUnMuting);
|
||||
CompletableFuture<Void> endMute(Mute mute);
|
||||
CompletableFuture<Void> unMuteUser(ServerUser userToUnMute, ServerUser memberUnMuting, Guild guild);
|
||||
CompletableFuture<Void> endMute(Mute mute, Guild guild);
|
||||
CompletableFuture<Void> endMute(Long muteId, Long serverId);
|
||||
void completelyUnMuteUser(AUserInAServer aUserInAServer);
|
||||
void completelyUnMuteMember(Member member);
|
||||
void completelyUnMuteMember(ServerUser serverUser);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package dev.sheldan.abstracto.moderation.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.ServerChannelMessage;
|
||||
import dev.sheldan.abstracto.core.models.ServerUser;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.moderation.model.database.Warning;
|
||||
import dev.sheldan.abstracto.moderation.model.template.command.WarnContext;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@@ -11,8 +13,7 @@ import java.util.concurrent.CompletableFuture;
|
||||
public interface WarnService {
|
||||
String WARN_EFFECT_KEY = "warn";
|
||||
String WARN_INFRACTION_TYPE = "warn";
|
||||
CompletableFuture<Void> notifyAndLogFullUserWarning(WarnContext context);
|
||||
CompletableFuture<Void> warnUserWithLog(WarnContext context);
|
||||
CompletableFuture<Void> warnUserWithLog(Guild guild, ServerUser warnedUser, ServerUser warningUser, String reason, ServerChannelMessage serverChannelMessage);
|
||||
void decayWarning(Warning warning, Instant decayDate);
|
||||
CompletableFuture<Void> decayWarningsForServer(AServer server);
|
||||
CompletableFuture<Void> decayAllWarningsForServer(AServer server);
|
||||
|
||||
Reference in New Issue
Block a user