added listener to listen for all reactions removed

This commit is contained in:
Sheldan
2020-05-17 00:40:16 +02:00
parent db8edb26f0
commit 59ff1f1f40
5 changed files with 41 additions and 2 deletions

View File

@@ -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);
});
}
} }

View File

@@ -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);
} }

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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) {