[AB-90] adding poll functionality

adding select menu functionality
not automatically acknowledging button interactions
adding ability to define positions for components
adding method to remove components to channel service
always replacing message contents with edit message in a channel
adding ability to reply a modal to a button interaction
moving post target specific methods from server management service to post target management
This commit is contained in:
Sheldan
2023-06-04 20:50:02 +02:00
parent efbcb5c84b
commit bac9832819
100 changed files with 3564 additions and 90 deletions

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.core.interaction;
import dev.sheldan.abstracto.core.interaction.menu.SelectMenuConfigModel;
import dev.sheldan.abstracto.core.interaction.modal.ModalConfigPayload;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.ComponentPayload;
@@ -14,6 +15,8 @@ public interface ComponentPayloadManagementService {
void updatePayload(String id, String payload);
ComponentPayload createButtonPayload(ButtonConfigModel buttonConfigModel, AServer server);
ComponentPayload createButtonPayload(ButtonConfigModel buttonConfigModel, Long serverId);
ComponentPayload createStringSelectMenuPayload(SelectMenuConfigModel selectMenuConfigModel, Long serverId);
ComponentPayload createStringSelectMenuPayload(SelectMenuConfigModel selectMenuConfigModel, AServer server);
ComponentPayload createModalPayload(ModalConfigPayload payloadConfig, Long serverId);
Optional<ComponentPayload> findPayload(String id);
List<ComponentPayload> findPayloadsOfOriginInServer(String buttonOrigin, AServer server);

View File

@@ -12,9 +12,10 @@ public interface InteractionService {
List<CompletableFuture<Message>> sendMessageToInteraction(MessageToSend messageToSend, InteractionHook interactionHook);
List<CompletableFuture<Message>> sendMessageToInteraction(String templateKey, Object model, InteractionHook interactionHook);
CompletableFuture<InteractionHook> replyEmbed(String templateKey, Object model, IReplyCallback callback);
CompletableFuture<InteractionHook> replyString(String text, IReplyCallback callback);
CompletableFuture<InteractionHook> replyString(String text, IReplyCallback callback);
CompletableFuture<InteractionHook> replyEmbed(String templateKey, IReplyCallback callback);
CompletableFuture<Message> editOriginal(MessageToSend messageToSend, InteractionHook interactionHook);
CompletableFuture<InteractionHook> replyMessageToSend(MessageToSend messageToSend, IReplyCallback callback);
CompletableFuture<InteractionHook> replyMessage(String templateKey, Object model, IReplyCallback callback);
CompletableFuture<Message> replyString(String content, InteractionHook interactionHook);
}

View File

@@ -6,4 +6,7 @@ import dev.sheldan.abstracto.core.listener.FeatureAwareListener;
public interface ButtonClickedListener extends FeatureAwareListener<ButtonClickedListenerModel, ButtonClickedListenerResult>, Prioritized, InteractionListener {
Boolean handlesEvent(ButtonClickedListenerModel model);
default Boolean autoAcknowledgeEvent() {
return true;
}
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.core.interaction.menu;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class SelectMenuConfigModel {
private String selectMenuId;
private SelectMenuPayload selectMenuPayload;
private Class payloadType;
private String origin;
}

View File

@@ -0,0 +1,4 @@
package dev.sheldan.abstracto.core.interaction.menu;
public interface SelectMenuPayload {
}

View File

@@ -0,0 +1,9 @@
package dev.sheldan.abstracto.core.interaction.menu.listener;
import dev.sheldan.abstracto.core.Prioritized;
import dev.sheldan.abstracto.core.interaction.InteractionListener;
import dev.sheldan.abstracto.core.listener.FeatureAwareListener;
public interface StringSelectMenuListener extends FeatureAwareListener<StringSelectMenuListenerModel, StringSelectMenuListenerResult>, Prioritized, InteractionListener {
Boolean handlesEvent(StringSelectMenuListenerModel model);
}

View File

@@ -0,0 +1,24 @@
package dev.sheldan.abstracto.core.interaction.menu.listener;
import dev.sheldan.abstracto.core.interaction.menu.SelectMenuPayload;
import dev.sheldan.abstracto.core.listener.FeatureAwareListenerModel;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import net.dv8tion.jda.api.events.interaction.component.StringSelectInteractionEvent;
@Getter
@Setter
@Builder
public class StringSelectMenuListenerModel implements FeatureAwareListenerModel {
private StringSelectInteractionEvent event;
private String payload;
private String origin;
private SelectMenuPayload deserializedPayload;
@Override
public Long getServerId() {
return event.isFromGuild() ? event.getGuild().getIdLong() : null;
}
}

View File

@@ -0,0 +1,7 @@
package dev.sheldan.abstracto.core.interaction.menu.listener;
import dev.sheldan.abstracto.core.listener.ListenerExecutionResult;
public enum StringSelectMenuListenerResult implements ListenerExecutionResult {
ACKNOWLEDGED, IGNORED
}

View File

@@ -1,11 +1,13 @@
package dev.sheldan.abstracto.core.interaction.modal;
import net.dv8tion.jda.api.events.interaction.command.GenericCommandInteractionEvent;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.interactions.modals.Modal;
import java.util.concurrent.CompletableFuture;
public interface ModalService {
CompletableFuture<Void> replyModal(GenericCommandInteractionEvent event, String templateKey, Object model);
CompletableFuture<Void> replyModal(ButtonInteractionEvent event, String templateKey, Object model);
Modal createModalFromTemplate(String templateKey, Object model, Long serverId);
}

View File

@@ -41,6 +41,7 @@ public interface ChannelService {
CompletableFuture<Message> removeFieldFromMessage(MessageChannel channel, Long messageId, Integer index);
CompletableFuture<Message> editFieldValueInMessage(MessageChannel channel, Long messageId, Integer index, String newValue);
CompletableFuture<Message> removeFieldFromMessage(MessageChannel channel, Long messageId, Integer index, Integer embedIndex);
CompletableFuture<Message> removeComponents(MessageChannel channel, Long messageId);
CompletableFuture<Void> deleteTextChannel(AChannel channel);
CompletableFuture<Void> deleteTextChannel(Long serverId, Long channelId);
List<CompletableFuture<Message>> sendEmbedTemplateInTextChannelList(String templateKey, Object model, MessageChannel channel);

View File

@@ -20,6 +20,10 @@ public interface PostTargetManagement {
Optional<PostTarget> getPostTargetOptional(PostTargetEnum postTargetEnum, Long serverId);
Boolean postTargetExists(String name, AServer server);
boolean postTargetExists(String name, Long serverId);
AChannel getPostTarget(Long serverId, String name);
AChannel getPostTarget(Long serverId, PostTarget target);
AChannel getPostTarget(AServer server, PostTarget target);
AChannel getPostTarget(AServer server, String name);
PostTarget updatePostTarget(PostTarget target, AChannel newTargetChannel);
List<PostTarget> getPostTargetsInServer(AServer server);
}

View File

@@ -15,9 +15,5 @@ public interface ServerManagementService {
void addChannelToServer(AServer server, AChannel channel);
AUserInAServer addUserToServer(AServer server, AUser user);
AUserInAServer addUserToServer(Long serverId, Long userId);
AChannel getPostTarget(Long serverId, String name);
AChannel getPostTarget(Long serverId, PostTarget target);
AChannel getPostTarget(AServer server, PostTarget target);
AChannel getPostTarget(AServer server, String name);
List<AServer> getAllServers();
}