[AB-240] changing invite filter to actively filter the server instead of only being based on the code

moving invite filter to separate module
updating to newer liquibase version
changing concept of immune roles which are directly associated to commands to immune roles which are immune against certain effects. these effects can be configured directly by the command (and a condition checks this effect), but they can be used in services as well, unrelated to commands
adding checks to not execute message received listeners for the wrong message types
adding metric support for 502 status
fixing duplicating help entries when two module definitions with the same key are present
This commit is contained in:
Sheldan
2021-05-10 20:45:34 +02:00
parent 9ae35a7e9d
commit e31d257e6f
389 changed files with 21069 additions and 18187 deletions

View File

@@ -1,24 +0,0 @@
package dev.sheldan.abstracto.moderation.config.feature;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.config.PostTargetEnum;
import dev.sheldan.abstracto.moderation.config.posttarget.InviteFilterPostTarget;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
@Component
public class InviteFilterFeatureConfig implements FeatureConfig {
@Override
public FeatureDefinition getFeature() {
return ModerationFeatureDefinition.INVITE_FILTER;
}
@Override
public List<PostTargetEnum> getRequiredPostTargets() {
return Arrays.asList(InviteFilterPostTarget.INVITE_DELETE_LOG);
}
}

View File

@@ -1,16 +0,0 @@
package dev.sheldan.abstracto.moderation.config.feature.mode;
import dev.sheldan.abstracto.core.config.FeatureMode;
import lombok.Getter;
@Getter
public enum InviteFilterMode implements FeatureMode {
TRACK_USES("trackUses"), FILTER_NOTIFICATIONS("filterNotifications");
private final String key;
InviteFilterMode(String key) {
this.key = key;
}
}

View File

@@ -1,16 +0,0 @@
package dev.sheldan.abstracto.moderation.config.posttarget;
import dev.sheldan.abstracto.core.config.PostTargetEnum;
import lombok.Getter;
@Getter
public enum InviteFilterPostTarget implements PostTargetEnum {
INVITE_DELETE_LOG("inviteDeleteLog");
private String key;
InviteFilterPostTarget(String key) {
this.key = key;
}
}

View File

@@ -1,21 +0,0 @@
package dev.sheldan.abstracto.moderation.exception;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;
public class AllowedInviteLinkNotFound extends AbstractoRunTimeException implements Templatable {
public AllowedInviteLinkNotFound(String message) {
super(message);
}
@Override
public String getTemplateName() {
return "allowed_invite_link_not_found_exception";
}
@Override
public Object getTemplateModel() {
return new Object();
}
}

View File

@@ -1,21 +0,0 @@
package dev.sheldan.abstracto.moderation.exception;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;
public class InvalidInviteException extends AbstractoRunTimeException implements Templatable {
public InvalidInviteException(String message) {
super(message);
}
@Override
public String getTemplateName() {
return "invalid_invite_link_exception";
}
@Override
public Object getTemplateModel() {
return new Object();
}
}

View File

@@ -1,37 +0,0 @@
package dev.sheldan.abstracto.moderation.model.database;
import dev.sheldan.abstracto.core.models.database.AServer;
import lombok.*;
import javax.persistence.*;
import java.time.Instant;
@Entity
@Table(name="allowed_invite_link")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@EqualsAndHashCode
public class AllowedInviteLink {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "code")
private String code;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "server_id", nullable = false)
private AServer server;
@Column(name = "created")
private Instant created;
@Column(name = "updated")
private Instant updated;
}

View File

@@ -1,43 +0,0 @@
package dev.sheldan.abstracto.moderation.model.database;
import dev.sheldan.abstracto.core.models.database.AServer;
import lombok.*;
import javax.persistence.*;
import java.time.Instant;
@Entity
@Table(name = "filtered_invite_link")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@EqualsAndHashCode
public class FilteredInviteLink {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "code")
private String code;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "server_id", nullable = false)
private AServer server;
/**
* The amount of times, this invite code has been tried.
*/
@Column(name = "uses")
private Long uses;
@Column(name = "created")
private Instant created;
@Column(name = "updated")
private Instant updated;
}

View File

@@ -1,16 +0,0 @@
package dev.sheldan.abstracto.moderation.model.template.command;
import dev.sheldan.abstracto.core.models.context.SlimUserInitiatedServerContext;
import dev.sheldan.abstracto.moderation.model.database.FilteredInviteLink;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import java.util.List;
@Getter
@Setter
@SuperBuilder
public class TrackedInviteLinksModel extends SlimUserInitiatedServerContext {
private List<FilteredInviteLink> inviteLinks;
}

View File

@@ -1,14 +0,0 @@
package dev.sheldan.abstracto.moderation.model.template.listener;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
public class DeletedInvite {
private String code;
private Long count;
}

View File

@@ -1,22 +0,0 @@
package dev.sheldan.abstracto.moderation.model.template.listener;
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.TextChannel;
import java.util.List;
@Getter
@Setter
@Builder
public class DeletedInvitesNotificationModel {
private Guild guild;
private TextChannel channel;
private Member author;
private Message message;
private List<DeletedInvite> invites;
}

View File

@@ -6,6 +6,7 @@ import net.dv8tion.jda.api.entities.Member;
import java.util.concurrent.CompletableFuture;
public interface BanService {
String BAN_EFFECT_KEY = "ban";
CompletableFuture<Void> banMember(Member member, String reason, ServerContext banLog);
CompletableFuture<Void> banUserViaId(Long guildId, Long userId, String reason, ServerContext banIdLog);
}

View File

@@ -1,19 +0,0 @@
package dev.sheldan.abstracto.moderation.service;
import dev.sheldan.abstracto.core.models.ServerUser;
import dev.sheldan.abstracto.moderation.model.database.FilteredInviteLink;
import java.util.List;
public interface InviteLinkFilterService {
boolean isCodeFiltered(String code, ServerUser serverUser);
boolean isCodeAllowed(String code, ServerUser serverUser);
boolean isCodeAllowed(String code, Long serverId);
void storeFilteredInviteLinkUsage(String code, ServerUser serverUser);
void allowInvite(String invite, Long serverId);
void disAllowInvite(String invite, Long serverId);
void clearAllTrackedInviteCodes(Long serverId);
void clearAllUses(String code, Long serverId);
List<FilteredInviteLink> getTopFilteredInviteLinks(Long serverId, Integer count);
List<FilteredInviteLink> getTopFilteredInviteLinks(Long serverId);
}

View File

@@ -6,5 +6,6 @@ import net.dv8tion.jda.api.entities.Member;
import java.util.concurrent.CompletableFuture;
public interface KickService {
String KICK_EFFECT_KEY = "kick";
CompletableFuture<Void> kickMember(Member member, String reason, KickLogModel kickLogModel);
}

View File

@@ -11,6 +11,7 @@ import java.time.Instant;
import java.util.concurrent.CompletableFuture;
public interface MuteService {
String MUTE_EFFECT_KEY = "mute";
CompletableFuture<Void> muteMember(Member memberToMute, Member userMuting, String reason, Instant unMuteDate, ServerChannelMessage message);
CompletableFuture<Void> muteUserInServer(FullUserInServer userToMute, FullUserInServer userMuting, String reason, Instant unMuteDate, ServerChannelMessage message);
CompletableFuture<Void> applyMuteRole(AUserInAServer aUserInAServer);

View File

@@ -9,6 +9,7 @@ import java.util.concurrent.CompletableFuture;
public interface WarnService {
String WARN_EFFECT_KEY = "warn";
CompletableFuture<Void> notifyAndLogFullUserWarning(WarnContext context);
CompletableFuture<Void> warnUserWithLog(WarnContext context);
void decayWarning(Warning warning, Instant decayDate);

View File

@@ -1,14 +0,0 @@
package dev.sheldan.abstracto.moderation.service.management;
import dev.sheldan.abstracto.core.models.ServerUser;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.moderation.model.database.AllowedInviteLink;
public interface AllowedInviteLinkManagement {
AllowedInviteLink createAllowedInviteLink(AServer server, String code);
void removeAllowedInviteLink(AServer server, String code);
AllowedInviteLink findAllowedInviteLinkByCode(AServer server, String code);
boolean allowedInviteLinkExists(AServer server, String code);
boolean allowedInviteLinkExists(Long serverId, String code);
boolean allowedInviteLinkExists(ServerUser serverUser, String code);
}

View File

@@ -1,18 +0,0 @@
package dev.sheldan.abstracto.moderation.service.management;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.moderation.model.database.FilteredInviteLink;
import java.util.List;
import java.util.Optional;
public interface FilteredInviteLinkManagement {
FilteredInviteLink createFilteredInviteLink(AServer server, String code);
Optional<FilteredInviteLink> findInviteLinkViaCode(AServer server, String code);
Optional<FilteredInviteLink> findInviteLinkViaCode(Long serverId, String code);
void clearFilteredInviteLinks(Long serverId);
void clearFilteredInviteLinks(AServer server);
void clearFilteredInviteLink(String code, Long serverId);
void clearFilteredInviteLink(String code, AServer server);
List<FilteredInviteLink> getTopFilteredInviteLink(Long serverId, Integer count);
}