mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-17 04:29:13 +00:00
fixed link embedding not properly working with sessions
This commit is contained in:
@@ -3,7 +3,6 @@ package dev.sheldan.abstracto.utility.listener.embed;
|
|||||||
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||||
import dev.sheldan.abstracto.core.listener.MessageReceivedListener;
|
import dev.sheldan.abstracto.core.listener.MessageReceivedListener;
|
||||||
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
|
||||||
import dev.sheldan.abstracto.core.service.MessageCache;
|
import dev.sheldan.abstracto.core.service.MessageCache;
|
||||||
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||||
import dev.sheldan.abstracto.utility.models.MessageEmbedLink;
|
import dev.sheldan.abstracto.utility.models.MessageEmbedLink;
|
||||||
@@ -31,16 +30,18 @@ public class MessageEmbedListener implements MessageReceivedListener {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private MessageEmbedService messageEmbedService;
|
private MessageEmbedService messageEmbedService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MessageEmbedListener self;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(Message message) {
|
public void execute(Message message) {
|
||||||
String messageRaw = message.getContentRaw();
|
String messageRaw = message.getContentRaw();
|
||||||
List<MessageEmbedLink> links = messageEmbedService.getLinksInMessage(messageRaw);
|
List<MessageEmbedLink> links = messageEmbedService.getLinksInMessage(messageRaw);
|
||||||
for (MessageEmbedLink messageEmbedLink : links) {
|
for (MessageEmbedLink messageEmbedLink : links) {
|
||||||
messageRaw = messageRaw.replace(messageEmbedLink.getWholeUrl(), "");
|
messageRaw = messageRaw.replace(messageEmbedLink.getWholeUrl(), "");
|
||||||
Long cause = userInServerManagementService.loadUser(message.getMember()).getUserInServerId();
|
Long userEmbeddingUserInServerId = userInServerManagementService.loadUser(message.getMember()).getUserInServerId();
|
||||||
Consumer<CachedMessage> cachedMessageConsumer = cachedMessage -> {
|
Consumer<CachedMessage> cachedMessageConsumer = cachedMessage -> {
|
||||||
AUserInAServer userInAServer = userInServerManagementService.loadUser(cause);
|
self.loadUserAndEmbed(message, userEmbeddingUserInServerId, cachedMessage);
|
||||||
messageEmbedService.embedLink(cachedMessage, message.getTextChannel(), userInAServer , message);
|
|
||||||
};
|
};
|
||||||
messageCache.getMessageFromCache(messageEmbedLink.getServerId(), messageEmbedLink.getChannelId(), messageEmbedLink.getMessageId()).thenAccept(cachedMessageConsumer)
|
messageCache.getMessageFromCache(messageEmbedLink.getServerId(), messageEmbedLink.getChannelId(), messageEmbedLink.getMessageId()).thenAccept(cachedMessageConsumer)
|
||||||
.exceptionally(throwable -> {
|
.exceptionally(throwable -> {
|
||||||
@@ -53,6 +54,10 @@ public class MessageEmbedListener implements MessageReceivedListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void loadUserAndEmbed(Message message, Long cause, CachedMessage cachedMessage) {
|
||||||
|
messageEmbedService.embedLink(cachedMessage, message.getTextChannel(), cause , message);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FeatureEnum getFeature() {
|
public FeatureEnum getFeature() {
|
||||||
return UtilityFeature.LINK_EMBEDS;
|
return UtilityFeature.LINK_EMBEDS;
|
||||||
|
|||||||
@@ -96,13 +96,11 @@ public class MessageEmbedServiceBean implements MessageEmbedService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void embedLinks(List<MessageEmbedLink> linksToEmbed, TextChannel target, AUserInAServer reason, Message embeddingMessage) {
|
public void embedLinks(List<MessageEmbedLink> linksToEmbed, TextChannel target, Long userEmbeddingUserInServerId, Message embeddingMessage) {
|
||||||
linksToEmbed.forEach(messageEmbedLink -> {
|
linksToEmbed.forEach(messageEmbedLink -> {
|
||||||
Long userInServerId = reason.getUserInServerId();
|
|
||||||
messageCache.getMessageFromCache(messageEmbedLink.getServerId(), messageEmbedLink.getChannelId(), messageEmbedLink.getMessageId())
|
messageCache.getMessageFromCache(messageEmbedLink.getServerId(), messageEmbedLink.getChannelId(), messageEmbedLink.getMessageId())
|
||||||
.thenAccept(cachedMessage -> {
|
.thenAccept(cachedMessage -> {
|
||||||
AUserInAServer cause = userInServerManagementService.loadUser(userInServerId);
|
self.embedLink(cachedMessage, target, userEmbeddingUserInServerId, embeddingMessage);
|
||||||
self.embedLink(cachedMessage, target, cause, embeddingMessage);
|
|
||||||
}
|
}
|
||||||
).exceptionally(throwable -> {
|
).exceptionally(throwable -> {
|
||||||
log.error("Message retrieval from cache failed for message {}.", messageEmbedLink.getMessageId(), throwable);
|
log.error("Message retrieval from cache failed for message {}.", messageEmbedLink.getMessageId(), throwable);
|
||||||
@@ -113,7 +111,8 @@ public class MessageEmbedServiceBean implements MessageEmbedService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public void embedLink(CachedMessage cachedMessage, TextChannel target, AUserInAServer cause, Message embeddingMessage) {
|
public void embedLink(CachedMessage cachedMessage, TextChannel target, Long userEmbeddingUserInServerId, Message embeddingMessage) {
|
||||||
|
AUserInAServer cause = userInServerManagementService.loadUser(userEmbeddingUserInServerId);
|
||||||
MessageEmbeddedModel messageEmbeddedModel = buildTemplateParameter(embeddingMessage, cachedMessage);
|
MessageEmbeddedModel messageEmbeddedModel = buildTemplateParameter(embeddingMessage, cachedMessage);
|
||||||
MessageToSend embed = templateService.renderEmbedTemplate(MESSAGE_EMBED_TEMPLATE, messageEmbeddedModel);
|
MessageToSend embed = templateService.renderEmbedTemplate(MESSAGE_EMBED_TEMPLATE, messageEmbeddedModel);
|
||||||
List<CompletableFuture<Message>> completableFutures = channelService.sendMessageToSendToChannel(embed, target);
|
List<CompletableFuture<Message>> completableFutures = channelService.sendMessageToSendToChannel(embed, target);
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package dev.sheldan.abstracto.utility.service;
|
package dev.sheldan.abstracto.utility.service;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
|
||||||
import dev.sheldan.abstracto.utility.models.MessageEmbedLink;
|
import dev.sheldan.abstracto.utility.models.MessageEmbedLink;
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
import net.dv8tion.jda.api.entities.TextChannel;
|
import net.dv8tion.jda.api.entities.TextChannel;
|
||||||
@@ -10,6 +9,6 @@ import java.util.List;
|
|||||||
|
|
||||||
public interface MessageEmbedService {
|
public interface MessageEmbedService {
|
||||||
List<MessageEmbedLink> getLinksInMessage(String message);
|
List<MessageEmbedLink> getLinksInMessage(String message);
|
||||||
void embedLinks(List<MessageEmbedLink> linksToEmbed, TextChannel target, AUserInAServer reason, Message embeddingMessage);
|
void embedLinks(List<MessageEmbedLink> linksToEmbed, TextChannel target, Long userEmbeddingUserInServerId, Message embeddingMessage);
|
||||||
void embedLink(CachedMessage cachedMessage, TextChannel target, AUserInAServer cause, Message embeddingMessage);
|
void embedLink(CachedMessage cachedMessage, TextChannel target, Long userEmbeddingUserInServerId, Message embeddingMessage);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ import org.springframework.cache.annotation.CacheConfig;
|
|||||||
import org.springframework.cache.annotation.CachePut;
|
import org.springframework.cache.annotation.CachePut;
|
||||||
import org.springframework.cache.annotation.Cacheable;
|
import org.springframework.cache.annotation.Cacheable;
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.scheduling.annotation.Async;
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
@@ -44,6 +44,11 @@ public class MessageCacheBean implements MessageCache {
|
|||||||
// needs to be lazy, because of circular dependency
|
// needs to be lazy, because of circular dependency
|
||||||
private MessageCache self;
|
private MessageCache self;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
@Lazy
|
||||||
|
// needs to be lazy, because of circular dependency
|
||||||
|
private MessageCacheBean concreteSelf;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@CachePut(key = "#message.id")
|
@CachePut(key = "#message.id")
|
||||||
public CompletableFuture<CachedMessage> putMessageInCache(Message message) {
|
public CompletableFuture<CachedMessage> putMessageInCache(Message message) {
|
||||||
@@ -155,9 +160,7 @@ public class MessageCacheBean implements MessageCache {
|
|||||||
|
|
||||||
List<Long> ausers = new ArrayList<>();
|
List<Long> ausers = new ArrayList<>();
|
||||||
users.forEachAsync(user -> {
|
users.forEachAsync(user -> {
|
||||||
if(reaction.getGuild() != null) {
|
concreteSelf.loadUser(reaction, ausers, user);
|
||||||
ausers.add(userInServerManagementService.loadUser(reaction.getGuild().getIdLong(), user.getIdLong()).getUserInServerId());
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}).thenAccept(o -> future.complete(builder.build()))
|
}).thenAccept(o -> future.complete(builder.build()))
|
||||||
.exceptionally(throwable -> {
|
.exceptionally(throwable -> {
|
||||||
@@ -168,6 +171,13 @@ public class MessageCacheBean implements MessageCache {
|
|||||||
builder.emote(emoteService.buildAEmoteFromReaction(reaction.getReactionEmote()));
|
builder.emote(emoteService.buildAEmoteFromReaction(reaction.getReactionEmote()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public void loadUser(MessageReaction reaction, List<Long> ausers, User user) {
|
||||||
|
if(reaction.getGuild() != null) {
|
||||||
|
ausers.add(userInServerManagementService.loadUser(reaction.getGuild().getIdLong(), user.getIdLong()).getUserInServerId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private CachedEmbed getCachedEmbedFromEmbed(MessageEmbed embed) {
|
private CachedEmbed getCachedEmbedFromEmbed(MessageEmbed embed) {
|
||||||
CachedEmbed.CachedEmbedBuilder builder = CachedEmbed
|
CachedEmbed.CachedEmbedBuilder builder = CachedEmbed
|
||||||
.builder();
|
.builder();
|
||||||
|
|||||||
Reference in New Issue
Block a user