added ability to delete embedded posts (only the author and the person embedding can delete them) (this requires the embeds to be stored, they are deleted if the embed is deleted)

added filter to only handle reactions not done by the bot
introduced completable future to the delete message wrapper
fixed multi embed handling always resulting in two embeds
added logging of template exceptions
refactored link embed handling to be in a service instead of the listener
This commit is contained in:
Sheldan
2020-04-07 22:32:56 +02:00
parent 02a7c3633b
commit 523aaaae2a
17 changed files with 442 additions and 95 deletions

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.utility;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class MessageEmbedLink {
private Long serverId;
private Long channelId;
private Long messageId;
private String wholeUrl;
}

View File

@@ -0,0 +1,55 @@
package dev.sheldan.abstracto.utility.models;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import lombok.*;
import javax.persistence.*;
@Entity
@Table(name="embedded_message")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class EmbeddedMessage {
@Getter
@ManyToOne
@JoinColumn(name = "embeddedUser")
private AUserInAServer embeddedUser;
@Getter
@ManyToOne
@JoinColumn(name = "embeddingUser")
private AUserInAServer embeddingUser;
@Getter
@ManyToOne
@JoinColumn(name = "originalServer")
private AServer embeddedServer;
@Getter
@ManyToOne
@JoinColumn(name = "originalChannel")
private AChannel embeddedChannel;
@Column
private Long embeddedMessageId;
@Getter
@ManyToOne
@JoinColumn(name = "embeddingServer")
private AServer embeddingServer;
@Getter
@ManyToOne
@JoinColumn(name = "embeddingChannel")
private AChannel embeddingChannel;
@Column
@Id
private Long embeddingMessageId;
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.utility.service;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.utility.MessageEmbedLink;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.TextChannel;
import java.util.List;
public interface MessageEmbedService {
List<MessageEmbedLink> getLinksInMessage(String message);
void embedLinks(List<MessageEmbedLink> linksToEmbed, TextChannel target, AUserInAServer reason, Message embeddingMessage);
void embedLink(CachedMessage cachedMessage, TextChannel target, AUserInAServer cause, Message embeddingMessage);
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.utility.service.management;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.utility.models.EmbeddedMessage;
import net.dv8tion.jda.api.entities.Message;
import java.util.Optional;
public interface MessageEmbedPostManagementService {
void createMessageEmbed(CachedMessage embeddedMessage, Message messageContainingEmbed, AUserInAServer cause);
Optional<EmbeddedMessage> findEmbeddedPostByMessageId(Long messageId);
void deleteEmbeddedMessage(EmbeddedMessage embeddedMessage);
void deleteEmbeddedMessageTransactional(EmbeddedMessage embeddedMessage);
}