[AB-296] adding support for buttons

adding buttons for message embed via feature mode
This commit is contained in:
Sheldan
2021-07-03 10:40:27 +02:00
parent bbc5918d88
commit 61eefd53c3
63 changed files with 1379 additions and 104 deletions

View File

@@ -2,6 +2,7 @@ package dev.sheldan.abstracto.linkembed.config;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.config.FeatureMode;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@@ -19,4 +20,9 @@ public class LinkEmbedFeatureConfig implements FeatureConfig {
public List<String> getRequiredEmotes() {
return Arrays.asList("removeEmbed");
}
@Override
public List<FeatureMode> getAvailableModes() {
return Arrays.asList(LinkEmbedFeatureMode.DELETE_BUTTON);
}
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.linkembed.config;
import dev.sheldan.abstracto.core.config.FeatureMode;
import lombok.Getter;
@Getter
public enum LinkEmbedFeatureMode implements FeatureMode {
DELETE_BUTTON("messageEmbedDeleteButton");
private final String key;
LinkEmbedFeatureMode(String key) {
this.key = key;
}
}

View File

@@ -0,0 +1,20 @@
package dev.sheldan.abstracto.linkembed.exception;
import dev.sheldan.abstracto.core.exception.AbstractoTemplatableException;
public class LinkEmbedRemovalNotAllowedException extends AbstractoTemplatableException {
public LinkEmbedRemovalNotAllowedException() {
super("User is not allowed remove the embedded link.");
}
@Override
public String getTemplateName() {
return "link_embed_removal_not_allowed_exception";
}
@Override
public Object getTemplateModel() {
return new Object();
}
}

View File

@@ -56,6 +56,9 @@ public class EmbeddedMessage implements Serializable {
@Id
private Long embeddingMessageId;
@Column(name = "deletion_component_id", length = 100)
private String deletionComponentId;
@Column(name = "created", nullable = false, insertable = false, updatable = false)
private Instant created;

View File

@@ -0,0 +1,20 @@
package dev.sheldan.abstracto.linkembed.model.template;
import dev.sheldan.abstracto.core.models.template.button.ButtonPayload;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class MessageEmbedDeleteButtonPayload implements ButtonPayload {
private Long embeddingServerId;
private Long embeddingChannelId;
private Long embeddingMessageId;
private Long embeddedServerId;
private Long embeddedChannelId;
private Long embeddedMessageId;
private Long embeddedUserId;
private Long embeddingUserId;
}

View File

@@ -0,0 +1,23 @@
package dev.sheldan.abstracto.linkembed.model.template;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
import dev.sheldan.abstracto.core.models.template.button.ButtonConfigModel;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.entities.User;
@Getter
@Setter
@SuperBuilder
public class MessageEmbeddedModel extends UserInitiatedServerContext {
private CachedMessage embeddedMessage;
private User author;
private TextChannel sourceChannel;
private Member embeddingUser;
private ButtonConfigModel buttonConfigModel;
private Boolean useButton;
}

View File

@@ -0,0 +1,7 @@
package dev.sheldan.abstracto.linkembed.service;
public interface MessageEmbedMetricService {
void incrementMessageEmbedDeletedMetric(boolean embeddedUserDeleted);
void incrementMessageEmbedDeletedEmbeddedMetric();
void incrementMessageEmbedDeletedEmbeddingMetric();
}

View File

@@ -10,7 +10,7 @@ import java.util.List;
import java.util.Optional;
public interface MessageEmbedPostManagementService {
void createMessageEmbed(CachedMessage embeddedMessage, Message messageContainingEmbed, AUserInAServer cause);
void createMessageEmbed(CachedMessage embeddedMessage, Message messageContainingEmbed, AUserInAServer cause, String deletionButtonId);
Optional<EmbeddedMessage> findEmbeddedPostByMessageId(Long messageId);
void deleteEmbeddedMessage(EmbeddedMessage embeddedMessage);
List<EmbeddedMessage> getEmbeddedMessagesOlderThan(Instant date);