[AB-217] adding profanity service

using profanity service to filter profanities in urban define
adding cache clearing listeners
fixing using 0 as default for maxMessages if not defined
This commit is contained in:
Sheldan
2021-04-04 16:23:13 +02:00
parent d6bb269ffc
commit 602f0d5bf4
41 changed files with 1245 additions and 34 deletions

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.core.exception;
import dev.sheldan.abstracto.core.templating.Templatable;
public class ProfanityGroupExistsException extends AbstractoRunTimeException implements Templatable {
@Override
public String getTemplateName() {
return "profanity_group_exists_exception";
}
@Override
public Object getTemplateModel() {
return new Object();
}
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.core.exception;
import dev.sheldan.abstracto.core.templating.Templatable;
public class ProfanityGroupNotFoundException extends AbstractoRunTimeException implements Templatable {
@Override
public String getTemplateName() {
return "profanity_group_not_found_exception";
}
@Override
public Object getTemplateModel() {
return new Object();
}
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.core.exception;
import dev.sheldan.abstracto.core.templating.Templatable;
public class ProfanityRegexExistsException extends AbstractoRunTimeException implements Templatable {
@Override
public String getTemplateName() {
return "profanity_regex_exists_exception";
}
@Override
public Object getTemplateModel() {
return new Object();
}
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.core.exception;
import dev.sheldan.abstracto.core.templating.Templatable;
public class ProfanityRegexNotFoundException extends AbstractoRunTimeException implements Templatable {
@Override
public String getTemplateName() {
return "profanity_regex_not_found_exception";
}
@Override
public Object getTemplateModel() {
return new Object();
}
}

View File

@@ -0,0 +1,8 @@
package dev.sheldan.abstracto.core.listener.async.entity;
import dev.sheldan.abstracto.core.listener.AbstractoListener;
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
import dev.sheldan.abstracto.core.models.listener.VoidListenerModel;
public interface AsyncCacheClearingListener extends AbstractoListener<VoidListenerModel, DefaultListenerResult> {
}

View File

@@ -26,12 +26,14 @@ public class PostTarget implements Serializable {
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "channel_id", nullable = false)
@Getter @Setter
@Getter
@Setter
private AChannel channelReference;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="server_id", nullable = false)
@Getter @Setter
@Getter
@Setter
private AServer serverReference;
@Column(name = "created")

View File

@@ -0,0 +1,45 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import javax.persistence.*;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "profanity_group")
@Getter
@Builder
@Setter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class ProfanityGroup {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String groupName;
@OneToMany(
fetch = FetchType.LAZY,
orphanRemoval = true,
cascade = {CascadeType.PERSIST, CascadeType.MERGE},
mappedBy = "group")
@Builder.Default
private List<ProfanityRegex> profanities = new ArrayList<>();
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="server_id", nullable = false)
@Getter
@Setter
private AServer server;
@Column(name = "created")
private Instant created;
}

View File

@@ -0,0 +1,39 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import javax.persistence.*;
import java.time.Instant;
@Entity
@Table(name = "profanity_regex")
@Getter
@Builder
@Setter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class ProfanityRegex {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String regexName;
@Column(name = "regex")
private String regex;
@Column(name = "replacement")
private String replacement;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="profanity_group_id", nullable = false)
@Getter
@Setter
private ProfanityGroup group;
@Column(name = "created")
private Instant created;
}

View File

@@ -0,0 +1,12 @@
package dev.sheldan.abstracto.core.models.listener;
import dev.sheldan.abstracto.core.listener.ListenerModel;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class VoidListenerModel implements ListenerModel {
}

View File

@@ -0,0 +1,16 @@
package dev.sheldan.abstracto.core.models.template.commands;
import dev.sheldan.abstracto.core.models.context.SlimUserInitiatedServerContext;
import dev.sheldan.abstracto.core.models.database.ProfanityGroup;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import java.util.List;
@Getter
@Setter
@SuperBuilder
public class ProfanityConfigModel extends SlimUserInitiatedServerContext {
private List<ProfanityGroup> profanityGroups;
}

View File

@@ -0,0 +1,18 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.database.ProfanityGroup;
import dev.sheldan.abstracto.core.models.database.ProfanityRegex;
public interface ProfanityService {
String replaceProfanities(String input, Long serverId);
String replaceProfanities(String input, Long serverId, String replacement);
String replaceProfanitiesWithDefault(String input, Long serverId, String replacement);
boolean containsProfanity(String input, Long serverId);
ProfanityGroup createProfanityGroup(Long serverId, String profanityGroupName);
void deleteProfanityGroup(Long serverId, String profanityGroupName);
void deleteProfanityRegex(Long serverId, String profanityGroupName, String profanityRegexName);
ProfanityRegex createProfanityRegex(Long serverId, String profanityGroupName, String profanityRegexName, String regex);
ProfanityRegex createProfanityRegex(Long serverId, String profanityGroupName, String profanityRegexName, String regex, String replacement);
void reloadRegex();
void reloadRegex(Long serverId);
}

View File

@@ -0,0 +1,18 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.ProfanityGroup;
import java.util.List;
import java.util.Optional;
public interface ProfanityGroupManagementService {
List<ProfanityGroup> getAllGroups();
List<ProfanityGroup> getAllForServer(Long serverId);
ProfanityGroup createProfanityGroup(AServer server, String name);
boolean doesProfanityGroupExist(AServer server, String name);
Optional<ProfanityGroup> getProfanityGroupOptional(AServer server, String name);
ProfanityGroup getProfanityGroup(AServer server, String name);
void deleteProfanityGroup(ProfanityGroup profanityGroup);
void deleteProfanityGroup(AServer server, String name);
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.ProfanityGroup;
import dev.sheldan.abstracto.core.models.database.ProfanityRegex;
import java.util.Optional;
public interface ProfanityRegexManagementService {
ProfanityRegex createProfanityRegex(ProfanityGroup profanityGroup, String name, String regex, String replacement);
ProfanityRegex createProfanityRegex(ProfanityGroup profanityGroup, String name, String regex);
void deleteProfanityRegex(ProfanityRegex profanityRegex);
void deleteProfanityRegex(ProfanityGroup group, String profanityName);
boolean doesProfanityRegexExist(ProfanityGroup profanityGroup, String name);
Optional<ProfanityRegex> getProfanityRegexOptional(ProfanityGroup profanityGroup, String name);
}