mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-30 01:53:09 +00:00
added listener to listen for all reactions removed
This commit is contained in:
@@ -3,6 +3,7 @@ package dev.sheldan.abstracto.utility.listener.starboard;
|
|||||||
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||||
import dev.sheldan.abstracto.core.listener.ReactedAddedListener;
|
import dev.sheldan.abstracto.core.listener.ReactedAddedListener;
|
||||||
import dev.sheldan.abstracto.core.listener.ReactedRemovedListener;
|
import dev.sheldan.abstracto.core.listener.ReactedRemovedListener;
|
||||||
|
import dev.sheldan.abstracto.core.listener.ReactionClearedListener;
|
||||||
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
||||||
import dev.sheldan.abstracto.core.models.cache.CachedReaction;
|
import dev.sheldan.abstracto.core.models.cache.CachedReaction;
|
||||||
import dev.sheldan.abstracto.core.models.database.AEmote;
|
import dev.sheldan.abstracto.core.models.database.AEmote;
|
||||||
@@ -30,7 +31,7 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class StarboardListener implements ReactedAddedListener, ReactedRemovedListener {
|
public class StarboardListener implements ReactedAddedListener, ReactedRemovedListener, ReactionClearedListener {
|
||||||
|
|
||||||
public static final String STAR_EMOTE = "star";
|
public static final String STAR_EMOTE = "star";
|
||||||
|
|
||||||
@@ -148,4 +149,14 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
|
|||||||
public FeatureEnum getFeature() {
|
public FeatureEnum getFeature() {
|
||||||
return UtilityFeature.STARBOARD;
|
return UtilityFeature.STARBOARD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void executeReactionCleared(CachedMessage message) {
|
||||||
|
Optional<StarboardPost> starboardPostOptional = starboardPostManagementService.findByMessageId(message.getMessageId());
|
||||||
|
|
||||||
|
starboardPostOptional.ifPresent(starboardPost -> {
|
||||||
|
starboardPostReactorManagementService.removeReactors(starboardPost);
|
||||||
|
completelyRemoveStarboardPost(starboardPost);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ public class StarboardPostManagementServiceBean implements StarboardPostManageme
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removePost(StarboardPost starboardPost) {
|
public void removePost(StarboardPost starboardPost) {
|
||||||
|
starboardPost.getReactions().clear();
|
||||||
repository.delete(starboardPost);
|
repository.delete(starboardPost);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,9 @@ public class ReactionUpdatedListener extends ListenerAdapter {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private List<ReactedAddedListener> addedListenerList;
|
private List<ReactedAddedListener> addedListenerList;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private List<ReactionClearedListener> clearedListenerList;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private List<ReactedRemovedListener> reactionRemovedListener;
|
private List<ReactedRemovedListener> reactionRemovedListener;
|
||||||
|
|
||||||
@@ -156,6 +159,21 @@ public class ReactionUpdatedListener extends ListenerAdapter {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public void callClearListeners(@Nonnull GuildMessageReactionRemoveAllEvent event, CachedMessage cachedMessage) {
|
||||||
|
clearedListenerList.forEach(reactionRemovedListener -> {
|
||||||
|
FeatureConfig feature = featureConfigService.getFeatureDisplayForFeature(reactionRemovedListener.getFeature());
|
||||||
|
if(!featureFlagService.isFeatureEnabled(feature, event.getGuild().getIdLong())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
reactionRemovedListener.executeReactionCleared(cachedMessage);
|
||||||
|
} catch (AbstractoRunTimeException e) {
|
||||||
|
log.warn(String.format("Failed to execute reaction clear listener %s.", reactionRemovedListener.getClass().getName()), e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public void onGuildMessageReactionRemoveAll(@Nonnull GuildMessageReactionRemoveAllEvent event) {
|
public void onGuildMessageReactionRemoveAll(@Nonnull GuildMessageReactionRemoveAllEvent event) {
|
||||||
@@ -163,6 +181,7 @@ public class ReactionUpdatedListener extends ListenerAdapter {
|
|||||||
asyncMessageFromCache.thenAccept(cachedMessage -> {
|
asyncMessageFromCache.thenAccept(cachedMessage -> {
|
||||||
cachedMessage.getReactions().clear();
|
cachedMessage.getReactions().clear();
|
||||||
messageCache.putMessageInCache(cachedMessage);
|
messageCache.putMessageInCache(cachedMessage);
|
||||||
|
self.callClearListeners(event, cachedMessage);
|
||||||
}) .exceptionally(throwable -> {
|
}) .exceptionally(throwable -> {
|
||||||
log.error("Message retrieval from cache failed for message {}", event.getMessageIdLong(), throwable);
|
log.error("Message retrieval from cache failed for message {}", event.getMessageIdLong(), throwable);
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package dev.sheldan.abstracto.core.listener;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
||||||
|
|
||||||
|
public interface ReactionClearedListener extends FeatureAware {
|
||||||
|
void executeReactionCleared(CachedMessage message);
|
||||||
|
}
|
||||||
@@ -21,9 +21,10 @@ public class EmoteUtils {
|
|||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else if(reaction.isEmoji()){
|
||||||
return reaction.getEmoji().equals(emote.getEmoteKey());
|
return reaction.getEmoji().equals(emote.getEmoteKey());
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Optional<CachedReaction> getReactionFromMessageByEmote(CachedMessage message, AEmote emote) {
|
public static Optional<CachedReaction> getReactionFromMessageByEmote(CachedMessage message, AEmote emote) {
|
||||||
|
|||||||
Reference in New Issue
Block a user