[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:
Sheldan
2022-06-25 12:00:20 +02:00
parent 1a1fde0800
commit 68cae74819
363 changed files with 4306 additions and 3388 deletions

View File

@@ -9,12 +9,15 @@ import dev.sheldan.abstracto.core.command.exception.InsufficientParametersExcept
import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.command.handler.CommandParameterHandler;
import dev.sheldan.abstracto.core.command.handler.CommandParameterIterators;
import dev.sheldan.abstracto.core.command.model.CommandConfirmationModel;
import dev.sheldan.abstracto.core.command.model.CommandConfirmationPayload;
import dev.sheldan.abstracto.core.interaction.button.CommandConfirmationModel;
import dev.sheldan.abstracto.core.interaction.button.CommandConfirmationPayload;
import dev.sheldan.abstracto.core.command.service.CommandManager;
import dev.sheldan.abstracto.core.command.service.CommandService;
import dev.sheldan.abstracto.core.command.service.PostCommandExecution;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.interaction.ComponentPayloadManagementService;
import dev.sheldan.abstracto.core.interaction.ComponentPayloadService;
import dev.sheldan.abstracto.core.interaction.ComponentService;
import dev.sheldan.abstracto.core.metric.service.CounterMetric;
import dev.sheldan.abstracto.core.metric.service.MetricService;
import dev.sheldan.abstracto.core.metric.service.MetricTag;
@@ -379,10 +382,22 @@ public class CommandReceivedHandler extends ListenerAdapter {
return CompletableFuture.completedFuture(Parameters.builder().parameters(new ArrayList<>()).build());
}
log.debug("Parsing parameters for command {} based on message {}.", command.getConfiguration().getName(), message.getId());
Iterator<TextChannel> channelIterator = message.getMentionedChannels().iterator();
Iterator<Emote> emoteIterator = message.getEmotesBag().iterator();
Iterator<Member> memberIterator = message.getMentionedMembers().iterator();
Iterator<Role> roleIterator = message.getMentionedRolesBag().iterator();
Iterator<TextChannel> channelIterator = message
.getMentions()
.getChannels()
.stream()
.filter(TextChannel.class::isInstance)
.map(TextChannel.class::cast)
.iterator();
Iterator<Emote> emoteIterator = message
.getMentions()
.getEmotesBag()
.iterator();
Iterator<Member> memberIterator = message
.getMentions()
.getMembers()
.iterator();
Iterator<Role> roleIterator = message.getMentions().getRolesBag().iterator();
Parameter param = parameters.get(0);
CommandParameterIterators iterators = new CommandParameterIterators(channelIterator, emoteIterator, memberIterator, roleIterator);
Set<CommandParameterHandler> usedParameterHandler = findNecessaryCommandParameterHandlers(parameters, unParsedCommandParameter);

View File

@@ -8,6 +8,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.command.execution.ResultState;
import dev.sheldan.abstracto.core.command.service.ExceptionService;
import dev.sheldan.abstracto.core.command.service.PostCommandExecution;
import dev.sheldan.abstracto.core.interaction.InteractionExceptionService;
import dev.sheldan.abstracto.core.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
@@ -25,6 +26,9 @@ public class ExceptionPostExecution implements PostCommandExecution {
@Autowired
private ConfigService configService;
@Autowired
private InteractionExceptionService interactionExceptionService;
@Override
public void execute(CommandContext commandContext, CommandResult commandResult, Command command) {
ResultState result = commandResult.getResult();
@@ -56,7 +60,7 @@ public class ExceptionPostExecution implements PostCommandExecution {
}
}
log.info("Exception handling for exception {}.", throwable.getClass().getSimpleName());
exceptionService.reportSlashException(throwable, interaction, command);
interactionExceptionService.reportSlashException(throwable, interaction, command);
}
}

View File

@@ -12,7 +12,6 @@ import dev.sheldan.abstracto.core.command.model.database.ACommandInServerAlias;
import dev.sheldan.abstracto.core.metric.service.MetricService;
import dev.sheldan.abstracto.core.service.ConfigService;
import dev.sheldan.abstracto.core.service.management.DefaultConfigManagementService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import net.dv8tion.jda.api.entities.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -41,9 +40,6 @@ public class CommandManager implements CommandRegistry {
@Autowired
private CommandInServerAliasService commandInServerAliasService;
@Autowired
private ServerManagementService serverManagementService;
@Override
public Command findCommandByParameters(String name, UnParsedCommandParameter unParsedCommandParameter, Long serverId) {
Optional<Command> commandOptional = commands.stream().filter(getCommandByNameAndParameterPredicate(name, unParsedCommandParameter)).findFirst();

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.model;
package dev.sheldan.abstracto.core.command.service;
import com.google.common.collect.Iterables;
import dev.sheldan.abstracto.core.command.Command;

View File

@@ -4,14 +4,11 @@ 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.command.model.exception.GenericExceptionModel;
import dev.sheldan.abstracto.core.interaction.GenericInteractionExceptionModel;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.listener.async.jda.ButtonClickedListener;
import dev.sheldan.abstracto.core.models.FullUser;
import dev.sheldan.abstracto.core.models.FullUserInServer;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.listener.ButtonClickedListenerModel;
import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
import dev.sheldan.abstracto.core.service.management.UserManagementService;
@@ -21,10 +18,7 @@ import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.MessageChannel;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -33,7 +27,6 @@ import org.springframework.stereotype.Component;
public class ExceptionServiceBean implements ExceptionService {
public static final String MODEL_WRAPPER_TEMPLATE_KEY = "model_wrapper";
public static final String GENERIC_INTERACTION_EXCEPTION = "generic_interaction_exception";
@Autowired
private ChannelService channelService;
@@ -46,9 +39,6 @@ public class ExceptionServiceBean implements ExceptionService {
@Autowired
private UserManagementService userManagementService;
@Autowired
private InteractionService interactionService;
@Override
public CommandResult reportExceptionToContext(Throwable throwable, CommandContext context, Command command) {
if(command != null) {
@@ -70,47 +60,11 @@ public class ExceptionServiceBean implements ExceptionService {
return CommandResult.fromReportedError();
}
@Override
public void reportExceptionToInteraction(Throwable exception, ButtonClickedListenerModel interactionContext, ButtonClickedListener executedListener) {
ButtonInteractionEvent event = interactionContext.getEvent();
if(executedListener != null) {
log.info("Reporting generic exception {} of listener {} towards channel {} in server {}.",
exception.getClass().getSimpleName(), executedListener.getClass().getSimpleName(), event.getChannel().getIdLong(),
event.getGuild().getIdLong());
} else {
log.info("Reporting generic exception {} towards channel {} in server {}.",
exception.getClass().getSimpleName(), event.getChannel().getIdLong(),
event.getGuild().getIdLong());
}
try {
reportGenericInteractionException(exception, event.getInteraction());
} catch (Exception e) {
log.error("Failed to notify about exception.", e);
}
}
@Override
public void reportSlashException(Throwable exception, SlashCommandInteractionEvent event, Command command) {
log.info("Reporting exception of {} command {} in channel {} in guild {} from user {}.",
exception.getClass().getSimpleName(), command.getConfiguration().getName(),
event.getChannel().getIdLong(), event.getGuild().getIdLong(), event.getMember().getIdLong(), exception);
reportGenericInteractionException(exception, event.getInteraction());
}
private void reportGenericException(Throwable throwable, CommandContext context) {
GenericExceptionModel exceptionModel = buildCommandModel(throwable, context);
channelService.sendEmbedTemplateInTextChannelList("generic_command_exception", exceptionModel, context.getChannel());
}
private void reportGenericInteractionException(Throwable throwable, IReplyCallback replyCallback) {
GenericInteractionExceptionModel exceptionModel = buildInteractionExceptionModel(throwable, replyCallback);
if(replyCallback.isAcknowledged()) {
interactionService.sendMessageToInteraction(GENERIC_INTERACTION_EXCEPTION, exceptionModel, replyCallback.getHook());
} else {
interactionService.replyEmbed(GENERIC_INTERACTION_EXCEPTION, exceptionModel, replyCallback);
}
}
@Override
public void reportExceptionToGuildMessageReceivedContext(Throwable exception, MessageReceivedEvent event) {
if(exception instanceof Templatable){
@@ -144,14 +98,6 @@ public class ExceptionServiceBean implements ExceptionService {
}
}
private GenericInteractionExceptionModel buildInteractionExceptionModel(Throwable throwable, IReplyCallback context) {
return GenericInteractionExceptionModel
.builder()
.member(context.getMember())
.user(context.getUser())
.throwable(throwable)
.build();
}
private GenericExceptionModel buildCommandModel(Throwable throwable, CommandContext context) {
FullUserInServer fullUser = FullUserInServer
.builder()

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.channels;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -13,7 +13,7 @@ import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.service.ChannelGroupService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import net.dv8tion.jda.api.entities.GuildChannel;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.channels;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -13,7 +13,7 @@ import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.models.database.ChannelGroupType;
import dev.sheldan.abstracto.core.service.ChannelGroupService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.management.ChannelGroupTypeManagementService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -1,18 +1,18 @@
package dev.sheldan.abstracto.core.commands.channels;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.service.ChannelGroupService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

View File

@@ -1,18 +1,18 @@
package dev.sheldan.abstracto.core.commands.channels;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.service.ChannelGroupService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.channels;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -13,7 +13,7 @@ import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.exception.PostTargetNotValidException;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

View File

@@ -1,18 +1,18 @@
package dev.sheldan.abstracto.core.commands.channels;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.service.ChannelGroupService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.channels;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -13,7 +13,7 @@ import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.exception.PostTargetNotValidException;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

View File

@@ -1,10 +1,10 @@
package dev.sheldan.abstracto.core.commands.channels;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.channels;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.exception.SlashCommandParameterMissingException;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
@@ -20,7 +20,7 @@ import dev.sheldan.abstracto.core.models.template.commands.PostTargetDisplayMode
import dev.sheldan.abstracto.core.models.template.commands.PostTargetModelEntry;
import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.management.PostTargetManagement;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.templating.model.MessageToSend;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.channels;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.exception.SlashCommandParameterMissingException;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
@@ -15,7 +15,7 @@ import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.service.ChannelGroupService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
import net.dv8tion.jda.api.entities.GuildMessageChannel;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.config;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.config;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -14,7 +14,7 @@ import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.exception.ConfigurationKeyNotFoundException;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.service.ConfigService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.management.DefaultConfigManagementService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -1,18 +1,18 @@
package dev.sheldan.abstracto.core.commands.config;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.service.ConfigService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

View File

@@ -9,7 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import dev.sheldan.abstracto.core.command.service.CommandService;
import dev.sheldan.abstracto.core.command.model.CommandServiceBean;
import dev.sheldan.abstracto.core.command.service.CommandServiceBean;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService;
import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition;

View File

@@ -9,7 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import dev.sheldan.abstracto.core.command.service.CommandService;
import dev.sheldan.abstracto.core.command.model.CommandServiceBean;
import dev.sheldan.abstracto.core.command.service.CommandServiceBean;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService;
import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition;

View File

@@ -9,7 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import dev.sheldan.abstracto.core.command.service.CommandService;
import dev.sheldan.abstracto.core.command.model.CommandServiceBean;
import dev.sheldan.abstracto.core.command.service.CommandServiceBean;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService;
import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition;

View File

@@ -1,12 +1,12 @@
package dev.sheldan.abstracto.core.commands.config.features;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.condition.CommandCondition;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -19,7 +19,7 @@ import dev.sheldan.abstracto.core.models.template.commands.FeatureSwitchModel;
import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.core.service.FeatureConfigService;
import dev.sheldan.abstracto.core.service.FeatureFlagService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.templating.model.MessageToSend;
import dev.sheldan.abstracto.core.templating.service.TemplateService;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.config.features;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -16,7 +16,7 @@ import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.service.FeatureConfigService;
import dev.sheldan.abstracto.core.service.FeatureModeService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -1,12 +1,12 @@
package dev.sheldan.abstracto.core.commands.config.features;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.condition.CommandCondition;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -20,7 +20,7 @@ import dev.sheldan.abstracto.core.models.template.commands.FeatureSwitchModel;
import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.core.service.FeatureConfigService;
import dev.sheldan.abstracto.core.service.FeatureFlagService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.templating.model.MessageToSend;
import dev.sheldan.abstracto.core.templating.service.TemplateService;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.config.features;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -16,7 +16,7 @@ import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.service.FeatureConfigService;
import dev.sheldan.abstracto.core.service.FeatureModeService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.config.features;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -20,7 +20,7 @@ import dev.sheldan.abstracto.core.models.template.commands.FeatureModesModel;
import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.core.service.FeatureConfigService;
import dev.sheldan.abstracto.core.service.FeatureModeService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.utils.FutureUtils;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
@@ -70,7 +70,10 @@ public class FeatureModes extends AbstractConditionableCommand {
AFeature feature = featureManagementService.getFeature(featureDefinition.getKey());
featureModes = featureModeService.getEffectiveFeatureModes(server, feature);
}
FeatureModesModel model = FeatureModesModel.builder().featureModes(featureModes).build();
FeatureModesModel model = FeatureModesModel
.builder()
.featureModes(featureModes)
.build();
return FutureUtils.toSingleFutureGeneric(channelService.sendEmbedTemplateInTextChannelList(FEATURE_MODES_RESPONSE_TEMPLATE_KEY, model, commandContext.getChannel()))
.thenApply(aVoid -> CommandResult.fromIgnored());
}

View File

@@ -1,10 +1,10 @@
package dev.sheldan.abstracto.core.commands.config.features;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.config.features;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -15,7 +15,7 @@ import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.service.RoleImmunityService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.config.features;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -14,7 +14,7 @@ import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.service.RoleImmunityService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -9,7 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import dev.sheldan.abstracto.core.command.service.CommandService;
import dev.sheldan.abstracto.core.command.model.CommandServiceBean;
import dev.sheldan.abstracto.core.command.service.CommandServiceBean;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService;
import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition;

View File

@@ -1,10 +1,10 @@
package dev.sheldan.abstracto.core.commands.config.features;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.config.profanity;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -13,7 +13,7 @@ import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.service.ProfanityService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.config.profanity;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -13,7 +13,7 @@ import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.service.ProfanityService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.config.profanity;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -13,7 +13,7 @@ import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.service.ProfanityService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.config.profanity;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -13,7 +13,7 @@ import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.service.ProfanityService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

View File

@@ -1,10 +1,10 @@
package dev.sheldan.abstracto.core.commands.config.profanity;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.config.template;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -17,7 +17,7 @@ import dev.sheldan.abstracto.core.exception.UploadFileTooLargeException;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.models.template.commands.GetCustomTemplateModel;
import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.templating.model.MessageToSend;
import dev.sheldan.abstracto.core.templating.model.database.CustomTemplate;
import dev.sheldan.abstracto.core.templating.service.TemplateService;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.config.template;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -16,7 +16,7 @@ import dev.sheldan.abstracto.core.exception.TemplateNotFoundException;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.models.template.commands.GetTemplateModel;
import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.templating.model.MessageToSend;
import dev.sheldan.abstracto.core.templating.service.TemplateService;
import dev.sheldan.abstracto.core.templating.service.management.TemplateManagementService;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.config.template;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
@@ -13,7 +13,7 @@ import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.exception.CustomTemplateNotFoundException;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.templating.model.database.CustomTemplate;
import dev.sheldan.abstracto.core.templating.service.TemplateService;
import dev.sheldan.abstracto.core.templating.service.management.CustomTemplateManagementService;

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.commands.config.template;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.exception.AbstractoTemplatedException;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
@@ -13,7 +13,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.templating.service.TemplateService;
import dev.sheldan.abstracto.core.templating.service.management.CustomTemplateManagementService;
import dev.sheldan.abstracto.core.utils.FileService;
@@ -82,7 +82,7 @@ public class SetTemplate extends AbstractConditionableCommand {
String templateKey = slashCommandParameterService.getCommandOption(TEMPLATE_KEY_PARAMETER, event, String.class);
Message.Attachment templateAttachment = slashCommandParameterService.getCommandOption(FILE_PARAMETER, event, File.class, Message.Attachment.class);
File templateFile = fileService.createTempFile(Math.random() + "");
return templateAttachment.downloadToFile(templateFile).thenCompose(file -> {
return templateAttachment.getProxy().downloadToFile(templateFile).thenCompose(file -> {
try {
return updateTemplate(event, templateFile, templateKey);
} catch (IOException e) {

View File

@@ -1,10 +1,10 @@
package dev.sheldan.abstracto.core.commands.help;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;

View File

@@ -5,7 +5,7 @@ import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;

View File

@@ -4,7 +4,7 @@ import dev.sheldan.abstracto.core.command.UtilityModuleDefinition;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.commands.utility;
import dev.sheldan.abstracto.core.command.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.*;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
@@ -10,8 +10,9 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.models.database.AEmote;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -4,7 +4,7 @@ import dev.sheldan.abstracto.core.command.UtilityModuleDefinition;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;

View File

@@ -12,6 +12,11 @@ public class ListenerExecutorConfig {
@Autowired
private ExecutorService executorService;
@Bean(name = "memberTimeoutUpdatedListenerExecutor")
public TaskExecutor memberTimeoutUpdatedListenerExecutor() {
return executorService.setupExecutorFor("memberTimeoutListener");
}
@Bean(name = "joinListenerExecutor")
public TaskExecutor joinListenerExecutor() {
return executorService.setupExecutorFor("joinListener");
@@ -62,6 +67,11 @@ public class ListenerExecutorConfig {
return executorService.setupExecutorFor("buttonClickedListener");
}
@Bean(name = "modalInteractionExecutor")
public TaskExecutor modalInteractionExecutor() {
return executorService.setupExecutorFor("modalInteractionListener");
}
@Bean(name = "messageContextCommandExecutor")
public TaskExecutor messageContextCommandExecutor() {
return executorService.setupExecutorFor("messageContextCommandListener");

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.service;
package dev.sheldan.abstracto.core.interaction;
import net.dv8tion.jda.api.entities.Guild;
import org.springframework.stereotype.Component;

View File

@@ -0,0 +1,144 @@
package dev.sheldan.abstracto.core.interaction;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.interaction.context.ContextCommandService;
import dev.sheldan.abstracto.core.interaction.context.management.ContextCommandInServerManagementService;
import dev.sheldan.abstracto.core.interaction.context.management.ContextCommandManagementService;
import dev.sheldan.abstracto.core.interaction.context.message.MessageContextCommandListenerBean;
import dev.sheldan.abstracto.core.interaction.context.message.listener.MessageContextCommandListener;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandListenerBean;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandService;
import dev.sheldan.abstracto.core.listener.AsyncStartupListener;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.service.BotService;
import dev.sheldan.abstracto.core.service.FeatureConfigService;
import dev.sheldan.abstracto.core.service.FeatureFlagService;
import dev.sheldan.abstracto.core.service.FeatureModeService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.util.Pair;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@Component
@Slf4j
public class CommandLoaderListener implements AsyncStartupListener {
@Autowired
private SlashCommandListenerBean slashCommandListenerBean;
@Autowired
private SlashCommandService slashCommandService;
@Autowired
private BotService botService;
@Autowired
private FeatureConfigService featureConfigService;
@Autowired
private FeatureFlagService featureFlagService;
@Autowired
private FeatureModeService featureModeService;
@Autowired
private MessageContextCommandListenerBean listenerBean;
@Autowired
private ContextCommandService contextCommandService;
@Autowired
private ServerManagementService serverManagementService;
@Autowired
private ContextCommandManagementService contextCommandManagementService;
@Autowired
private ContextCommandInServerManagementService contextCommandInServerManagementService;
@Autowired
private CommandLoaderListener self;
@Autowired
private InteractionCommandService interactionCommandService;
@Override
public void execute() {
List<Command> incomingSlashCommands = slashCommandListenerBean.getSlashCommands();
List<MessageContextCommandListener> contextListeners = listenerBean.getListenerList();
JDA jda = botService.getInstance();
List<Guild> onlineGuilds = jda.getGuilds();
onlineGuilds.forEach(guild -> {
log.info("Updating slash commands for guild {}.", guild.getIdLong());
List<Pair<List<CommandConfiguration>, SlashCommandData>> slashCommandsToUpdate = new ArrayList<>();
incomingSlashCommands.forEach(command -> {
FeatureConfig feature = featureConfigService.getFeatureDisplayForFeature(command.getFeature());
if (!featureFlagService.isFeatureEnabled(feature, guild.getIdLong())) {
return;
}
if(!featureModeService.necessaryFeatureModesMet(command, guild.getIdLong())) {
return;
}
log.info("Updating slash command {} in guild {}.", command.getConfiguration().getName(), guild.getId());
slashCommandService.convertCommandConfigToCommandData(command.getConfiguration(), slashCommandsToUpdate);
});
log.info("Updating context commands for guild {}.", guild.getIdLong());
List<ContextCommandConfig> contextCommandsToUpdate = new ArrayList<>();
contextListeners.forEach(listener -> {
FeatureConfig feature = featureConfigService.getFeatureDisplayForFeature(listener.getFeature());
if (!featureFlagService.isFeatureEnabled(feature, guild.getIdLong())) {
return;
}
if(!featureModeService.necessaryFeatureModesMet(listener, guild.getIdLong())) {
return;
}
String commandName = contextCommandService.getCommandContextName(listener.getConfig(), guild.getIdLong());
ContextCommandConfig contextCommandToCreate = ContextCommandConfig
.builder()
.name(commandName)
.messageContextConfig(listener.getConfig())
.type(net.dv8tion.jda.api.interactions.commands.Command.Type.MESSAGE)
.build();
contextCommandsToUpdate.add(contextCommandToCreate);
log.info("Updating message context command {} in guild {}.", commandName, guild.getId());
});
interactionCommandService.updateGuildCommands(guild, slashCommandsToUpdate, contextCommandsToUpdate).thenAccept(commands -> {
try {
self.storeCreatedCommands(commands, guild, slashCommandsToUpdate, contextCommandsToUpdate);
} catch (Exception throwable) {
log.error("Failed to store created commands in guild {}.", guild.getIdLong(), throwable);
}
}).exceptionally(throwable -> {
log.error("Failed to update guild commands in guild {}.", guild.getIdLong(), throwable);
return null;
});
});
}
@Transactional
public void storeCreatedCommands(List<net.dv8tion.jda.api.interactions.commands.Command> createdCommands, Guild guild,
List<Pair<List<CommandConfiguration>, SlashCommandData>> slashCommands, List<ContextCommandConfig> contextCommands) {
AServer server = serverManagementService.loadServer(guild.getIdLong());
createdCommands.forEach(command -> {
if(command.getType().equals(net.dv8tion.jda.api.interactions.commands.Command.Type.SLASH)) {
slashCommandService.storeCreatedSlashCommands(guild, slashCommands, createdCommands);
} else if(command.getType().equals(net.dv8tion.jda.api.interactions.commands.Command.Type.MESSAGE)) {
contextCommandService.storeCreatedCommands(command, server, contextCommands);
}
});
}
}

View File

@@ -1,18 +1,17 @@
package dev.sheldan.abstracto.core.service;
package dev.sheldan.abstracto.core.interaction;
import com.google.gson.Gson;
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.ButtonPayload;
import dev.sheldan.abstracto.core.service.management.ComponentPayloadManagementService;
import dev.sheldan.abstracto.core.interaction.button.ButtonPayload;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class ComponentPayloadServiceBean implements ComponentPayloadService{
public class ComponentPayloadServiceBean implements ComponentPayloadService {
@Autowired
private ComponentPayloadManagementService componentPayloadManagementService;

View File

@@ -1,6 +1,8 @@
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 dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.core.service.MessageService;
import net.dv8tion.jda.api.entities.Emoji;
import net.dv8tion.jda.api.entities.GuildMessageChannel;
import net.dv8tion.jda.api.entities.Message;

View File

@@ -0,0 +1,73 @@
package dev.sheldan.abstracto.core.interaction;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import dev.sheldan.abstracto.core.command.model.database.ACommandInAServer;
import dev.sheldan.abstracto.core.command.service.management.CommandInServerManagementService;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
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.Commands;
import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.util.Pair;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Component
public class InteractionCommandServiceBean implements InteractionCommandService {
@Autowired
private InteractionCommandServiceBean self;
@Autowired
private CommandManagementService commandManagementService;
@Autowired
private CommandInServerManagementService commandInServerManagementService;
@Override
public CompletableFuture<List<Command>> updateGuildCommands(Guild guild, List<Pair<List<CommandConfiguration>, SlashCommandData>> slashCommands, List<ContextCommandConfig> contextCommands) {
List<CommandData> slashCommandData = slashCommands
.stream()
.map(Pair::getSecond)
.collect(Collectors.toList());
List<CommandData> contextCommandData = contextCommands
.stream()
.map(s -> Commands.context(s.getType(), s.getName()))
.collect(Collectors.toList());
List<CommandData> allCommands = Stream.concat(slashCommandData.stream(), contextCommandData.stream())
.collect(Collectors.toList());
return guild.updateCommands().addCommands(allCommands).submit().thenApply(createdCommands -> {
self.storeCreatedCommands(guild, slashCommands, contextCommands, createdCommands);
return createdCommands;
});
}
@Transactional
public void storeCreatedCommands(Guild guild, List<Pair<List<CommandConfiguration>, SlashCommandData>> slashCommands, List<ContextCommandConfig> contextCommands, List<Command> createdCommands) {
slashCommands.forEach(commandConfigurationSlashCommandDataPair -> {
SlashCommandData slashCommandData = commandConfigurationSlashCommandDataPair.getSecond();
commandConfigurationSlashCommandDataPair.getFirst().forEach(commandConfiguration -> {
ACommand aCommand = commandManagementService.findCommandByName(commandConfiguration.getName());
ACommandInAServer commandInServer = commandInServerManagementService.getCommandForServer(aCommand, guild.getIdLong());
Command createdCommand = createdCommands.stream().filter(command -> doesCommandMatch(slashCommandData, command)).findFirst().orElse(null);
if(createdCommand != null) {
commandInServer.setSlashCommandId(createdCommand.getIdLong());
}
});
});
}
private boolean doesCommandMatch(SlashCommandData commandConfig, Command command) {
return commandConfig.getName().equals(command.getName());
}
}

View File

@@ -0,0 +1,83 @@
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 lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class InteractionExceptionServiceBean implements InteractionExceptionService {
@Autowired
private InteractionService interactionService;
public static final String GENERIC_INTERACTION_EXCEPTION = "generic_interaction_exception";
@Override
public void reportExceptionToInteraction(Throwable exception, ButtonClickedListenerModel interactionContext, ButtonClickedListener executedListener) {
reportExceptionToInteraction(exception, interactionContext.getEvent(), executedListener);
}
@Override
public void reportExceptionToInteraction(Throwable exception, MessageContextInteractionModel interActionContext, MessageContextCommandListener executedListener) {
reportExceptionToInteraction(exception, interActionContext.getEvent(), executedListener);
}
@Override
public void reportExceptionToInteraction(Throwable exception, ModalInteractionListenerModel interActionContext, ModalInteractionListener executedListener) {
reportExceptionToInteraction(exception, interActionContext.getEvent().getInteraction(), executedListener);
}
@Override
public void reportExceptionToInteraction(Throwable exception, IReplyCallback callback, InteractionListener executedListener) {
if(executedListener != null) {
log.info("Reporting generic exception {} of listener {} towards channel {} in server {}.",
exception.getClass().getSimpleName(), executedListener.getClass().getSimpleName(), callback.getChannel().getIdLong(),
callback.getGuild().getIdLong());
} else {
log.info("Reporting generic exception {} towards channel {} in server {}.",
exception.getClass().getSimpleName(), callback.getChannel().getIdLong(),
callback.getGuild().getIdLong());
}
try {
reportGenericInteractionException(exception, callback);
} catch (Exception e) {
log.error("Failed to notify about exception.", e);
}
}
@Override
public void reportSlashException(Throwable exception, SlashCommandInteractionEvent event, Command command) {
log.info("Reporting exception of {} command {} in channel {} in guild {} from user {}.",
exception.getClass().getSimpleName(), command.getConfiguration().getName(),
event.getChannel().getIdLong(), event.getGuild().getIdLong(), event.getMember().getIdLong(), exception);
reportGenericInteractionException(exception, event.getInteraction());
}
private void reportGenericInteractionException(Throwable throwable, IReplyCallback replyCallback) {
GenericInteractionExceptionModel exceptionModel = buildInteractionExceptionModel(throwable, replyCallback);
if(replyCallback.isAcknowledged()) {
interactionService.sendMessageToInteraction(GENERIC_INTERACTION_EXCEPTION, exceptionModel, replyCallback.getHook());
} else {
interactionService.replyEmbed(GENERIC_INTERACTION_EXCEPTION, exceptionModel, replyCallback);
}
}
private GenericInteractionExceptionModel buildInteractionExceptionModel(Throwable throwable, IReplyCallback context) {
return GenericInteractionExceptionModel
.builder()
.member(context.getMember())
.user(context.getUser())
.throwable(throwable)
.build();
}
}

View File

@@ -1,12 +1,11 @@
package dev.sheldan.abstracto.core.service;
package dev.sheldan.abstracto.core.interaction;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.metric.service.CounterMetric;
import dev.sheldan.abstracto.core.metric.service.MetricService;
import dev.sheldan.abstracto.core.metric.service.MetricTag;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.service.management.ComponentPayloadManagementService;
import dev.sheldan.abstracto.core.service.AllowedMentionService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.templating.model.AttachedFile;
import dev.sheldan.abstracto.core.templating.model.MessageToSend;
@@ -146,6 +145,14 @@ public class InteractionServiceBean implements InteractionService {
return replyMessageToSend(messageToSend, callback);
}
@Override
public CompletableFuture<InteractionHook> replyString(String text, IReplyCallback callback) {
return callback
.reply(text)
.allowedMentions(allowedMentionService.getAllowedMentionTypesForServer(callback.getGuild().getIdLong()))
.submit();
}
@Override
public CompletableFuture<InteractionHook> replyEmbed(String templateKey, IReplyCallback callback) {
return replyEmbed(templateKey, new Object(), callback);

View File

@@ -1,18 +1,20 @@
package dev.sheldan.abstracto.core.interaction;
package dev.sheldan.abstracto.core.interaction.button;
import dev.sheldan.abstracto.core.command.service.ExceptionService;
import dev.sheldan.abstracto.core.listener.async.jda.ButtonClickedListener;
import dev.sheldan.abstracto.core.models.listener.ButtonClickedListenerModel;
import dev.sheldan.abstracto.core.interaction.InteractionExceptionService;
import dev.sheldan.abstracto.core.interaction.InteractionResult;
import dev.sheldan.abstracto.core.interaction.InteractionResultState;
import dev.sheldan.abstracto.core.interaction.button.listener.ButtonClickedListener;
import dev.sheldan.abstracto.core.interaction.button.listener.ButtonClickedListenerModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class ExceptionPostInteractionExecution implements PostInteractionExecution {
public class ButtonExceptionPostInteractionExecution implements ButtonPostInteractionExecution {
@Autowired
private ExceptionService exceptionService;
private InteractionExceptionService interactionExceptionService;
@Override
public void execute(ButtonClickedListenerModel interActionContext, InteractionResult interactionResult, ButtonClickedListener executedListener) {
@@ -21,7 +23,7 @@ public class ExceptionPostInteractionExecution implements PostInteractionExecuti
Throwable throwable = interactionResult.getThrowable();
if(throwable != null) {
log.info("Exception handling in interaction for exception {}.", throwable.getClass().getSimpleName());
exceptionService.reportExceptionToInteraction(throwable, interActionContext, executedListener);
interactionExceptionService.reportExceptionToInteraction(throwable, interActionContext, executedListener);
}
}
}

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.model;
package dev.sheldan.abstracto.core.interaction.button;
import dev.sheldan.abstracto.core.command.execution.DriedCommandContext;
import lombok.Builder;

View File

@@ -1,7 +1,6 @@
package dev.sheldan.abstracto.core.command.model;
package dev.sheldan.abstracto.core.interaction.button;
import dev.sheldan.abstracto.core.command.execution.DriedCommandContext;
import dev.sheldan.abstracto.core.models.template.button.ButtonPayload;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

View File

@@ -1,19 +1,16 @@
package dev.sheldan.abstracto.core.command.listener;
package dev.sheldan.abstracto.core.interaction.button.listener;
import dev.sheldan.abstracto.core.command.CommandReceivedHandler;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.command.execution.DriedCommandContext;
import dev.sheldan.abstracto.core.command.model.CommandConfirmationPayload;
import dev.sheldan.abstracto.core.command.model.CommandServiceBean;
import dev.sheldan.abstracto.core.interaction.button.CommandConfirmationPayload;
import dev.sheldan.abstracto.core.command.service.CommandServiceBean;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.config.ListenerPriority;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.listener.ButtonClickedListenerResult;
import dev.sheldan.abstracto.core.listener.async.jda.ButtonClickedListener;
import dev.sheldan.abstracto.core.models.listener.ButtonClickedListenerModel;
import dev.sheldan.abstracto.core.service.MessageService;
import dev.sheldan.abstracto.core.service.management.ComponentPayloadManagementService;
import dev.sheldan.abstracto.core.interaction.ComponentPayloadManagementService;
import dev.sheldan.abstracto.core.utils.FutureUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -1,18 +1,15 @@
package dev.sheldan.abstracto.core.listener.sync.jda;
package dev.sheldan.abstracto.core.interaction.button.listener;
import com.google.gson.Gson;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.interaction.InteractionResult;
import dev.sheldan.abstracto.core.interaction.PostInteractionExecution;
import dev.sheldan.abstracto.core.listener.ListenerService;
import dev.sheldan.abstracto.core.listener.async.jda.ButtonClickedListener;
import dev.sheldan.abstracto.core.interaction.button.ButtonPostInteractionExecution;
import dev.sheldan.abstracto.core.models.database.ComponentPayload;
import dev.sheldan.abstracto.core.models.listener.ButtonClickedListenerModel;
import dev.sheldan.abstracto.core.models.template.button.ButtonPayload;
import dev.sheldan.abstracto.core.interaction.button.ButtonPayload;
import dev.sheldan.abstracto.core.service.FeatureConfigService;
import dev.sheldan.abstracto.core.service.FeatureFlagService;
import dev.sheldan.abstracto.core.service.FeatureModeService;
import dev.sheldan.abstracto.core.service.management.ComponentPayloadManagementService;
import dev.sheldan.abstracto.core.interaction.ComponentPayloadManagementService;
import dev.sheldan.abstracto.core.utils.BeanUtils;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
@@ -38,7 +35,7 @@ public class SyncButtonClickedListenerBean extends ListenerAdapter {
private List<ButtonClickedListener> listenerList;
@Autowired(required = false)
private List<PostInteractionExecution> postInteractionExecutions;
private List<ButtonPostInteractionExecution> postInteractionExecutions;
@Autowired
@Qualifier("buttonClickedExecutor")
@@ -88,7 +85,7 @@ public class SyncButtonClickedListenerBean extends ListenerAdapter {
log.info("Executing button listener {} for event for id {}.", listener.getClass().getSimpleName(), event.getComponentId());
listener.execute(model);
InteractionResult result = InteractionResult.fromSuccess();
for (PostInteractionExecution postInteractionExecution : postInteractionExecutions) {
for (ButtonPostInteractionExecution postInteractionExecution : postInteractionExecutions) {
postInteractionExecution.execute(model, result, listener);
}
} else {
@@ -107,7 +104,7 @@ public class SyncButtonClickedListenerBean extends ListenerAdapter {
if(model != null && listener != null) {
InteractionResult result = InteractionResult.fromError("Failed to execute interaction.", exception);
if(postInteractionExecutions != null) {
for (PostInteractionExecution postInteractionExecution : postInteractionExecutions) {
for (ButtonPostInteractionExecution postInteractionExecution : postInteractionExecutions) {
postInteractionExecution.execute(model, result, listener);
}
}

View File

@@ -0,0 +1,110 @@
package dev.sheldan.abstracto.core.interaction.context;
import dev.sheldan.abstracto.core.interaction.ApplicationCommandService;
import dev.sheldan.abstracto.core.interaction.ContextCommandConfig;
import dev.sheldan.abstracto.core.interaction.MessageContextConfig;
import dev.sheldan.abstracto.core.interaction.context.management.ContextCommandInServerManagementService;
import dev.sheldan.abstracto.core.interaction.context.management.ContextCommandManagementService;
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 dev.sheldan.abstracto.core.models.listener.interaction.MessageContextInteractionModel;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.templating.service.TemplateService;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.interactions.commands.Command;
import net.dv8tion.jda.api.interactions.commands.build.Commands;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
@Component
public class ContextCommandServiceBean implements ContextCommandService {
@Autowired
private ApplicationCommandService applicationCommandService;
@Autowired
private TemplateService templateService;
@Autowired
private ContextCommandManagementService contextCommandManagementService;
@Autowired
private ContextCommandInServerManagementService contextCommandInServerManagementService;
@Autowired
private ContextCommandServiceBean self;
@Autowired
private ServerManagementService serverManagementService;
@Override
public CompletableFuture<Void> upsertGuildMessageContextCommand(Guild guild, String name, MessageContextConfig config) {
return guild.upsertCommand(Commands.context(Command.Type.MESSAGE, name)).submit()
.thenAccept(command -> self.storeCratedContextCommand(guild, command, config));
}
@Transactional
public void storeCratedContextCommand(Guild guild, Command command, MessageContextConfig contextConfig) {
ContextCommand contextCommand = contextCommandManagementService.findContextCommand(contextConfig.getName());
AServer server = serverManagementService.loadServer(guild.getIdLong());
contextCommandInServerManagementService.createOrUpdateContextCommandInServer(contextCommand, server, command.getIdLong());
}
@Override
public CompletableFuture<Void> deleteGuildContextCommand(Guild guild, Long commandId) {
return applicationCommandService.deleteGuildCommand(guild, commandId);
}
@Override
public CompletableFuture<Void> deleteGuildContextCommandByName(Guild guild, MessageContextConfig contextConfig) {
ContextCommand contextCommand = contextCommandManagementService.findContextCommand(contextConfig.getName());
AServer server = serverManagementService.loadServer(guild.getIdLong());
Optional<ContextCommandInServer> contextCommandInServer = contextCommandInServerManagementService.loadContextCommandInServer(contextCommand, server);
return contextCommandInServer
.map(contextCommandInServer1 -> deleteGuildContextCommand(guild, contextCommandInServer1.getContextCommandId()))
.orElse(CompletableFuture.completedFuture(null))
.thenAccept(unused -> self.resetContextCommandId(guild, contextConfig));
}
@Transactional
public void resetContextCommandId(Guild guild, MessageContextConfig messageContextConfig) {
ContextCommand contextCommand = contextCommandManagementService.findContextCommand(messageContextConfig.getName());
AServer server = serverManagementService.loadServer(guild.getIdLong());
Optional<ContextCommandInServer> contextCommandInServer = contextCommandInServerManagementService.loadContextCommandInServer(contextCommand, server);
contextCommandInServer
.ifPresent(contextCommandInServer1 -> contextCommandInServer1.setContextCommandId(null));
}
@Override
public String getCommandContextName(MessageContextConfig contextConfig, Long guildId) {
return contextConfig.getIsTemplated()
? templateService.renderSimpleTemplate(contextConfig.getTemplateKey(), guildId)
: contextConfig.getName();
}
@Override
public boolean matchesGuildContextName(MessageContextInteractionModel model, MessageContextConfig contextConfig, Long guidId) {
return model.getEvent().isFromGuild()
&& model.getEvent().getCommandType().equals(Command.Type.MESSAGE)
&& model.getEvent().getName().equals(getCommandContextName(contextConfig, model.getServerId()));
}
@Override
public void storeCreatedCommands(Command command, AServer server, List<ContextCommandConfig> contextCommands) {
Optional<ContextCommandConfig> createdContextCommandOptional = contextCommands
.stream()
.filter(contextCommandConfig -> contextCommandConfig.getName().equals(command.getName()))
.findFirst();
if (createdContextCommandOptional.isPresent()) {
ContextCommandConfig createdContextCommandConfig = createdContextCommandOptional.get();
ContextCommand contextCommand = contextCommandManagementService.findContextCommand(createdContextCommandConfig.getMessageContextConfig().getName());
contextCommandInServerManagementService.createOrUpdateContextCommandInServer(contextCommand, server, command.getIdLong());
}
}
}

View File

@@ -0,0 +1,40 @@
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 dev.sheldan.abstracto.core.repository.ContextCommandInServerRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Optional;
@Component
public class ContextCommandInServerManagementServiceBean implements ContextCommandInServerManagementService {
@Autowired
private ContextCommandInServerRepository contextCommandInServerRepository;
@Override
public ContextCommandInServer createOrUpdateContextCommandInServer(ContextCommand contextCommand, AServer server, Long discordContextId) {
Optional<ContextCommandInServer> optional = loadContextCommandInServer(contextCommand, server);
if(optional.isPresent()) {
ContextCommandInServer contextCommandInServer = optional.get();
contextCommandInServer.setContextCommandId(discordContextId);
return contextCommandInServer;
} else {
ContextCommandInServer contextCommandInServer = ContextCommandInServer
.builder()
.commandReference(contextCommand)
.serverReference(server)
.contextCommandId(discordContextId)
.build();
return contextCommandInServerRepository.save(contextCommandInServer);
}
}
@Override
public Optional<ContextCommandInServer> loadContextCommandInServer(ContextCommand contextCommand, AServer server) {
return contextCommandInServerRepository.findByCommandReferenceAndServerReference(contextCommand, server);
}
}

View File

@@ -0,0 +1,33 @@
package dev.sheldan.abstracto.core.interaction.context.management;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.models.database.AFeature;
import dev.sheldan.abstracto.core.models.database.ContextCommand;
import dev.sheldan.abstracto.core.models.database.ContextType;
import dev.sheldan.abstracto.core.repository.ContextCommandRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class ContextCommandManagementServiceBean implements ContextCommandManagementService {
@Autowired
private ContextCommandRepository contextCommandRepository;
@Override
public ContextCommand createContextCommand(String name, ContextType contextType, AFeature feature) {
ContextCommand contextCommand = ContextCommand
.builder()
.commandName(name)
.type(contextType)
.feature(feature)
.build();
return contextCommandRepository.save(contextCommand);
}
@Override
public ContextCommand findContextCommand(String name) {
return contextCommandRepository.findByCommandName(name)
.orElseThrow(() -> new AbstractoRunTimeException("Context command not found."));
}
}

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.command.listener;
package dev.sheldan.abstracto.core.interaction.context.message;
import dev.sheldan.abstracto.core.interaction.MessageContextConfig;
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
import dev.sheldan.abstracto.core.listener.async.MessageContextCommandListener;
import dev.sheldan.abstracto.core.interaction.context.message.listener.MessageContextCommandListener;
import dev.sheldan.abstracto.core.listener.async.entity.FeatureActivationListener;
import dev.sheldan.abstracto.core.listener.sync.jda.MessageContextCommandListenerBean;
import dev.sheldan.abstracto.core.models.listener.FeatureActivationListenerModel;
import dev.sheldan.abstracto.core.service.ContextCommandService;
import dev.sheldan.abstracto.core.interaction.context.ContextCommandService;
import dev.sheldan.abstracto.core.service.FeatureModeService;
import dev.sheldan.abstracto.core.service.GuildService;
import lombok.extern.slf4j.Slf4j;
@@ -44,10 +44,14 @@ public class MessageContextCommandFeatureActivationListener implements FeatureAc
Guild guild = guildService.getGuildById(model.getServerId());
listeners.forEach(messageContextCommandListener -> {
if(featureModeService.necessaryFeatureModesMet(messageContextCommandListener, model.getServerId())) {
String contextCommandName = messageContextCommandListener.getConfig().getName();
MessageContextConfig config = messageContextCommandListener.getConfig();
String contextCommandName = contextCommandService.getCommandContextName(config, model.getServerId());
log.info("Adding message context command {} in guild {}.", contextCommandName, model.getServerId());
contextCommandService.upsertGuildMessageContextCommand(guild, contextCommandName)
.thenAccept(command -> log.info("Created message context command {} in guild {} because feature {} was enabled.", contextCommandName, guild.getIdLong(), model.getFeatureName()));
contextCommandService.upsertGuildMessageContextCommand(guild, contextCommandName, config)
.exceptionally(throwable -> {
log.error("Failed to greate message context command {} in guild {}.", contextCommandName, guild.getIdLong(), throwable);
return null;
});
}
});
return DefaultListenerResult.PROCESSED;

View File

@@ -1,11 +1,10 @@
package dev.sheldan.abstracto.core.command.listener;
package dev.sheldan.abstracto.core.interaction.context.message;
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
import dev.sheldan.abstracto.core.listener.async.MessageContextCommandListener;
import dev.sheldan.abstracto.core.interaction.context.message.listener.MessageContextCommandListener;
import dev.sheldan.abstracto.core.listener.async.entity.FeatureDeactivationListener;
import dev.sheldan.abstracto.core.listener.sync.jda.MessageContextCommandListenerBean;
import dev.sheldan.abstracto.core.models.listener.FeatureDeactivationListenerModel;
import dev.sheldan.abstracto.core.service.ContextCommandService;
import dev.sheldan.abstracto.core.interaction.context.ContextCommandService;
import dev.sheldan.abstracto.core.service.FeatureModeService;
import dev.sheldan.abstracto.core.service.GuildService;
import lombok.extern.slf4j.Slf4j;
@@ -44,10 +43,14 @@ public class MessageContextCommandFeatureDeactivationListener implements Feature
Guild guild = guildService.getGuildById(model.getServerId());
listeners.forEach(messageContextCommandListener -> {
if(featureModeService.necessaryFeatureModesMet(messageContextCommandListener, model.getServerId())) {
String contextCommandName = messageContextCommandListener.getConfig().getName();
String contextCommandName = contextCommandService.getCommandContextName(messageContextCommandListener.getConfig(), guild.getIdLong());
log.info("Adding message context command {} in guild {}.", contextCommandName, model.getServerId());
contextCommandService.deleteGuildContextCommandByName(guild, contextCommandName)
.thenAccept(unused -> log.info("Deleted command {} because feature {} was disabled in guild {}.", contextCommandName, model.getFeatureName(), guild.getIdLong()));
contextCommandService.deleteGuildContextCommandByName(guild, messageContextCommandListener.getConfig())
.thenAccept(unused -> log.info("Deleted command {} because feature {} was disabled in guild {}.", contextCommandName, model.getFeatureName(), guild.getIdLong()))
.exceptionally(throwable -> {
log.error("Failed to delete message context command in guild {}.", guild.getIdLong(), throwable);
return null;
});
}
});
return DefaultListenerResult.PROCESSED;

View File

@@ -1,7 +1,8 @@
package dev.sheldan.abstracto.core.listener.sync.jda;
package dev.sheldan.abstracto.core.interaction.context.message;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.listener.async.MessageContextCommandListener;
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;
import dev.sheldan.abstracto.core.service.FeatureConfigService;
import dev.sheldan.abstracto.core.service.FeatureFlagService;
@@ -28,6 +29,9 @@ public class MessageContextCommandListenerBean extends ListenerAdapter {
@Autowired(required = false)
private List<MessageContextCommandListener> listenerList;
@Autowired(required = false)
private List<MessageContextPostInteractionExecution> postInteractionExecutions;
@Autowired
@Qualifier("messageContextCommandExecutor")
private TaskExecutor messageContextCommandExecutor;
@@ -59,14 +63,35 @@ public class MessageContextCommandListenerBean extends ListenerAdapter {
.builder()
.event(event)
.build();
List<MessageContextCommandListener> validListener = filterFeatureAwareListener(listenerList, model);
Optional<MessageContextCommandListener> listenerOptional = findListener(validListener, model);
if(listenerOptional.isPresent()) {
MessageContextCommandListener listener = listenerOptional.get();
listener.execute(model);
} else {
log.info("No listener found for event {}", event.getClass().getSimpleName());
MessageContextCommandListener listener = null;
try {
List<MessageContextCommandListener> validListener = filterFeatureAwareListener(listenerList, model);
Optional<MessageContextCommandListener> listenerOptional = findListener(validListener, model);
if(listenerOptional.isPresent()) {
listener = listenerOptional.get();
listener.execute(model);
InteractionResult result = InteractionResult.fromSuccess();
for (MessageContextPostInteractionExecution postInteractionExecution : postInteractionExecutions) {
postInteractionExecution.execute(model, result, listener);
}
} else {
log.info("No listener found for event {}", event.getClass().getSimpleName());
}
} catch (Exception exception) {
if(event.isFromGuild()) {
log.error("Message context listener failed with exception in server {} and channel {}.", event.getGuild().getIdLong(),
event.getGuildChannel().getIdLong(), exception);
} else {
log.error("Message context listener failed with exception outside of a guild.", exception);
}
if(model != null && listener != null) {
InteractionResult result = InteractionResult.fromError("Failed to execute message context interaction.", exception);
if(postInteractionExecutions != null) {
for (MessageContextPostInteractionExecution postInteractionExecution : postInteractionExecutions) {
postInteractionExecution.execute(model, result, listener);
}
}
}
}
}

View File

@@ -0,0 +1,30 @@
package dev.sheldan.abstracto.core.interaction.context.message;
import dev.sheldan.abstracto.core.interaction.InteractionExceptionService;
import dev.sheldan.abstracto.core.interaction.InteractionResult;
import dev.sheldan.abstracto.core.interaction.InteractionResultState;
import dev.sheldan.abstracto.core.interaction.context.message.listener.MessageContextCommandListener;
import dev.sheldan.abstracto.core.models.listener.interaction.MessageContextInteractionModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class MessageContextExceptionPostInteractionExecution implements MessageContextPostInteractionExecution {
@Autowired
private InteractionExceptionService interactionExceptionService;
@Override
public void execute(MessageContextInteractionModel interActionContext, InteractionResult interactionResult, MessageContextCommandListener executedListener) {
InteractionResultState result = interactionResult.getResult();
if(result.equals(InteractionResultState.ERROR)) {
Throwable throwable = interactionResult.getThrowable();
if(throwable != null) {
log.info("Exception handling in message context interaction for exception {}.", throwable.getClass().getSimpleName());
interactionExceptionService.reportExceptionToInteraction(throwable, interActionContext, executedListener);
}
}
}
}

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.job;
package dev.sheldan.abstracto.core.interaction.job;
import dev.sheldan.abstracto.core.command.CommandReceivedHandler;
import lombok.Setter;

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.core.job;
package dev.sheldan.abstracto.core.interaction.job;
import dev.sheldan.abstracto.core.service.MessageService;
import dev.sheldan.abstracto.core.service.PaginatorServiceBean;
import dev.sheldan.abstracto.core.service.management.ComponentPayloadManagementService;
import dev.sheldan.abstracto.core.service.paginator.PaginatorServiceBean;
import dev.sheldan.abstracto.core.interaction.ComponentPayloadManagementService;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.quartz.DisallowConcurrentExecution;

View File

@@ -0,0 +1,30 @@
package dev.sheldan.abstracto.core.interaction.modal;
import dev.sheldan.abstracto.core.interaction.InteractionExceptionService;
import dev.sheldan.abstracto.core.interaction.InteractionResult;
import dev.sheldan.abstracto.core.interaction.InteractionResultState;
import dev.sheldan.abstracto.core.interaction.modal.listener.ModalInteractionListener;
import dev.sheldan.abstracto.core.interaction.modal.listener.ModalInteractionListenerModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class ModalExceptionPostInteractionExecution implements ModalPostInteractionExecution {
@Autowired
private InteractionExceptionService interactionExceptionService;
@Override
public void execute(ModalInteractionListenerModel interActionContext, InteractionResult interactionResult, ModalInteractionListener executedListener) {
InteractionResultState result = interactionResult.getResult();
if(result.equals(InteractionResultState.ERROR)) {
Throwable throwable = interactionResult.getThrowable();
if(throwable != null) {
log.info("Exception handling in modal interaction for exception {}.", throwable.getClass().getSimpleName());
interactionExceptionService.reportExceptionToInteraction(throwable, interActionContext, executedListener);
}
}
}
}

View File

@@ -0,0 +1,79 @@
package dev.sheldan.abstracto.core.interaction.modal;
import com.google.gson.Gson;
import dev.sheldan.abstracto.core.interaction.modal.config.ModalComponent;
import dev.sheldan.abstracto.core.interaction.modal.config.ModalConfig;
import dev.sheldan.abstracto.core.interaction.modal.config.TextInputComponent;
import dev.sheldan.abstracto.core.interaction.modal.config.TextInputComponentStyle;
import dev.sheldan.abstracto.core.templating.service.TemplateService;
import net.dv8tion.jda.api.events.interaction.command.GenericCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.components.ActionRow;
import net.dv8tion.jda.api.interactions.components.ItemComponent;
import net.dv8tion.jda.api.interactions.components.Modal;
import net.dv8tion.jda.api.interactions.components.text.TextInput;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
@Component
public class ModalServiceBean implements ModalService {
@Autowired
private TemplateService templateService;
@Autowired
private Gson gson;
@Override
public CompletableFuture<Void> replyModal(GenericCommandInteractionEvent event, String templateKey, Object model) {
Modal modal = createModalFromTemplate(templateKey, model, event.getGuild().getIdLong());
return event.replyModal(modal).submit();
}
@Override
public Modal createModalFromTemplate(String templateKey, Object model, Long serverId) {
String modalConfigString = templateService.renderTemplate(templateKey + "_modal", model, serverId);
ModalConfig modalConfig = gson.fromJson(modalConfigString, ModalConfig.class);
List<ModalComponent> components = modalConfig
.getTextInputs()
.stream()
.sorted(Comparator.comparing(ModalComponent::getPosition))
.collect(Collectors.toList());
return Modal.create(modalConfig.getId(), modalConfig.getTitle())
.addActionRows(convertToActionRows(components))
.build();
}
private List<ActionRow> convertToActionRows(List<ModalComponent> components) {
return components
.stream()
.map(this::convertComponent)
.map(ActionRow::of)
.collect(Collectors.toList());
}
private ItemComponent convertComponent(ModalComponent component) {
if(component instanceof TextInputComponent) {
TextInputComponent tic = (TextInputComponent) component;
TextInput.Builder builder = TextInput
.create(tic.getId(), tic.getLabel(), TextInputComponentStyle.getStyle(tic.getStyle()));
if(tic.getMinLength() != null) {
builder.setMinLength(tic.getMinLength());
}
if(tic.getMaxLength() != null) {
builder.setMaxLength(tic.getMaxLength());
}
if(tic.getRequired() != null) {
builder.setRequired(tic.getRequired());
}
return builder.build();
}
return null;
}
}

View File

@@ -0,0 +1,5 @@
package dev.sheldan.abstracto.core.interaction.modal.config;
public interface ModalComponent {
Integer getPosition();
}

View File

@@ -0,0 +1,17 @@
package dev.sheldan.abstracto.core.interaction.modal.config;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.List;
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class ModalConfig {
private List<TextInputComponent> textInputs;
private String id;
private String title;
}

View File

@@ -0,0 +1,17 @@
package dev.sheldan.abstracto.core.interaction.modal.config;
import lombok.*;
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class TextInputComponent implements ModalComponent {
private String placeHolder;
private String id;
private String label;
private TextInputComponentStyle style;
private Integer position;
private Integer maxLength;
private Integer minLength;
private Boolean required;
}

View File

@@ -0,0 +1,21 @@
package dev.sheldan.abstracto.core.interaction.modal.config;
import com.google.gson.annotations.SerializedName;
import net.dv8tion.jda.api.interactions.components.text.TextInputStyle;
public enum TextInputComponentStyle {
@SerializedName("short")
SHORT,
@SerializedName("paragraph")
PARAGRAPH;
public static TextInputStyle getStyle(TextInputComponentStyle config) {
switch (config) {
case PARAGRAPH:
return TextInputStyle.PARAGRAPH;
case SHORT:
default:
return TextInputStyle.SHORT;
}
}
}

View File

@@ -0,0 +1,150 @@
package dev.sheldan.abstracto.core.interaction.modal.listener;
import com.google.gson.Gson;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.interaction.ComponentPayloadManagementService;
import dev.sheldan.abstracto.core.interaction.InteractionResult;
import dev.sheldan.abstracto.core.interaction.modal.ModalPayload;
import dev.sheldan.abstracto.core.interaction.modal.ModalPostInteractionExecution;
import dev.sheldan.abstracto.core.models.database.ComponentPayload;
import dev.sheldan.abstracto.core.service.FeatureConfigService;
import dev.sheldan.abstracto.core.service.FeatureFlagService;
import dev.sheldan.abstracto.core.service.FeatureModeService;
import dev.sheldan.abstracto.core.utils.BeanUtils;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
@Component
@Slf4j
public class ModalInteractionListenerBean extends ListenerAdapter {
@Autowired(required = false)
private List<ModalInteractionListener> listenerList;
@Autowired(required = false)
private List<ModalPostInteractionExecution> postInteractionExecutions;
@Autowired
@Qualifier("modalInteractionExecutor")
private TaskExecutor modalInteractionExecutor;
@Autowired
private ModalInteractionListenerBean self;
@Autowired
private Gson gson;
@Autowired
private ComponentPayloadManagementService componentPayloadManagementService;
@Autowired
private FeatureConfigService featureConfigService;
@Autowired
private FeatureFlagService featureFlagService;
@Autowired
private FeatureModeService featureModeService;
@Override
public void onModalInteraction(@NotNull ModalInteractionEvent event) {
if(listenerList == null) return;
// TODO remove this and make this configurable
event.deferEdit().queue();
CompletableFuture.runAsync(() -> self.executeListenerLogic(event), modalInteractionExecutor).exceptionally(throwable -> {
log.error("Failed to execute listener logic in modal interaction event.", throwable);
return null;
});
}
@Transactional
public void executeListenerLogic(@NotNull ModalInteractionEvent event) {
ModalInteractionListenerModel model = null;
ModalInteractionListener listener = null;
try {
Optional<ComponentPayload> callbackInformation = componentPayloadManagementService.findPayload(event.getModalId());
if(callbackInformation.isPresent()) {
model = getModel(event, callbackInformation.get());
List<ModalInteractionListener> validListener = filterFeatureAwareListener(listenerList, model);
Optional<ModalInteractionListener> listenerOptional = findListener(validListener, model);
if(listenerOptional.isPresent()) {
listener = listenerOptional.get();
log.info("Executing modal listener {} for event for id {}.", listener.getClass().getSimpleName(), event.getModalId());
listener.execute(model);
InteractionResult result = InteractionResult.fromSuccess();
for (ModalPostInteractionExecution postInteractionExecution : postInteractionExecutions) {
postInteractionExecution.execute(model, result, listener);
}
} else {
log.warn("No listener found for button event for id {}.", event.getModalId());
}
} else {
log.warn("No callback found for id {}.", event.getModalId());
}
} catch (Exception exception) {
if(event.isFromGuild()) {
log.error("Modal interaction listener failed with exception in server {} and channel {}.", event.getGuild().getIdLong(),
event.getGuildChannel().getIdLong(), exception);
} else {
log.error("Modal interaction clicked listener failed with exception outside of a guild.", exception);
}
if(model != null && listener != null) {
InteractionResult result = InteractionResult.fromError("Failed to execute interaction.", exception);
if(postInteractionExecutions != null) {
for (ModalPostInteractionExecution postInteractionExecution : postInteractionExecutions) {
postInteractionExecution.execute(model, result, listener);
}
}
}
}
}
private Optional<ModalInteractionListener> findListener(List<ModalInteractionListener> featureAwareListeners, ModalInteractionListenerModel model) {
return featureAwareListeners.stream().filter(modelInteractionListener -> modelInteractionListener.handlesEvent(model)).findFirst();
}
private List<ModalInteractionListener> filterFeatureAwareListener(List<ModalInteractionListener> featureAwareListeners, ModalInteractionListenerModel model) {
return featureAwareListeners.stream().filter(trFeatureAwareListener -> {
FeatureConfig feature = featureConfigService.getFeatureDisplayForFeature(trFeatureAwareListener.getFeature());
if(!model.getEvent().isFromGuild()) {
return true;
}
if (!featureFlagService.isFeatureEnabled(feature, model.getServerId())) {
return false;
}
return featureModeService.necessaryFeatureModesMet(trFeatureAwareListener, model.getServerId());
}).collect(Collectors.toList());
}
private ModalInteractionListenerModel getModel(ModalInteractionEvent event, ComponentPayload componentPayload) throws ClassNotFoundException {
ModalPayload payload = null;
if(componentPayload.getPayloadType() != null && componentPayload.getPayload() != null) {
payload = (ModalPayload) gson.fromJson(componentPayload.getPayload(), Class.forName(componentPayload.getPayloadType()));
}
return ModalInteractionListenerModel
.builder()
.event(event)
.deserializedPayload(payload)
.payload(componentPayload.getPayload())
.origin(componentPayload.getOrigin())
.build();
}
@PostConstruct
public void postConstruct() {
BeanUtils.sortPrioritizedListeners(listenerList);
}
}

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.core.command;
package dev.sheldan.abstracto.core.interaction.slash;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.command.service.CommandService;
import dev.sheldan.abstracto.core.command.service.ExceptionService;
import dev.sheldan.abstracto.core.command.service.PostCommandExecution;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

View File

@@ -1,12 +1,11 @@
package dev.sheldan.abstracto.core.command.slash;
package dev.sheldan.abstracto.core.interaction.slash;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.SlashCommandConfig;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import dev.sheldan.abstracto.core.command.model.database.ACommandInAServer;
import dev.sheldan.abstracto.core.command.service.management.CommandInServerManagementService;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.templating.service.TemplateService;
import dev.sheldan.abstracto.core.utils.CompletableFutureList;
import net.dv8tion.jda.api.entities.Guild;
@@ -145,7 +144,7 @@ public class SlashCommandServiceBean implements SlashCommandService {
.map(Pair::getSecond)
.collect(Collectors.toList());
return guild.updateCommands().addCommands(commands).submit().thenApply(createdCommands -> {
self.storeCreatedCommands(guild, commandData, createdCommands);
self.storeCreatedSlashCommands(guild, commandData, createdCommands);
return createdCommands;
});
}
@@ -156,9 +155,8 @@ public class SlashCommandServiceBean implements SlashCommandService {
.stream()
.map(commandI -> guild.deleteCommandById(commandI).submit())
.collect(Collectors.toList());
return new CompletableFutureList<>(commandFutures).getMainFuture().thenAccept(unused -> {
self.unsetCommandInServerSlashId(commandInServerIds);
});
return new CompletableFutureList<>(commandFutures).getMainFuture()
.thenAccept(unused -> self.unsetCommandInServerSlashId(commandInServerIds));
}
@Transactional
@@ -179,11 +177,12 @@ public class SlashCommandServiceBean implements SlashCommandService {
.collect(Collectors.toList());
CompletableFutureList<Command> allFutures = new CompletableFutureList<>(upsertFutures);
return allFutures.getMainFuture()
.thenAccept(unused -> self.storeCreatedCommands(guild, commandData, allFutures.getObjects()));
.thenAccept(unused -> self.storeCreatedSlashCommands(guild, commandData, allFutures.getObjects()));
}
@Override
@Transactional
public void storeCreatedCommands(Guild guild, List<Pair<List<CommandConfiguration>, SlashCommandData>> commandData, List<Command> createdCommands) {
public void storeCreatedSlashCommands(Guild guild, List<Pair<List<CommandConfiguration>, SlashCommandData>> commandData, List<Command> createdCommands) {
commandData.forEach(commandConfigurationSlashCommandDataPair -> {
SlashCommandData slashCommandData = commandConfigurationSlashCommandDataPair.getSecond();
commandConfigurationSlashCommandDataPair.getFirst().forEach(commandConfiguration -> {
@@ -201,5 +200,4 @@ public class SlashCommandServiceBean implements SlashCommandService {
return commandConfig.getName().equals(command.getName());
}
}

View File

@@ -1,9 +1,9 @@
package dev.sheldan.abstracto.core.command.listener;
package dev.sheldan.abstracto.core.interaction.slash.listener;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.SlashCommandListenerBean;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandListenerBean;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.slash.SlashCommandService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandService;
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
import dev.sheldan.abstracto.core.listener.async.entity.FeatureActivationListener;
import dev.sheldan.abstracto.core.models.listener.FeatureActivationListenerModel;

View File

@@ -1,12 +1,12 @@
package dev.sheldan.abstracto.core.command.listener;
package dev.sheldan.abstracto.core.interaction.slash.listener;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.SlashCommandListenerBean;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandListenerBean;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import dev.sheldan.abstracto.core.command.model.database.ACommandInAServer;
import dev.sheldan.abstracto.core.command.service.management.CommandInServerManagementService;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
import dev.sheldan.abstracto.core.command.slash.SlashCommandService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandService;
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
import dev.sheldan.abstracto.core.listener.async.entity.FeatureDeactivationListener;
import dev.sheldan.abstracto.core.models.database.AServer;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.command.slash.parameter;
package dev.sheldan.abstracto.core.interaction.slash.parameter;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.models.database.AEmote;
import dev.sheldan.abstracto.core.service.EmoteService;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.models.database.AChannel;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.models.database.AEmote;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.models.database.ARole;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.models.database.ChannelGroupType;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import net.dv8tion.jda.api.entities.Emote;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import net.dv8tion.jda.api.entities.GuildChannel;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import net.dv8tion.jda.api.entities.GuildMessageChannel;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.slash.parameter.provider.provided;
package dev.sheldan.abstracto.core.interaction.slash.parameter.provider.provided;
import dev.sheldan.abstracto.core.command.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.command.slash.parameter.provider.SlashCommandParameterProvider;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandOptionTypeMapping;
import dev.sheldan.abstracto.core.interaction.slash.parameter.provider.SlashCommandParameterProvider;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.stereotype.Component;

View File

@@ -1,16 +1,15 @@
package dev.sheldan.abstracto.core.interactive;
import com.google.gson.Gson;
import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.config.ListenerPriority;
import dev.sheldan.abstracto.core.interactive.setup.payload.SetupConfirmationPayload;
import dev.sheldan.abstracto.core.listener.ButtonClickedListenerResult;
import dev.sheldan.abstracto.core.listener.async.jda.ButtonClickedListener;
import dev.sheldan.abstracto.core.models.listener.ButtonClickedListenerModel;
import dev.sheldan.abstracto.core.interaction.button.listener.ButtonClickedListenerResult;
import dev.sheldan.abstracto.core.interaction.button.listener.ButtonClickedListener;
import dev.sheldan.abstracto.core.interaction.button.listener.ButtonClickedListenerModel;
import dev.sheldan.abstracto.core.service.DelayedActionService;
import dev.sheldan.abstracto.core.service.FeatureSetupServiceBean;
import dev.sheldan.abstracto.core.service.management.ComponentPayloadManagementService;
import dev.sheldan.abstracto.core.interaction.ComponentPayloadManagementService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -36,9 +35,6 @@ public class InteractiveButtonClickedListener implements ButtonClickedListener {
@Autowired
private FeatureSetupServiceBean featureSetupServiceBean;
@Autowired
private Gson gson;
@Override
public ButtonClickedListenerResult execute(ButtonClickedListenerModel model) {
SetupConfirmationPayload payload = (SetupConfirmationPayload) model.getDeserializedPayload();

View File

@@ -2,7 +2,7 @@ package dev.sheldan.abstracto.core.interactive.setup.payload;
import dev.sheldan.abstracto.core.interactive.DelayedActionConfigContainer;
import dev.sheldan.abstracto.core.models.AServerChannelUserId;
import dev.sheldan.abstracto.core.models.template.button.ButtonPayload;
import dev.sheldan.abstracto.core.interaction.button.ButtonPayload;
import lombok.Builder;
import lombok.Getter;

Some files were not shown because too many files have changed in this diff Show More