mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-25 20:04:01 +00:00
[AB-52] upgrading to alpha 12
adding anonymous reporting reworking message context commands refactoring interaction packages adding post execution handling for message context commands and modals reworking feature mode response fixing setup using component ids storing infraction parameters, for example mute duration, with every infraction adding infractions for more moderation actions creating general method to format a duration string adding infractions command reworking muting to use built-in functionality of discord enabling chunking of members removing manual unmuting feature mode adding ability to update infractions with a command implemented infraction listeners for ban and warn refactored infraction notifications storing log messages to the infraction for editing said log messages
This commit is contained in:
@@ -5,7 +5,7 @@ import dev.sheldan.abstracto.core.command.condition.detail.ImmuneUserConditionDe
|
||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||
import dev.sheldan.abstracto.core.command.config.EffectConfig;
|
||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
||||
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
|
||||
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||
import dev.sheldan.abstracto.core.models.database.RoleImmunity;
|
||||
import dev.sheldan.abstracto.core.service.RoleImmunityService;
|
||||
import dev.sheldan.abstracto.core.service.RoleService;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package dev.sheldan.abstracto.core.command.config;
|
||||
|
||||
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||
import lombok.Builder;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
|
||||
@@ -3,17 +3,12 @@ package dev.sheldan.abstracto.core.command.service;
|
||||
import dev.sheldan.abstracto.core.command.Command;
|
||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||
import dev.sheldan.abstracto.core.listener.async.jda.ButtonClickedListener;
|
||||
import dev.sheldan.abstracto.core.models.listener.ButtonClickedListenerModel;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.MessageChannel;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
||||
|
||||
public interface ExceptionService {
|
||||
CommandResult reportExceptionToContext(Throwable exception, CommandContext context, Command command);
|
||||
void reportExceptionToInteraction(Throwable exception, ButtonClickedListenerModel interActionContext, ButtonClickedListener executedListener);
|
||||
void reportSlashException(Throwable exception, SlashCommandInteractionEvent event, Command command);
|
||||
void reportExceptionToGuildMessageReceivedContext(Throwable exception, MessageReceivedEvent event);
|
||||
void reportExceptionToPrivateMessageReceivedContext(Throwable exception, MessageReceivedEvent event);
|
||||
void reportExceptionToChannel(Throwable exception, MessageChannel channel, Member member);
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
package dev.sheldan.abstracto.core.command.slash.parameter.provider;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
|
||||
|
||||
public interface SlashCommandParameterProvider {
|
||||
SlashCommandOptionTypeMapping getOptionMapping();
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
package dev.sheldan.abstracto.core.interaction;
|
||||
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
package dev.sheldan.abstracto.core.service.management;
|
||||
package dev.sheldan.abstracto.core.interaction;
|
||||
|
||||
import dev.sheldan.abstracto.core.interaction.modal.ModalConfigPayload;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.ComponentPayload;
|
||||
import dev.sheldan.abstracto.core.models.database.ComponentType;
|
||||
import dev.sheldan.abstracto.core.models.template.button.ButtonConfigModel;
|
||||
import dev.sheldan.abstracto.core.interaction.button.ButtonConfigModel;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface ComponentPayloadManagementService {
|
||||
ComponentPayload createPayload(String id, String payload, Class payloadType, String buttonOrigin, AServer server, ComponentType type);
|
||||
ComponentPayload createPayload(ButtonConfigModel buttonConfigModel, AServer server);
|
||||
ComponentPayload createPayload(ButtonConfigModel buttonConfigModel, Long serverId);
|
||||
ComponentPayload createButtonPayload(ButtonConfigModel buttonConfigModel, AServer server);
|
||||
ComponentPayload createButtonPayload(ButtonConfigModel buttonConfigModel, Long serverId);
|
||||
ComponentPayload createModalPayload(ModalConfigPayload payloadConfig, Long serverId);
|
||||
Optional<ComponentPayload> findPayload(String id);
|
||||
List<ComponentPayload> findPayloadsOfOriginInServer(String buttonOrigin, AServer server);
|
||||
void deletePayload(String id);
|
||||
@@ -1,8 +1,8 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
package dev.sheldan.abstracto.core.interaction;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.ComponentPayload;
|
||||
import dev.sheldan.abstracto.core.models.template.button.ButtonPayload;
|
||||
import dev.sheldan.abstracto.core.interaction.button.ButtonPayload;
|
||||
|
||||
public interface ComponentPayloadService {
|
||||
ComponentPayload createButtonPayload(String componentId, ButtonPayload payload, String origin, AServer server);
|
||||
@@ -1,6 +1,6 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
package dev.sheldan.abstracto.core.interaction;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.template.button.ButtonConfigModel;
|
||||
import dev.sheldan.abstracto.core.interaction.button.ButtonConfigModel;
|
||||
import net.dv8tion.jda.api.entities.GuildMessageChannel;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.interactions.components.ActionComponent;
|
||||
@@ -0,0 +1,13 @@
|
||||
package dev.sheldan.abstracto.core.interaction;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import net.dv8tion.jda.api.interactions.commands.Command;
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
public class ContextCommandConfig {
|
||||
private Command.Type type;
|
||||
private String name;
|
||||
private MessageContextConfig messageContextConfig;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package dev.sheldan.abstracto.core.interaction;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.interactions.commands.Command;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;
|
||||
import org.springframework.data.util.Pair;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public interface InteractionCommandService {
|
||||
CompletableFuture<List<Command>> updateGuildCommands(Guild guild, List<Pair<List<CommandConfiguration>, SlashCommandData>> slashCommands, List<ContextCommandConfig> contextCommands);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package dev.sheldan.abstracto.core.interaction;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.Command;
|
||||
import dev.sheldan.abstracto.core.interaction.button.listener.ButtonClickedListener;
|
||||
import dev.sheldan.abstracto.core.interaction.button.listener.ButtonClickedListenerModel;
|
||||
import dev.sheldan.abstracto.core.interaction.context.message.listener.MessageContextCommandListener;
|
||||
import dev.sheldan.abstracto.core.interaction.modal.listener.ModalInteractionListener;
|
||||
import dev.sheldan.abstracto.core.interaction.modal.listener.ModalInteractionListenerModel;
|
||||
import dev.sheldan.abstracto.core.models.listener.interaction.MessageContextInteractionModel;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
|
||||
|
||||
public interface InteractionExceptionService {
|
||||
void reportExceptionToInteraction(Throwable exception, ButtonClickedListenerModel interActionContext, ButtonClickedListener executedListener);
|
||||
void reportExceptionToInteraction(Throwable exception, MessageContextInteractionModel interActionContext, MessageContextCommandListener executedListener);
|
||||
void reportExceptionToInteraction(Throwable exception, ModalInteractionListenerModel interActionContext, ModalInteractionListener executedListener);
|
||||
void reportExceptionToInteraction(Throwable exception, IReplyCallback callback, InteractionListener executedListener);
|
||||
|
||||
void reportSlashException(Throwable exception, SlashCommandInteractionEvent event, Command command);
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package dev.sheldan.abstracto.core.interaction;
|
||||
|
||||
public interface InteractionListener {
|
||||
}
|
||||
@@ -12,6 +12,7 @@ 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> replyEmbed(String templateKey, IReplyCallback callback);
|
||||
CompletableFuture<Message> editOriginal(MessageToSend messageToSend, InteractionHook interactionHook);
|
||||
CompletableFuture<InteractionHook> replyMessageToSend(MessageToSend messageToSend, IReplyCallback callback);
|
||||
|
||||
@@ -6,5 +6,7 @@ import lombok.Getter;
|
||||
@Getter
|
||||
@Builder
|
||||
public class MessageContextConfig {
|
||||
private String templateKey;
|
||||
private String name;
|
||||
private Boolean isTemplated;
|
||||
}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
package dev.sheldan.abstracto.core.interaction;
|
||||
|
||||
import dev.sheldan.abstracto.core.listener.async.jda.ButtonClickedListener;
|
||||
import dev.sheldan.abstracto.core.models.listener.ButtonClickedListenerModel;
|
||||
|
||||
public interface PostInteractionExecution {
|
||||
void execute(ButtonClickedListenerModel interActionContext, InteractionResult interactionResult, ButtonClickedListener executedListener);
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.sheldan.abstracto.core.models.template.button;
|
||||
package dev.sheldan.abstracto.core.interaction.button;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
@@ -0,0 +1,4 @@
|
||||
package dev.sheldan.abstracto.core.interaction.button;
|
||||
|
||||
public interface ButtonPayload {
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.sheldan.abstracto.core.interaction.button;
|
||||
|
||||
import dev.sheldan.abstracto.core.interaction.InteractionResult;
|
||||
import dev.sheldan.abstracto.core.interaction.button.listener.ButtonClickedListener;
|
||||
import dev.sheldan.abstracto.core.interaction.button.listener.ButtonClickedListenerModel;
|
||||
|
||||
public interface ButtonPostInteractionExecution {
|
||||
void execute(ButtonClickedListenerModel interActionContext, InteractionResult interactionResult, ButtonClickedListener executedListener);
|
||||
}
|
||||
@@ -1,10 +1,9 @@
|
||||
package dev.sheldan.abstracto.core.listener.async.jda;
|
||||
package dev.sheldan.abstracto.core.interaction.button.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.Prioritized;
|
||||
import dev.sheldan.abstracto.core.listener.ButtonClickedListenerResult;
|
||||
import dev.sheldan.abstracto.core.interaction.InteractionListener;
|
||||
import dev.sheldan.abstracto.core.listener.FeatureAwareListener;
|
||||
import dev.sheldan.abstracto.core.models.listener.ButtonClickedListenerModel;
|
||||
|
||||
public interface ButtonClickedListener extends FeatureAwareListener<ButtonClickedListenerModel, ButtonClickedListenerResult>, Prioritized {
|
||||
public interface ButtonClickedListener extends FeatureAwareListener<ButtonClickedListenerModel, ButtonClickedListenerResult>, Prioritized, InteractionListener {
|
||||
Boolean handlesEvent(ButtonClickedListenerModel model);
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
package dev.sheldan.abstracto.core.models.listener;
|
||||
package dev.sheldan.abstracto.core.interaction.button.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.listener.FeatureAwareListenerModel;
|
||||
import dev.sheldan.abstracto.core.models.template.button.ButtonPayload;
|
||||
import dev.sheldan.abstracto.core.interaction.button.ButtonPayload;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
@@ -0,0 +1,7 @@
|
||||
package dev.sheldan.abstracto.core.interaction.button.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.listener.ListenerExecutionResult;
|
||||
|
||||
public enum ButtonClickedListenerResult implements ListenerExecutionResult {
|
||||
ACKNOWLEDGED, IGNORED
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package dev.sheldan.abstracto.core.interaction.context;
|
||||
|
||||
import dev.sheldan.abstracto.core.interaction.ContextCommandConfig;
|
||||
import dev.sheldan.abstracto.core.interaction.MessageContextConfig;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.listener.interaction.MessageContextInteractionModel;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.interactions.commands.Command;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public interface ContextCommandService {
|
||||
CompletableFuture<Void> upsertGuildMessageContextCommand(Guild guild, String name, MessageContextConfig config);
|
||||
CompletableFuture<Void> deleteGuildContextCommand(Guild guild, Long commandId);
|
||||
CompletableFuture<Void> deleteGuildContextCommandByName(Guild guild, MessageContextConfig contextConfig);
|
||||
String getCommandContextName(MessageContextConfig contextConfig, Long guildId);
|
||||
boolean matchesGuildContextName(MessageContextInteractionModel model, MessageContextConfig contextConfig, Long guidId);
|
||||
void storeCreatedCommands(Command command, AServer server, List<ContextCommandConfig> contextCommands);
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package dev.sheldan.abstracto.core.interaction.context.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.ContextCommand;
|
||||
import dev.sheldan.abstracto.core.models.database.ContextCommandInServer;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public interface ContextCommandInServerManagementService {
|
||||
ContextCommandInServer createOrUpdateContextCommandInServer(ContextCommand contextCommand, AServer server, Long discordContextId);
|
||||
Optional<ContextCommandInServer> loadContextCommandInServer(ContextCommand contextCommand, AServer server);
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package dev.sheldan.abstracto.core.interaction.context.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AFeature;
|
||||
import dev.sheldan.abstracto.core.models.database.ContextCommand;
|
||||
import dev.sheldan.abstracto.core.models.database.ContextType;
|
||||
|
||||
public interface ContextCommandManagementService {
|
||||
ContextCommand createContextCommand(String name, ContextType contextType, AFeature feature);
|
||||
ContextCommand findContextCommand(String name);
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.sheldan.abstracto.core.interaction.context.message;
|
||||
|
||||
import dev.sheldan.abstracto.core.interaction.InteractionResult;
|
||||
import dev.sheldan.abstracto.core.interaction.context.message.listener.MessageContextCommandListener;
|
||||
import dev.sheldan.abstracto.core.models.listener.interaction.MessageContextInteractionModel;
|
||||
|
||||
public interface MessageContextPostInteractionExecution {
|
||||
void execute(MessageContextInteractionModel interActionContext, InteractionResult interactionResult, MessageContextCommandListener executedListener);
|
||||
}
|
||||
@@ -1,11 +1,12 @@
|
||||
package dev.sheldan.abstracto.core.listener.async;
|
||||
package dev.sheldan.abstracto.core.interaction.context.message.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.interaction.InteractionListener;
|
||||
import dev.sheldan.abstracto.core.interaction.MessageContextConfig;
|
||||
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
|
||||
import dev.sheldan.abstracto.core.listener.FeatureAwareListener;
|
||||
import dev.sheldan.abstracto.core.models.listener.interaction.MessageContextInteractionModel;
|
||||
|
||||
public interface MessageContextCommandListener extends FeatureAwareListener<MessageContextInteractionModel, DefaultListenerResult> {
|
||||
public interface MessageContextCommandListener extends FeatureAwareListener<MessageContextInteractionModel, DefaultListenerResult>, InteractionListener {
|
||||
MessageContextConfig getConfig();
|
||||
Boolean handlesEvent(MessageContextInteractionModel model);
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package dev.sheldan.abstracto.core.interaction.modal;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
public class ModalConfigPayload {
|
||||
private String modalId;
|
||||
private ModalPayload modalPayload;
|
||||
private Class payloadType;
|
||||
private String origin;
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package dev.sheldan.abstracto.core.interaction.modal;
|
||||
|
||||
public interface ModalPayload {
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.sheldan.abstracto.core.interaction.modal;
|
||||
|
||||
import dev.sheldan.abstracto.core.interaction.InteractionResult;
|
||||
import dev.sheldan.abstracto.core.interaction.modal.listener.ModalInteractionListener;
|
||||
import dev.sheldan.abstracto.core.interaction.modal.listener.ModalInteractionListenerModel;
|
||||
|
||||
public interface ModalPostInteractionExecution {
|
||||
void execute(ModalInteractionListenerModel interActionContext, InteractionResult interactionResult, ModalInteractionListener executedListener);
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package dev.sheldan.abstracto.core.interaction.modal;
|
||||
|
||||
import net.dv8tion.jda.api.events.interaction.command.GenericCommandInteractionEvent;
|
||||
import net.dv8tion.jda.api.interactions.components.Modal;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public interface ModalService {
|
||||
CompletableFuture<Void> replyModal(GenericCommandInteractionEvent event, String templateKey, Object model);
|
||||
Modal createModalFromTemplate(String templateKey, Object model, Long serverId);
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.sheldan.abstracto.core.interaction.modal.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.Prioritized;
|
||||
import dev.sheldan.abstracto.core.interaction.InteractionListener;
|
||||
import dev.sheldan.abstracto.core.listener.FeatureAwareListener;
|
||||
|
||||
public interface ModalInteractionListener extends FeatureAwareListener<ModalInteractionListenerModel, ModalInteractionListenerResult>, Prioritized, InteractionListener {
|
||||
Boolean handlesEvent(ModalInteractionListenerModel model);
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package dev.sheldan.abstracto.core.interaction.modal.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.interaction.modal.ModalPayload;
|
||||
import dev.sheldan.abstracto.core.listener.FeatureAwareListenerModel;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class ModalInteractionListenerModel implements FeatureAwareListenerModel {
|
||||
private ModalInteractionEvent event;
|
||||
private String payload;
|
||||
private String origin;
|
||||
private ModalPayload deserializedPayload;
|
||||
|
||||
@Override
|
||||
public Long getServerId() {
|
||||
return event.isFromGuild() ? event.getGuild().getIdLong() : null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package dev.sheldan.abstracto.core.interaction.modal.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.listener.ListenerExecutionResult;
|
||||
|
||||
public enum ModalInteractionListenerResult implements ListenerExecutionResult {
|
||||
ACKNOWLEDGED, IGNORED
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.sheldan.abstracto.core.command;
|
||||
package dev.sheldan.abstracto.core.interaction.slash;
|
||||
|
||||
public class CoreSlashCommandNames {
|
||||
public static final String UTILITY = "utility";
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.sheldan.abstracto.core.command.config;
|
||||
package dev.sheldan.abstracto.core.interaction.slash;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.EqualsAndHashCode;
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.sheldan.abstracto.core.command.slash;
|
||||
package dev.sheldan.abstracto.core.interaction.slash;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
@@ -14,4 +14,5 @@ public interface SlashCommandService {
|
||||
CompletableFuture<List<Command>> updateGuildSlashCommand(Guild guild, List<Pair<List<CommandConfiguration>, SlashCommandData>> commandData);
|
||||
CompletableFuture<Void> deleteGuildSlashCommands(Guild guild, List<Long> slashCommandId, List<Long> commandInServerIdsToUnset);
|
||||
CompletableFuture<Void> addGuildSlashCommands(Guild guild, List<Pair<List<CommandConfiguration>, SlashCommandData>> commandData);
|
||||
void storeCreatedSlashCommands(Guild guild, List<Pair<List<CommandConfiguration>, SlashCommandData>> commandData, List<Command> createdCommands);
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.sheldan.abstracto.core.command.slash.parameter;
|
||||
package dev.sheldan.abstracto.core.interaction.slash.parameter;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.sheldan.abstracto.core.command.slash.parameter;
|
||||
package dev.sheldan.abstracto.core.interaction.slash.parameter;
|
||||
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AEmote;
|
||||
@@ -0,0 +1,7 @@
|
||||
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider;
|
||||
|
||||
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
|
||||
|
||||
public interface SlashCommandParameterProvider {
|
||||
SlashCommandOptionTypeMapping getOptionMapping();
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package dev.sheldan.abstracto.core.listener;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public interface AsyncAbstractoListener<M extends ListenerModel, R extends ListenerExecutionResult> {
|
||||
CompletableFuture<R> execute(M model);
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package dev.sheldan.abstracto.core.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.FeatureAware;
|
||||
|
||||
public interface AsyncFeatureAwareListener<T extends FeatureAwareListenerModel, R extends ListenerExecutionResult> extends AsyncAbstractoListener<T, R>, FeatureAware {
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
package dev.sheldan.abstracto.core.listener;
|
||||
|
||||
public enum ButtonClickedListenerResult implements ListenerExecutionResult {
|
||||
ACKNOWLEDGED, IGNORED
|
||||
}
|
||||
@@ -2,8 +2,11 @@ package dev.sheldan.abstracto.core.listener;
|
||||
|
||||
import org.springframework.core.task.TaskExecutor;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public interface ListenerService {
|
||||
<T extends FeatureAwareListenerModel, R extends ListenerExecutionResult> void executeFeatureAwareListener(FeatureAwareListener<T, R> listener, T model);
|
||||
<T extends FeatureAwareListenerModel, R extends ListenerExecutionResult> CompletableFuture<R> executeAsyncFeatureAwareListener(AsyncFeatureAwareListener<T, R> listener, T model);
|
||||
<T extends FeatureAwareListenerModel, R extends ListenerExecutionResult> void executeFeatureAwareListener(FeatureAwareListener<T, R> listener, T model, TaskExecutor executor);
|
||||
<T extends ListenerModel, R extends ListenerExecutionResult> void executeListener(AbstractoListener<T, R> listener, T model);
|
||||
<T extends ListenerModel, R extends ListenerExecutionResult> void executeListener(AbstractoListener<T, R> listener, T model, TaskExecutor executor);
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package dev.sheldan.abstracto.core.listener.async.jda;
|
||||
|
||||
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
|
||||
import dev.sheldan.abstracto.core.listener.FeatureAwareListener;
|
||||
import dev.sheldan.abstracto.core.models.listener.MemberTimeoutUpdatedModel;
|
||||
|
||||
public interface AsyncMemberTimeoutUpdatedListener extends FeatureAwareListener<MemberTimeoutUpdatedModel, DefaultListenerResult> {
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package dev.sheldan.abstracto.core.models.cache;
|
||||
|
||||
import dev.sheldan.abstracto.core.utils.MemberUtils;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
@@ -12,4 +13,8 @@ import java.io.Serializable;
|
||||
public class CachedAuthor implements Serializable {
|
||||
private Long authorId;
|
||||
private Boolean isBot;
|
||||
|
||||
public String getAsMention() {
|
||||
return MemberUtils.getUserAsMention(authorId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
package dev.sheldan.abstracto.core.models.database;
|
||||
|
||||
public enum ComponentType {
|
||||
BUTTON, SELECTION
|
||||
BUTTON, SELECTION, MODAL
|
||||
}
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package dev.sheldan.abstracto.core.models.database;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.time.Instant;
|
||||
|
||||
@Entity
|
||||
@Table(name = "context_command")
|
||||
@Getter
|
||||
@Builder
|
||||
@Setter
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@EqualsAndHashCode
|
||||
public class ContextCommand {
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Column(name = "id", nullable = false)
|
||||
private Integer id;
|
||||
|
||||
@Column(name = "name", length = 32)
|
||||
private String commandName;
|
||||
|
||||
@Enumerated(EnumType.STRING)
|
||||
@Column(name = "type")
|
||||
private ContextType type;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "feature_id", nullable = false)
|
||||
private AFeature feature;
|
||||
|
||||
@Column(name = "created", nullable = false, insertable = false, updatable = false)
|
||||
private Instant created;
|
||||
|
||||
@Column(name = "updated", insertable = false, updatable = false)
|
||||
private Instant updated;
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package dev.sheldan.abstracto.core.models.database;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.time.Instant;
|
||||
|
||||
@Entity
|
||||
@Table(name = "context_command_in_server")
|
||||
@Getter
|
||||
@Builder
|
||||
@Setter
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@EqualsAndHashCode
|
||||
public class ContextCommandInServer {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Column(name = "command_in_server_id", nullable = false)
|
||||
private Long commandInServerId;
|
||||
|
||||
@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
||||
@JoinColumn(name = "command_id", nullable = false)
|
||||
private ContextCommand commandReference;
|
||||
|
||||
@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
||||
@JoinColumn(name = "server_id", nullable = false)
|
||||
private AServer serverReference;
|
||||
|
||||
@Column(name = "created", nullable = false, insertable = false, updatable = false)
|
||||
private Instant created;
|
||||
|
||||
@Column(name = "updated", insertable = false, updatable = false)
|
||||
private Instant updated;
|
||||
|
||||
@Column(name = "context_command_id")
|
||||
private Long contextCommandId;
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package dev.sheldan.abstracto.core.models.database;
|
||||
|
||||
public enum ContextType {
|
||||
MESSAGE, MEMBER
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package dev.sheldan.abstracto.core.models.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.listener.FeatureAwareListenerModel;
|
||||
import dev.sheldan.abstracto.core.models.ServerUser;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import net.dv8tion.jda.api.events.guild.member.update.GuildMemberUpdateTimeOutEvent;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class MemberTimeoutUpdatedModel implements FeatureAwareListenerModel {
|
||||
private ServerUser timeoutUser;
|
||||
private User user;
|
||||
private Guild guild;
|
||||
private OffsetDateTime oldTimeout;
|
||||
private OffsetDateTime newTimeout;
|
||||
private Member member;
|
||||
private GuildMemberUpdateTimeOutEvent event;
|
||||
@Override
|
||||
public Long getServerId() {
|
||||
return guild.getIdLong();
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
package dev.sheldan.abstracto.core.models.template.button;
|
||||
|
||||
public interface ButtonPayload {
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package dev.sheldan.abstracto.core.models.template.commands;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AFeatureMode;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
public class AFeatureModeDisplay {
|
||||
private String featureMode;
|
||||
private Boolean enabled;
|
||||
|
||||
public static AFeatureModeDisplay fromFeatureMode(AFeatureMode aFeatureMode) {
|
||||
return AFeatureModeDisplay
|
||||
.builder()
|
||||
.featureMode(aFeatureMode.getFeatureMode())
|
||||
.enabled(aFeatureMode.getEnabled())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ import lombok.Setter;
|
||||
@Setter
|
||||
@Builder
|
||||
public class FeatureModeDisplay {
|
||||
private AFeatureMode featureMode;
|
||||
private AFeatureModeDisplay featureMode;
|
||||
private FeatureConfig featureConfig;
|
||||
private Boolean isDefaultValue;
|
||||
}
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.interactions.commands.Command;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public interface ContextCommandService {
|
||||
CompletableFuture<Command> upsertGuildMessageContextCommand(Guild guild, String name);
|
||||
CompletableFuture<Void> deleteGuildContextCommand(Guild guild, Long commandId);
|
||||
CompletableFuture<Void> deleteGuildContextCommandByName(Guild guild, String commandName);
|
||||
}
|
||||
@@ -4,4 +4,5 @@ import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
|
||||
public interface CounterService {
|
||||
Long getNextCounterValue(AServer server, String key);
|
||||
Long getNextCounterValue(Long serverId, String key);
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@ import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@@ -28,4 +30,10 @@ public interface MemberService {
|
||||
CompletableFuture<Member> forceReloadMember(Member member);
|
||||
Member getBotInGuild(AServer server);
|
||||
CompletableFuture<User> getUserViaId(Long userId);
|
||||
CompletableFuture<Void> timeoutUser(Member member, Duration duration);
|
||||
CompletableFuture<Void> timeoutUser(Member member, Duration duration, String reason);
|
||||
CompletableFuture<Void> timeoutUserMaxDuration(Member member);
|
||||
CompletableFuture<Void> timeoutUser(Member member, Instant target);
|
||||
CompletableFuture<Void> timeoutUser(Member member, Instant target, String reason);
|
||||
CompletableFuture<Void> removeTimeout(Member member);
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import java.util.Optional;
|
||||
|
||||
public interface UserInServerManagementService {
|
||||
AUserInAServer loadOrCreateUser(Long serverId, Long userId);
|
||||
AUserInAServer loadOrCreateUser(AServer server, Long userId);
|
||||
AUserInAServer onlyLoadUser(Long serverId, Long userId);
|
||||
AUserInAServer loadOrCreateUser(ServerUser serverUser);
|
||||
Optional<AUserInAServer> loadUserOptional(Long serverId, Long userId);
|
||||
@@ -20,6 +21,7 @@ public interface UserInServerManagementService {
|
||||
AUserInAServer loadOrCreateUser(Long userInServerId);
|
||||
AUserInAServer createUserInServer(Member member);
|
||||
AUserInAServer createUserInServer(Long guildId, Long userId);
|
||||
AUserInAServer createUserInServer(AServer server, Long userId);
|
||||
List<AUserInAServer> getUserInAllServers(Long userId);
|
||||
Optional<AUserInAServer> loadAUserInAServerOptional(Long serverId, Long userId);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package dev.sheldan.abstracto.core.templating.service;
|
||||
import dev.sheldan.abstracto.core.templating.Templatable;
|
||||
import dev.sheldan.abstracto.core.templating.model.MessageToSend;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
@@ -62,6 +63,7 @@ public interface TemplateService {
|
||||
*/
|
||||
String renderTemplatable(Templatable templatable);
|
||||
String renderTemplatable(Templatable templatable, Long serverId);
|
||||
|
||||
String renderDuration(Duration duration, Long serverId);
|
||||
String renderDuration(Duration duration);
|
||||
void clearCache();
|
||||
}
|
||||
|
||||
@@ -4,6 +4,10 @@ import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
|
||||
public class MemberUtils {
|
||||
public static String getAUserInAServerAsMention(AUserInAServer aUserInAServer) {
|
||||
return "<@" + aUserInAServer.getUserReference().getId() + ">";
|
||||
return getUserAsMention(aUserInAServer.getUserReference().getId());
|
||||
}
|
||||
|
||||
public static String getUserAsMention(Long userId) {
|
||||
return "<@" + userId + ">";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user