[AB-151] adding ability to define a priority in order to define which listener is executed before another

This commit is contained in:
Sheldan
2020-10-20 21:58:04 +02:00
parent dca98c2953
commit 389b38f4f0
34 changed files with 172 additions and 10 deletions

View File

@@ -5,6 +5,7 @@ import dev.sheldan.abstracto.assignableroles.models.database.AssignableRolePlace
import dev.sheldan.abstracto.assignableroles.models.database.AssignableRolePlacePost; import dev.sheldan.abstracto.assignableroles.models.database.AssignableRolePlacePost;
import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePlacePostManagementService; import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePlacePostManagementService;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.ListenerPriority;
import dev.sheldan.abstracto.core.listener.MessageDeletedListener; import dev.sheldan.abstracto.core.listener.MessageDeletedListener;
import dev.sheldan.abstracto.core.models.AServerAChannelAUser; import dev.sheldan.abstracto.core.models.AServerAChannelAUser;
import dev.sheldan.abstracto.core.models.GuildChannelMember; import dev.sheldan.abstracto.core.models.GuildChannelMember;
@@ -37,4 +38,9 @@ public class AssignablePostDeletedListener implements MessageDeletedListener {
public FeatureEnum getFeature() { public FeatureEnum getFeature() {
return AssignableRoleFeature.ASSIGNABLE_ROLES; return AssignableRoleFeature.ASSIGNABLE_ROLES;
} }
@Override
public Integer getPriority() {
return ListenerPriority.LOW;
}
} }

View File

@@ -12,6 +12,7 @@ import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePl
import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePlacePostManagementService; import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePlacePostManagementService;
import dev.sheldan.abstracto.assignableroles.service.management.AssignedRoleUserManagementService; import dev.sheldan.abstracto.assignableroles.service.management.AssignedRoleUserManagementService;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.ListenerPriority;
import dev.sheldan.abstracto.core.listener.ReactedAddedListener; import dev.sheldan.abstracto.core.listener.ReactedAddedListener;
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.models.database.AUserInAServer;
@@ -130,4 +131,9 @@ public class AssignablePostReactionAdded implements ReactedAddedListener {
public FeatureEnum getFeature() { public FeatureEnum getFeature() {
return AssignableRoleFeature.ASSIGNABLE_ROLES; return AssignableRoleFeature.ASSIGNABLE_ROLES;
} }
@Override
public Integer getPriority() {
return ListenerPriority.HIGH;
}
} }

View File

@@ -5,6 +5,7 @@ import dev.sheldan.abstracto.assignableroles.models.database.AssignableRolePlace
import dev.sheldan.abstracto.assignableroles.service.AssignableRoleService; import dev.sheldan.abstracto.assignableroles.service.AssignableRoleService;
import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePlacePostManagementService; import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePlacePostManagementService;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.ListenerPriority;
import dev.sheldan.abstracto.core.listener.ReactedRemovedListener; import dev.sheldan.abstracto.core.listener.ReactedRemovedListener;
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.models.database.AUserInAServer;
@@ -62,4 +63,9 @@ public class AssignablePostReactionRemoved implements ReactedRemovedListener {
} }
} }
} }
@Override
public Integer getPriority() {
return ListenerPriority.HIGH;
}
} }

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.experience.listener; package dev.sheldan.abstracto.experience.listener;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.ListenerPriority;
import dev.sheldan.abstracto.core.listener.MessageReceivedListener; import dev.sheldan.abstracto.core.listener.MessageReceivedListener;
import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService; import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
@@ -36,4 +37,9 @@ public class ExperienceTrackerListener implements MessageReceivedListener {
public FeatureEnum getFeature() { public FeatureEnum getFeature() {
return ExperienceFeature.EXPERIENCE; return ExperienceFeature.EXPERIENCE;
} }
@Override
public Integer getPriority() {
return ListenerPriority.MEDIUM;
}
} }

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.experience.listener; package dev.sheldan.abstracto.experience.listener;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.ListenerPriority;
import dev.sheldan.abstracto.core.listener.JoinListener; import dev.sheldan.abstracto.core.listener.JoinListener;
import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.experience.config.features.ExperienceFeature; import dev.sheldan.abstracto.experience.config.features.ExperienceFeature;
@@ -45,4 +46,9 @@ public class JoiningUserRoleListener implements JoinListener {
public FeatureEnum getFeature() { public FeatureEnum getFeature() {
return ExperienceFeature.EXPERIENCE; return ExperienceFeature.EXPERIENCE;
} }
@Override
public Integer getPriority() {
return ListenerPriority.MEDIUM;
}
} }

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.moderation.listener; package dev.sheldan.abstracto.moderation.listener;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.ListenerPriority;
import dev.sheldan.abstracto.core.listener.JoinListener; import dev.sheldan.abstracto.core.listener.JoinListener;
import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.service.PostTargetService; import dev.sheldan.abstracto.core.service.PostTargetService;
@@ -47,4 +48,9 @@ public class JoinLogger implements JoinListener {
public FeatureEnum getFeature() { public FeatureEnum getFeature() {
return ModerationFeatures.LOGGING; return ModerationFeatures.LOGGING;
} }
@Override
public Integer getPriority() {
return ListenerPriority.MEDIUM;
}
} }

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.moderation.listener; package dev.sheldan.abstracto.moderation.listener;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.ListenerPriority;
import dev.sheldan.abstracto.core.listener.JoinListener; import dev.sheldan.abstracto.core.listener.JoinListener;
import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures; import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures;
@@ -34,4 +35,9 @@ public class JoinMuteListener implements JoinListener {
public FeatureEnum getFeature() { public FeatureEnum getFeature() {
return ModerationFeatures.MUTING; return ModerationFeatures.MUTING;
} }
@Override
public Integer getPriority() {
return ListenerPriority.HIGH;
}
} }

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.moderation.listener; package dev.sheldan.abstracto.moderation.listener;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.ListenerPriority;
import dev.sheldan.abstracto.core.listener.LeaveListener; import dev.sheldan.abstracto.core.listener.LeaveListener;
import dev.sheldan.abstracto.core.service.PostTargetService; import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures; import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures;
@@ -49,4 +50,9 @@ public class LeaveLogger implements LeaveListener {
public FeatureEnum getFeature() { public FeatureEnum getFeature() {
return ModerationFeatures.LOGGING; return ModerationFeatures.LOGGING;
} }
@Override
public Integer getPriority() {
return ListenerPriority.MEDIUM;
}
} }

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.moderation.listener; package dev.sheldan.abstracto.moderation.listener;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.ListenerPriority;
import dev.sheldan.abstracto.core.listener.MessageDeletedListener; import dev.sheldan.abstracto.core.listener.MessageDeletedListener;
import dev.sheldan.abstracto.core.models.AServerAChannelAUser; import dev.sheldan.abstracto.core.models.AServerAChannelAUser;
import dev.sheldan.abstracto.core.models.GuildChannelMember; import dev.sheldan.abstracto.core.models.GuildChannelMember;
@@ -74,4 +75,9 @@ public class MessageDeleteLogListener implements MessageDeletedListener {
public FeatureEnum getFeature() { public FeatureEnum getFeature() {
return ModerationFeatures.LOGGING; return ModerationFeatures.LOGGING;
} }
@Override
public Integer getPriority() {
return ListenerPriority.MEDIUM;
}
} }

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.moderation.listener; package dev.sheldan.abstracto.moderation.listener;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.ListenerPriority;
import dev.sheldan.abstracto.core.listener.MessageTextUpdatedListener; import dev.sheldan.abstracto.core.listener.MessageTextUpdatedListener;
import dev.sheldan.abstracto.core.models.cache.CachedMessage; import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures; import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures;
@@ -51,4 +52,9 @@ public class MessageEditedListener implements MessageTextUpdatedListener {
public FeatureEnum getFeature() { public FeatureEnum getFeature() {
return ModerationFeatures.LOGGING; return ModerationFeatures.LOGGING;
} }
@Override
public Integer getPriority() {
return ListenerPriority.MEDIUM;
}
} }

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.modmail.listener; package dev.sheldan.abstracto.modmail.listener;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.ListenerPriority;
import dev.sheldan.abstracto.core.listener.MessageDeletedListener; import dev.sheldan.abstracto.core.listener.MessageDeletedListener;
import dev.sheldan.abstracto.core.models.AServerAChannelAUser; import dev.sheldan.abstracto.core.models.AServerAChannelAUser;
import dev.sheldan.abstracto.core.models.GuildChannelMember; import dev.sheldan.abstracto.core.models.GuildChannelMember;
@@ -54,7 +55,7 @@ public class ModMailMessageDeletedListener implements MessageDeletedListener {
} else { } else {
channelDeletePromise = CompletableFuture.completedFuture(null); channelDeletePromise = CompletableFuture.completedFuture(null);
} }
CompletableFuture.allOf(dmDeletePromise, channelDeletePromise).thenAccept(unused -> CompletableFuture.allOf(dmDeletePromise, channelDeletePromise).whenComplete((unused, throwable) ->
self.removeMessageFromThread(messageBefore.getMessageId()) self.removeMessageFromThread(messageBefore.getMessageId())
); );
}); });
@@ -74,4 +75,9 @@ public class ModMailMessageDeletedListener implements MessageDeletedListener {
public FeatureEnum getFeature() { public FeatureEnum getFeature() {
return ModMailFeatures.MOD_MAIL; return ModMailFeatures.MOD_MAIL;
} }
@Override
public Integer getPriority() {
return ListenerPriority.MEDIUM;
}
} }

View File

@@ -4,6 +4,7 @@ import dev.sheldan.abstracto.core.command.config.Parameters;
import dev.sheldan.abstracto.core.command.service.CommandRegistry; import dev.sheldan.abstracto.core.command.service.CommandRegistry;
import dev.sheldan.abstracto.core.command.service.CommandService; import dev.sheldan.abstracto.core.command.service.CommandService;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.ListenerPriority;
import dev.sheldan.abstracto.core.listener.MessageTextUpdatedListener; import dev.sheldan.abstracto.core.listener.MessageTextUpdatedListener;
import dev.sheldan.abstracto.core.models.FullUserInServer; import dev.sheldan.abstracto.core.models.FullUserInServer;
import dev.sheldan.abstracto.core.models.cache.CachedMessage; import dev.sheldan.abstracto.core.models.cache.CachedMessage;
@@ -129,4 +130,9 @@ public class ModMailMessageEditedListener implements MessageTextUpdatedListener
public FeatureEnum getFeature() { public FeatureEnum getFeature() {
return ModMailFeatures.MOD_MAIL; return ModMailFeatures.MOD_MAIL;
} }
@Override
public Integer getPriority() {
return ListenerPriority.HIGH;
}
} }

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.modmail.listener; package dev.sheldan.abstracto.modmail.listener;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.ListenerPriority;
import dev.sheldan.abstracto.core.listener.PrivateMessageReceivedListener; import dev.sheldan.abstracto.core.listener.PrivateMessageReceivedListener;
import dev.sheldan.abstracto.core.models.database.AUser; import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService; import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
@@ -64,4 +65,9 @@ public class ModMailMessageListener implements PrivateMessageReceivedListener {
public FeatureEnum getFeature() { public FeatureEnum getFeature() {
return ModMailFeatures.MOD_MAIL; return ModMailFeatures.MOD_MAIL;
} }
@Override
public Integer getPriority() {
return ListenerPriority.HIGH;
}
} }

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.utility.listener.embed; 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.config.ListenerPriority;
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.service.MessageCache; import dev.sheldan.abstracto.core.service.MessageCache;
@@ -76,4 +77,9 @@ public class MessageEmbedListener implements MessageReceivedListener {
public FeatureEnum getFeature() { public FeatureEnum getFeature() {
return UtilityFeature.LINK_EMBEDS; return UtilityFeature.LINK_EMBEDS;
} }
@Override
public Integer getPriority() {
return ListenerPriority.MEDIUM;
}
} }

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.utility.listener.embed; 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.config.ListenerPriority;
import dev.sheldan.abstracto.core.listener.ReactedAddedListener; import dev.sheldan.abstracto.core.listener.ReactedAddedListener;
import dev.sheldan.abstracto.core.models.cache.CachedMessage; import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AEmote; import dev.sheldan.abstracto.core.models.database.AEmote;
@@ -72,4 +73,9 @@ public class MessageEmbedRemovalReactionListener implements ReactedAddedListener
public FeatureEnum getFeature() { public FeatureEnum getFeature() {
return UtilityFeature.LINK_EMBEDS; return UtilityFeature.LINK_EMBEDS;
} }
@Override
public Integer getPriority() {
return ListenerPriority.HIGH;
}
} }

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.utility.listener.starboard; 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.config.ListenerPriority;
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.listener.ReactionClearedListener;
@@ -165,4 +166,9 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
completelyRemoveStarboardPost(starboardPost); completelyRemoveStarboardPost(starboardPost);
}); });
} }
@Override
public Integer getPriority() {
return ListenerPriority.HIGH;
}
} }

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.utility.listener.starboard; 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.config.ListenerPriority;
import dev.sheldan.abstracto.core.listener.MessageDeletedListener; import dev.sheldan.abstracto.core.listener.MessageDeletedListener;
import dev.sheldan.abstracto.core.models.AServerAChannelAUser; import dev.sheldan.abstracto.core.models.AServerAChannelAUser;
import dev.sheldan.abstracto.core.models.GuildChannelMember; import dev.sheldan.abstracto.core.models.GuildChannelMember;
@@ -36,4 +37,9 @@ public class StarboardPostDeletedListener implements MessageDeletedListener {
public FeatureEnum getFeature() { public FeatureEnum getFeature() {
return UtilityFeature.STARBOARD; return UtilityFeature.STARBOARD;
} }
@Override
public Integer getPriority() {
return ListenerPriority.HIGH;
}
} }

View File

@@ -14,6 +14,9 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.PostConstruct;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; import java.util.List;
@Service @Service
@@ -57,4 +60,9 @@ public class JoinListenerBean extends ListenerAdapter {
log.trace("Executing join listener {} for member {} in guild {}.", joinListener.getClass().getName(), event.getMember().getId(), event.getGuild().getId()); log.trace("Executing join listener {} for member {} in guild {}.", joinListener.getClass().getName(), event.getMember().getId(), event.getGuild().getId());
joinListener.execute(event.getMember(), event.getGuild(), aUserInAServer); joinListener.execute(event.getMember(), event.getGuild(), aUserInAServer);
} }
@PostConstruct
public void postConstruct() {
listenerList.sort(Comparator.comparing(Prioritized::getPriority).reversed());
}
} }

View File

@@ -13,6 +13,8 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.PostConstruct;
import java.util.Comparator;
import java.util.List; import java.util.List;
@Service @Service
@@ -52,4 +54,9 @@ public class LeaveListenerBean extends ListenerAdapter {
log.trace("Executing leave listener {} for member {} in guild {}.", leaveListener.getClass().getName(), event.getMember().getId(), event.getGuild().getId()); log.trace("Executing leave listener {} for member {} in guild {}.", leaveListener.getClass().getName(), event.getMember().getId(), event.getGuild().getId());
leaveListener.execute(event.getMember(), event.getGuild()); leaveListener.execute(event.getMember(), event.getGuild());
} }
@PostConstruct
public void postConstruct() {
listenerList.sort(Comparator.comparing(Prioritized::getPriority).reversed());
}
} }

View File

@@ -22,6 +22,8 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.PostConstruct;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.function.Consumer; import java.util.function.Consumer;
@@ -106,4 +108,9 @@ public class MessageDeletedListenerBean extends ListenerAdapter {
log.trace("Executing message deleted listener {} for message {} in guild {}.", messageDeletedListener.getClass().getName(), cachedMessage.getMessageId(), cachedMessage.getMessageId()); log.trace("Executing message deleted listener {} for message {} in guild {}.", messageDeletedListener.getClass().getName(), cachedMessage.getMessageId(), cachedMessage.getMessageId());
messageDeletedListener.execute(cachedMessage, authorUser, authorMember); messageDeletedListener.execute(cachedMessage, authorUser, authorMember);
} }
@PostConstruct
public void postConstruct() {
listener.sort(Comparator.comparing(Prioritized::getPriority).reversed());
}
} }

View File

@@ -16,6 +16,8 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.PostConstruct;
import java.util.Comparator;
import java.util.List; import java.util.List;
@Component @Component
@@ -88,4 +90,10 @@ public class MessageReceivedListenerBean extends ListenerAdapter {
log.trace("Executing private message listener {} for member {}.", messageReceivedListener.getClass().getName(), event.getAuthor().getId()); log.trace("Executing private message listener {} for member {}.", messageReceivedListener.getClass().getName(), event.getAuthor().getId());
messageReceivedListener.execute(event.getMessage()); messageReceivedListener.execute(event.getMessage());
} }
@PostConstruct
public void postConstruct() {
listenerList.sort(Comparator.comparing(Prioritized::getPriority).reversed());
privateMessageReceivedListeners.sort(Comparator.comparing(Prioritized::getPriority).reversed());
}
} }

View File

@@ -16,6 +16,8 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.PostConstruct;
import java.util.Comparator;
import java.util.List; import java.util.List;
@Component @Component
@@ -69,4 +71,9 @@ public class MessageUpdatedListener extends ListenerAdapter {
public void executeIndividualMessageUpdatedListener(Message message, CachedMessage cachedMessage, MessageTextUpdatedListener messageTextUpdatedListener) { public void executeIndividualMessageUpdatedListener(Message message, CachedMessage cachedMessage, MessageTextUpdatedListener messageTextUpdatedListener) {
messageTextUpdatedListener.execute(cachedMessage, message); messageTextUpdatedListener.execute(cachedMessage, message);
} }
@PostConstruct
public void postConstruct() {
listener.sort(Comparator.comparing(Prioritized::getPriority).reversed());
}
} }

View File

@@ -18,6 +18,8 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.PostConstruct;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
@@ -198,4 +200,11 @@ public class ReactionUpdatedListener extends ListenerAdapter {
}); });
} }
@PostConstruct
public void postConstruct() {
reactionRemovedListeners.sort(Comparator.comparing(Prioritized::getPriority).reversed());
addedListenerList.sort(Comparator.comparing(Prioritized::getPriority).reversed());
clearedListenerList.sort(Comparator.comparing(Prioritized::getPriority).reversed());
}
} }

View File

@@ -0,0 +1,9 @@
package dev.sheldan.abstracto.core.config;
public class ListenerPriority {
public static final Integer HIGHEST = 100;
public static final Integer HIGH = 75;
public static final Integer MEDIUM = 50;
public static final Integer LOW = 25;
public static final Integer LOWEST = 0;
}

View File

@@ -4,6 +4,6 @@ import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Member;
public interface JoinListener extends FeatureAware { public interface JoinListener extends FeatureAware, Prioritized {
void execute(Member member, Guild guild, AUserInAServer aUserInAServer); void execute(Member member, Guild guild, AUserInAServer aUserInAServer);
} }

View File

@@ -3,6 +3,6 @@ package dev.sheldan.abstracto.core.listener;
import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Member;
public interface LeaveListener extends FeatureAware { public interface LeaveListener extends FeatureAware, Prioritized {
void execute(Member member, Guild guild); void execute(Member member, Guild guild);
} }

View File

@@ -4,6 +4,6 @@ import dev.sheldan.abstracto.core.models.AServerAChannelAUser;
import dev.sheldan.abstracto.core.models.GuildChannelMember; import dev.sheldan.abstracto.core.models.GuildChannelMember;
import dev.sheldan.abstracto.core.models.cache.CachedMessage; import dev.sheldan.abstracto.core.models.cache.CachedMessage;
public interface MessageDeletedListener extends FeatureAware { public interface MessageDeletedListener extends FeatureAware, Prioritized {
void execute(CachedMessage messageBefore, AServerAChannelAUser authorUser, GuildChannelMember authorMember); void execute(CachedMessage messageBefore, AServerAChannelAUser authorUser, GuildChannelMember authorMember);
} }

View File

@@ -2,6 +2,6 @@ package dev.sheldan.abstracto.core.listener;
import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.Message;
public interface MessageReceivedListener extends FeatureAware { public interface MessageReceivedListener extends FeatureAware, Prioritized {
void execute(Message message); void execute(Message message);
} }

View File

@@ -3,6 +3,6 @@ package dev.sheldan.abstracto.core.listener;
import dev.sheldan.abstracto.core.models.cache.CachedMessage; import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.Message;
public interface MessageTextUpdatedListener extends FeatureAware { public interface MessageTextUpdatedListener extends FeatureAware, Prioritized {
void execute(CachedMessage messageBefore, Message messageAfter); void execute(CachedMessage messageBefore, Message messageAfter);
} }

View File

@@ -0,0 +1,5 @@
package dev.sheldan.abstracto.core.listener;
public interface Prioritized {
Integer getPriority();
}

View File

@@ -2,6 +2,6 @@ package dev.sheldan.abstracto.core.listener;
import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.Message;
public interface PrivateMessageReceivedListener extends FeatureAware { public interface PrivateMessageReceivedListener extends FeatureAware, Prioritized {
void execute(Message message); void execute(Message message);
} }

View File

@@ -4,6 +4,6 @@ import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import net.dv8tion.jda.api.events.message.guild.react.GuildMessageReactionAddEvent; import net.dv8tion.jda.api.events.message.guild.react.GuildMessageReactionAddEvent;
public interface ReactedAddedListener extends FeatureAware { public interface ReactedAddedListener extends FeatureAware, Prioritized {
void executeReactionAdded(CachedMessage message, GuildMessageReactionAddEvent event, AUserInAServer userAdding); void executeReactionAdded(CachedMessage message, GuildMessageReactionAddEvent event, AUserInAServer userAdding);
} }

View File

@@ -4,6 +4,6 @@ import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import net.dv8tion.jda.api.events.message.guild.react.GuildMessageReactionRemoveEvent; import net.dv8tion.jda.api.events.message.guild.react.GuildMessageReactionRemoveEvent;
public interface ReactedRemovedListener extends FeatureAware { public interface ReactedRemovedListener extends FeatureAware, Prioritized {
void executeReactionRemoved(CachedMessage message, GuildMessageReactionRemoveEvent reaction, AUserInAServer userRemoving); void executeReactionRemoved(CachedMessage message, GuildMessageReactionRemoveEvent reaction, AUserInAServer userRemoving);
} }

View File

@@ -2,6 +2,6 @@ package dev.sheldan.abstracto.core.listener;
import dev.sheldan.abstracto.core.models.cache.CachedMessage; import dev.sheldan.abstracto.core.models.cache.CachedMessage;
public interface ReactionClearedListener extends FeatureAware { public interface ReactionClearedListener extends FeatureAware, Prioritized {
void executeReactionCleared(CachedMessage message); void executeReactionCleared(CachedMessage message);
} }