mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-07-09 02:27:59 +00:00
[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:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user