Compare commits

...

10 Commits

105 changed files with 367 additions and 141 deletions

2
.env
View File

@@ -1,2 +1,2 @@
REGISTRY_PREFIX=harbor.sheldan.dev/abstracto/
VERSION=1.6.10
VERSION=1.6.12

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>anti-raid</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>anti-raid</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>abstracto-modules</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>assignable-roles</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -74,7 +74,7 @@ public class CreateAssignableRolePlace extends AbstractConditionableCommand {
@Override
public CommandConfiguration getConfiguration() {
List<ParameterValidator> rolePlaceNameValidator = Arrays.asList(MaxStringLengthValidator.max(AssignableRolePlace.ASSIGNABLE_PLACE_NAME_LIMIT));
List<ParameterValidator> rolePlaceNameValidator = Arrays.asList(MaxStringLengthValidator.max(AssignableRolePlace.ASSIGNABLE_PLACE_NAME_LIMIT.intValue()));
Parameter rolePostName = Parameter
.builder()
.name(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)
@@ -95,7 +95,7 @@ public class CreateAssignableRolePlace extends AbstractConditionableCommand {
.templated(true)
.optional(true)
.build();
List<ParameterValidator> rolePlaceDescriptionValidator = Arrays.asList(MaxStringLengthValidator.max(AssignableRolePlace.ASSIGNABLE_PLACE_NAME_LIMIT));
List<ParameterValidator> rolePlaceDescriptionValidator = Arrays.asList(MaxStringLengthValidator.max(AssignableRolePlace.ASSIGNABLE_PLACE_NAME_LIMIT.intValue()));
Parameter text = Parameter
.builder()
.name(ASSIGNABLE_ROLE_PLACE_TEXT_PARAMETER)

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>assignable-roles</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>assignable-roles-int</artifactId>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>abstracto-modules</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>custom-command</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>custom-command</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>abstracto-modules</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>dynamic-activity</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>dynamic-activity</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>abstracto-modules</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>entertainment</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>entertainment</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>abstracto-modules</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>experience-tracking</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -158,7 +158,6 @@ public class LeaderBoardCommand extends AbstractConditionableCommand {
Parameter focusMe = Parameter
.builder()
.name(FOCUS_PARAMETER)
.validators(leaderBoardPageValidators)
.optional(true)
.slashCommandOnly(true)
.templated(true)

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>experience-tracking</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>abstracto-modules</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>giveaway</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<artifactId>giveaway-impl</artifactId>

View File

@@ -155,7 +155,7 @@ public class GiveawayServiceBean implements GiveawayService {
Long giveawayId = giveaway.getGiveawayId().getId();
log.info("Adding giveaway participating of user {} to giveaway {} in server {}.", member.getIdLong(), giveawayId, member.getGuild().getIdLong());
MessageToSend messageToSend = templateService.renderEmbedTemplate(GIVEAWAY_MESSAGE_TEMPLATE_KEY, giveawayMessageModel, member.getGuild().getIdLong());
return channelService.editEmbedMessageInAChannel(messageToSend.getEmbeds().get(0), messageChannel, giveaway.getMessageId())
return channelService.editMessageInAChannelFuture(messageToSend, messageChannel, giveaway.getMessageId())
.thenAccept(message -> {
self.persistAddedParticipant(member, giveawayId);
});

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>giveaway</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<artifactId>giveaway-int</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>abstracto-modules</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<artifactId>giveaway</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<artifactId>image-generation</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<artifactId>image-generation-impl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<artifactId>image-generation</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<artifactId>image-generation-int</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>abstracto-modules</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<artifactId>image-generation</artifactId>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>invite-filter</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>invite-filter</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -18,7 +18,7 @@
<dependency>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>moderation-int</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>abstracto-modules</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>link-embed</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>link-embed</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>abstracto-modules</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>logging</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>logging</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>abstracto-modules</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>moderation</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -23,7 +23,6 @@ import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.InteractionHook;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -76,16 +75,15 @@ public class Ban extends AbstractConditionableCommand {
duration = null;
}
if(slashCommandParameterService.hasCommandOptionWithFullType(USER_PARAMETER, event, OptionType.USER)) {
Member member = slashCommandParameterService.getCommandOption(USER_PARAMETER, event, User.class, Member.class);
Member member = slashCommandParameterService.getCommandOption(USER_PARAMETER, event, User.class, Member.class);
if(member != null) {
return event.deferReply().submit()
.thenCompose((hook) -> self.banMember(event, member, reason, duration, hook))
.thenApply(commandResult -> CommandResult.fromSuccess());
} else {
String userIdStr = slashCommandParameterService.getCommandOption(USER_PARAMETER, event, User.class, String.class);
Long userId = Long.parseLong(userIdStr);
User user = slashCommandParameterService.getCommandOption(USER_PARAMETER, event, User.class, User.class);
return event.deferReply().submit()
.thenCompose((hook) -> self.banViaUserId(event, userId, reason, duration, hook))
.thenCompose((hook) -> self.banViaUserId(event, user.getIdLong(), reason, duration, hook))
.thenApply(commandResult -> CommandResult.fromSuccess());
}
}

View File

@@ -33,7 +33,6 @@ import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.InteractionHook;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -86,16 +85,15 @@ public class Infractions extends AbstractConditionableCommand {
public CompletableFuture<CommandResult> showInfractions(InteractionHook hook, SlashCommandInteractionEvent event) {
List<Infraction> infractions;
Guild guild = hook.getInteraction().getGuild();
if(slashCommandParameterService.hasCommandOptionWithFullType(USER_PARAMETER, event, OptionType.USER)) {
Member member = slashCommandParameterService.getCommandOption(USER_PARAMETER, event, User.class, Member.class);
Member member = slashCommandParameterService.getCommandOption(USER_PARAMETER, event, User.class, Member.class);
User user = slashCommandParameterService.getCommandOption(USER_PARAMETER, event, User.class, User.class);
if(member != null) {
if(!member.getGuild().equals(guild)) {
throw new EntityGuildMismatchException();
}
infractions = infractionManagementService.getInfractionsForUser(userInServerManagementService.loadOrCreateUser(member));
} else if(slashCommandParameterService.hasCommandOptionWithFullType(USER_PARAMETER, event, OptionType.STRING)){
String userIdStr = slashCommandParameterService.getCommandOption(USER_PARAMETER, event, User.class, String.class);
Long userId = Long.parseLong(userIdStr);
AUserInAServer userInServer = userInServerManagementService.loadOrCreateUser(guild.getIdLong(), userId);
} else if(user != null){
AUserInAServer userInServer = userInServerManagementService.loadOrCreateUser(guild.getIdLong(), user.getIdLong());
infractions = infractionManagementService.getInfractionsForUser(userInServer);
} else {

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>moderation</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>abstracto-modules</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>modmail</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>modmail</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>abstracto-modules</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto</groupId>
<artifactId>abstracto-application</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>abstracto-modules</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>profanity-filter</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>profanity-filter</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>abstracto-modules</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>remind</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>remind</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>abstracto-modules</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>repost-detection</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>repost-detection</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>abstracto-modules</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>starboard</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>starboard</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>abstracto-modules</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>statistic</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>statistic</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>abstracto-modules</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>sticky-roles</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<artifactId>sticky-roles-impl</artifactId>

View File

@@ -11,7 +11,6 @@ import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.UserService;
import dev.sheldan.abstracto.stickyroles.config.StickyRolesFeatureDefinition;
import dev.sheldan.abstracto.stickyroles.config.StickyRolesSlashCommandNames;
import dev.sheldan.abstracto.stickyroles.service.StickyRoleService;
@@ -19,10 +18,8 @@ import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
@@ -47,34 +44,18 @@ public class ToggleStickinessManagement extends AbstractConditionableCommand {
@Autowired
private StickyRoleService stickyRoleService;
@Autowired
private UserService userService;
@Autowired
private ToggleStickinessManagement self;
@Override
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
Boolean newState = slashCommandParameterService.getCommandOption(STICKY_PARAMETER_NAME, event, Boolean.class);
if(slashCommandParameterService.hasCommandOptionWithFullType(MEMBER_PARAMETER_NAME, event, OptionType.USER)) {
Member targetMember = slashCommandParameterService.getCommandOption(MEMBER_PARAMETER_NAME, event, User.class, Member.class);
Member targetMember = slashCommandParameterService.getCommandOption(MEMBER_PARAMETER_NAME, event, User.class, Member.class);
User targetUser = slashCommandParameterService.getCommandOption(MEMBER_PARAMETER_NAME, event, User.class, User.class);
if(targetMember != null) {
stickyRoleService.setStickiness(targetMember, newState);
return interactionService.replyEmbed(RESPONSE_TEMPLATE, event)
.thenApply(interactionHook -> CommandResult.fromSuccess());
} else {
String userIdStr = slashCommandParameterService.getCommandOption(MEMBER_PARAMETER_NAME, event, User.class, String.class);
Long userId = Long.parseLong(userIdStr);
return userService.retrieveUserForId(userId).thenCompose(user -> {
self.callService(event, user, newState);
return interactionService.replyEmbed(RESPONSE_TEMPLATE, event);
}).thenApply(interactionHook -> CommandResult.fromSuccess());
stickyRoleService.setStickiness(targetUser, event.getGuild(), newState);
}
}
@Transactional
public void callService(SlashCommandInteractionEvent event, User user, Boolean newState) {
stickyRoleService.setStickiness(user, event.getGuild(), newState);
return interactionService.replyEmbed(RESPONSE_TEMPLATE, event)
.thenApply(interactionHook -> CommandResult.fromSuccess());
}
@Override

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>sticky-roles</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<artifactId>sticky-roles-int</artifactId>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>abstracto-modules</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>suggestion</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>suggestion</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>abstracto-modules</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>twitch</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>twitch</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>abstracto-modules</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>utility</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>utility</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>abstracto-modules</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>voice-channel-context</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>voice-channel-context</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>abstracto-modules</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>webservices</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.modules</groupId>
<artifactId>webservices</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto</groupId>
<artifactId>abstracto-application</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.core</groupId>
<artifactId>core</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>

View File

@@ -32,7 +32,7 @@ public class SetPrefix extends AbstractConditionableCommand {
@Override
public CommandConfiguration getConfiguration() {
List<ParameterValidator> validators = Arrays.asList(MaxStringLengthValidator.max(10L));
List<ParameterValidator> validators = Arrays.asList(MaxStringLengthValidator.max(10));
Parameter newPrefixParameter = Parameter
.builder()
.name("prefix")

View File

@@ -14,14 +14,18 @@ import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.template.commands.FeatureSwitchModel;
import dev.sheldan.abstracto.core.service.FeatureConfigService;
import dev.sheldan.abstracto.core.service.FeatureFlagService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.templating.model.MessageToSend;
import dev.sheldan.abstracto.core.templating.service.TemplateService;
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -54,6 +58,12 @@ public class DisableFeature extends AbstractConditionableCommand {
@Autowired
private InteractionService interactionService;
@Autowired
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
@Autowired
private FeatureFlagManagementService featureFlagManagementService;
private static final String DISABLE_FEATURE_DEPENDENCIES_RESPONSE_TEMPLATE_KEY = "disableFeature_feature_dependencies_response";
private static final String DISABLE_FEATURE_RESPONSE_TEMPLATE_KEY = "disableFeature_response";
private static final String FEATURE_NAME_PARAMETER = "featureName";
@@ -99,6 +109,21 @@ public class DisableFeature extends AbstractConditionableCommand {
return featureDependencies;
}
@Override
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), FEATURE_NAME_PARAMETER)) {
String input = event.getFocusedOption().getValue().toLowerCase();
AServer server = serverManagementService.loadServer(event.getGuild());
return featureFlagManagementService.getFeatureFlagsOfServer(server)
.stream()
.filter(AFeatureFlag::isEnabled)
.map(aFeatureFlag -> aFeatureFlag.getFeature().getKey().toLowerCase())
.filter(featureName -> featureName.toLowerCase().startsWith(input))
.toList();
}
return new ArrayList<>();
}
@Override
public CommandConfiguration getConfiguration() {
Parameter featureName = Parameter
@@ -106,6 +131,7 @@ public class DisableFeature extends AbstractConditionableCommand {
.name(FEATURE_NAME_PARAMETER)
.templated(true)
.type(String.class)
.supportsAutoComplete(true)
.build();
List<Parameter> parameters = Arrays.asList(featureName);

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.core.commands.config.features;
import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
@@ -13,11 +14,19 @@ import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.config.FeatureMode;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
import dev.sheldan.abstracto.core.models.database.AFeature;
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
import dev.sheldan.abstracto.core.models.database.AFeatureMode;
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.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
import dev.sheldan.abstracto.core.service.management.FeatureModeManagementService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import java.util.ArrayList;
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -44,6 +53,18 @@ public class DisableMode extends AbstractConditionableCommand {
@Autowired
private InteractionService interactionService;
@Autowired
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
@Autowired
private FeatureFlagManagementService featureFlagManagementService;
@Autowired
private FeatureModeManagementService featureModeManagementService;
@Autowired
private FeatureManagementService featureManagementService;
private static final String DISABLE_MODE_RESPONSE_KEY = "disableMode_response";
private static final String FEATURE_PARAMETER = "feature";
private static final String MODE_PARAMETER = "mode";
@@ -61,12 +82,41 @@ public class DisableMode extends AbstractConditionableCommand {
.thenApply(interactionHook -> CommandResult.fromSuccess());
}
@Override
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
String input = event.getFocusedOption().getValue().toLowerCase();
AServer server = serverManagementService.loadServer(event.getGuild());
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), FEATURE_PARAMETER)) {
return featureFlagManagementService.getFeatureFlagsOfServer(server)
.stream()
.filter(AFeatureFlag::isEnabled)
.map(aFeatureFlag -> aFeatureFlag.getFeature().getKey().toLowerCase())
.filter(featureName -> featureName.toLowerCase().startsWith(input))
.toList();
} else if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), MODE_PARAMETER)) {
String featureName = slashCommandParameterService.getCommandOption(FEATURE_PARAMETER, event, String.class);
if(featureName.isBlank()) {
return new ArrayList<>();
}
FeatureDefinition featureDefinition = featureConfigService.getFeatureEnum(featureName);
AFeature feature = featureManagementService.getFeature(featureDefinition.getKey());
List<AFeatureMode> modes = featureModeManagementService.getFeatureModesOfFeatureInServer(server, feature);
return modes
.stream()
.map(mode -> mode.getFeatureMode().toLowerCase())
.filter(string -> string.startsWith(input))
.toList();
}
return new ArrayList<>();
}
@Override
public CommandConfiguration getConfiguration() {
Parameter featureName = Parameter
.builder()
.name(FEATURE_PARAMETER)
.type(String.class)
.supportsAutoComplete(true)
.templated(true)
.build();
@@ -74,6 +124,7 @@ public class DisableMode extends AbstractConditionableCommand {
.builder()
.name(MODE_PARAMETER)
.type(String.class)
.supportsAutoComplete(true)
.templated(true)
.build();
List<Parameter> parameters = Arrays.asList(featureName, mode);

View File

@@ -14,6 +14,7 @@ import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
import dev.sheldan.abstracto.core.models.FeatureValidationResult;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.template.commands.FeatureSwitchModel;
@@ -24,6 +25,7 @@ import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.templating.model.MessageToSend;
import dev.sheldan.abstracto.core.templating.service.TemplateService;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -56,6 +58,9 @@ public class EnableFeature extends AbstractConditionableCommand {
@Autowired
private InteractionService interactionService;
@Autowired
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
private static final String ENABLE_FEATURE_DEPENDENCIES_RESPONSE_TEMPLATE_KEY = "enableFeature_feature_dependencies_response";
private static final String ENABLE_FEATURE_RESPONSE_TEMPLATE_KEY = "enableFeature_response";
private static final String FEATURE_NAME_PARAMETER = "featureName";
@@ -114,12 +119,26 @@ public class EnableFeature extends AbstractConditionableCommand {
return result;
}
@Override
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), FEATURE_NAME_PARAMETER)) {
String input = event.getFocusedOption().getValue().toLowerCase();
return featureConfigService.getAllFeatures()
.stream()
.map(String::toLowerCase)
.filter(lowerCase -> lowerCase.startsWith(input))
.toList();
}
return new ArrayList<>();
}
@Override
public CommandConfiguration getConfiguration() {
Parameter featureName = Parameter
.builder()
.name(FEATURE_NAME_PARAMETER)
.type(String.class)
.supportsAutoComplete(true)
.templated(true)
.build();
List<Parameter> parameters = Arrays.asList(featureName);

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.core.commands.config.features;
import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService;
import dev.sheldan.abstracto.core.interaction.slash.CoreSlashCommandNames;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
@@ -13,11 +14,19 @@ import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.config.FeatureMode;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
import dev.sheldan.abstracto.core.models.database.AFeature;
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
import dev.sheldan.abstracto.core.models.database.AFeatureMode;
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.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
import dev.sheldan.abstracto.core.service.management.FeatureModeManagementService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import java.util.ArrayList;
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -44,6 +53,18 @@ public class EnableMode extends AbstractConditionableCommand {
@Autowired
private ServerManagementService serverManagementService;
@Autowired
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
@Autowired
private FeatureFlagManagementService featureFlagManagementService;
@Autowired
private FeatureModeManagementService featureModeManagementService;
@Autowired
private FeatureManagementService featureManagementService;
private static final String ENABLE_MODE_RESPONSE_KEY = "enableMode_response";
private static final String FEATURE_PARAMETER = "feature";
private static final String MODE_PARAMETER = "mode";
@@ -61,16 +82,49 @@ public class EnableMode extends AbstractConditionableCommand {
.thenApply(interactionHook -> CommandResult.fromSuccess());
}
@Override
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
AServer server = serverManagementService.loadServer(event.getGuild());
String input = event.getFocusedOption().getValue().toLowerCase();
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), FEATURE_PARAMETER)) {
return featureFlagManagementService.getFeatureFlagsOfServer(server)
.stream()
.filter(AFeatureFlag::isEnabled)
.map(aFeatureFlag -> aFeatureFlag.getFeature().getKey().toLowerCase())
.filter(featureName -> featureName.toLowerCase().startsWith(input))
.toList();
} else if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), MODE_PARAMETER)) {
String featureName = slashCommandParameterService.getCommandOption(FEATURE_PARAMETER, event, String.class);
if(featureName.isBlank()) {
return new ArrayList<>();
}
FeatureDefinition featureDefinition = featureConfigService.getFeatureEnum(featureName);
AFeature feature = featureManagementService.getFeature(featureDefinition.getKey());
List<AFeatureMode> modes = featureModeManagementService.getFeatureModesOfFeatureInServer(server, feature);
return modes
.stream()
.map(mode -> mode.getFeatureMode().toLowerCase())
.filter(string -> string.startsWith(input))
.toList();
}
return new ArrayList<>();
}
@Override
public CommandConfiguration getConfiguration() {
Parameter featureName = Parameter
.builder()
.name(FEATURE_PARAMETER)
.type(String.class)
.templated(true).build();
.supportsAutoComplete(true)
.templated(true)
.build();
Parameter mode = Parameter
.builder().name(MODE_PARAMETER)
.builder()
.name(MODE_PARAMETER)
.type(String.class)
.supportsAutoComplete(true)
.templated(true)
.build();

View File

@@ -13,14 +13,19 @@ 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.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
import dev.sheldan.abstracto.core.models.database.AFeature;
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.template.commands.FeatureModeDisplay;
import dev.sheldan.abstracto.core.models.template.commands.FeatureModesModel;
import dev.sheldan.abstracto.core.service.FeatureConfigService;
import dev.sheldan.abstracto.core.service.FeatureModeService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import java.util.ArrayList;
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -53,6 +58,12 @@ public class FeatureModes extends AbstractConditionableCommand {
@Autowired
private SlashCommandParameterService slashCommandParameterService;
@Autowired
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
@Autowired
private FeatureFlagManagementService featureFlagManagementService;
@Override
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
List<FeatureModeDisplay> featureModes;
@@ -73,12 +84,28 @@ public class FeatureModes extends AbstractConditionableCommand {
.thenApply(interactionHook -> CommandResult.fromSuccess());
}
@Override
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), FEATURE_PARAMETER)) {
String input = event.getFocusedOption().getValue().toLowerCase();
AServer server = serverManagementService.loadServer(event.getGuild());
return featureFlagManagementService.getFeatureFlagsOfServer(server)
.stream()
.filter(AFeatureFlag::isEnabled)
.map(aFeatureFlag -> aFeatureFlag.getFeature().getKey().toLowerCase())
.filter(featureName -> featureName.toLowerCase().startsWith(input))
.toList();
}
return new ArrayList<>();
}
@Override
public CommandConfiguration getConfiguration() {
Parameter featureName = Parameter
.builder()
.name(FEATURE_PARAMETER)
.type(String.class)
.supportsAutoComplete(true)
.optional(true)
.templated(true)
.build();

View File

@@ -50,7 +50,7 @@ public class SetEmote extends AbstractConditionableCommand {
@Override
public CommandConfiguration getConfiguration() {
List<ParameterValidator> emoteKeyValidators = Arrays.asList(MaxStringLengthValidator.max(255L));
List<ParameterValidator> emoteKeyValidators = Arrays.asList(MaxStringLengthValidator.max(255));
Parameter emoteKey = Parameter
.builder()
.name(EMOTE_KEY_PARAMETER)

View File

@@ -2,6 +2,10 @@ package dev.sheldan.abstracto.core.interaction.slash;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.validator.MaxIntegerValueValidator;
import dev.sheldan.abstracto.core.command.config.validator.MaxStringLengthValidator;
import dev.sheldan.abstracto.core.command.config.validator.MinIntegerValueValidator;
import dev.sheldan.abstracto.core.command.config.validator.MinStringLengthValidator;
import dev.sheldan.abstracto.core.command.execution.CommandParameterKey;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.command.config.UserCommandConfig;
@@ -184,6 +188,39 @@ public class SlashCommandServiceBean implements SlashCommandService {
convertCommandConfigToCommandData(commandConfiguration, existingCommands, null, false);
}
// TODO at some point replace this with more "native" solutions than using a validator instance
private Optional<Integer> getMaxLengthOfParameter(Parameter parameter) {
return parameter
.getValidators()
.stream().filter(parameterValidator -> parameterValidator instanceof MaxStringLengthValidator)
.findFirst().map(MaxStringLengthValidator.class::cast)
.map(MaxStringLengthValidator::getMaxLength);
}
private Optional<Long> getMaxValueOfParameter(Parameter parameter) {
return parameter
.getValidators()
.stream().filter(parameterValidator -> parameterValidator instanceof MaxIntegerValueValidator)
.findFirst().map(MaxIntegerValueValidator.class::cast)
.map(MaxIntegerValueValidator::getMaxValue);
}
private Optional<Long> getMinValueOfParameter(Parameter parameter) {
return parameter
.getValidators()
.stream().filter(parameterValidator -> parameterValidator instanceof MinIntegerValueValidator)
.findFirst().map(MinIntegerValueValidator.class::cast)
.map(MinIntegerValueValidator::getMinValue);
}
private Optional<Integer> getMinLengthOfParameter(Parameter parameter) {
return parameter
.getValidators()
.stream().filter(parameterValidator -> parameterValidator instanceof MinStringLengthValidator)
.findFirst().map(MinStringLengthValidator.class::cast)
.map(MinStringLengthValidator::getMinLength);
}
private List<OptionData> getParameters(CommandConfiguration commandConfiguration, boolean isTemplated, String internalCommandName, Long serverId, boolean userCommandsOnly) {
List<OptionData> requiredParameters = new ArrayList<>();
List<OptionData> optionalParameters = new ArrayList<>();
@@ -195,6 +232,10 @@ public class SlashCommandServiceBean implements SlashCommandService {
return;
}
List<OptionType> types = slashCommandParameterService.getTypesFromParameter(parameter);
Optional<Integer> maxLengthOptional = getMaxLengthOfParameter(parameter);
Optional<Long> maxValueOptional = getMaxValueOfParameter(parameter);
Optional<Long> minValueOptional = getMinValueOfParameter(parameter);
Optional<Integer> minLengthOptional = getMinLengthOfParameter(parameter);
if(types.size() > 1) {
if(parameter.isListParam()) {
for (int i = 0; i < parameter.getListSize(); i++) {
@@ -203,6 +244,10 @@ public class SlashCommandServiceBean implements SlashCommandService {
String parameterDescription = isTemplated ? templateService.renderSimpleTemplate(internalCommandName + "_parameter_" + parameter.getName(), serverId) : parameter.getDescription();
OptionData optionData = new OptionData(type, parameterName, parameterDescription, false);
addChoices(optionData, parameter, internalCommandName, isTemplated, serverId);
setMaxLength(maxLengthOptional, optionData);
setMinLength(minLengthOptional, optionData);
setMaxValue(maxValueOptional, optionData);
setMinValue(minValueOptional, optionData);
optionalParameters.add(optionData);
}
}
@@ -212,6 +257,10 @@ public class SlashCommandServiceBean implements SlashCommandService {
String parameterDescription = isTemplated ? templateService.renderSimpleTemplate(internalCommandName + "_parameter_" + parameter.getName(), serverId) : parameter.getDescription();
OptionData optionData = new OptionData(type, parameterName, parameterDescription, false);
addChoices(optionData, parameter, internalCommandName, isTemplated, serverId);
setMaxLength(maxLengthOptional, optionData);
setMinLength(minLengthOptional, optionData);
setMaxValue(maxValueOptional, optionData);
setMinValue(minValueOptional, optionData);
optionalParameters.add(optionData);
});
}
@@ -222,11 +271,19 @@ public class SlashCommandServiceBean implements SlashCommandService {
for (int i = 0; i < parameter.getListSize(); i++) {
OptionData optionData = new OptionData(type, parameter.getSlashCompatibleName() + "_" + i, parameterDescription, false);
addChoices(optionData, parameter, internalCommandName, isTemplated, serverId);
setMaxLength(maxLengthOptional, optionData);
setMinLength(minLengthOptional, optionData);
setMaxValue(maxValueOptional, optionData);
setMinValue(minValueOptional, optionData);
optionalParameters.add(optionData);
}
} else {
OptionData optionData = new OptionData(type, parameter.getSlashCompatibleName(), parameterDescription, !parameter.isOptional(), parameter.getSupportsAutoComplete());
addChoices(optionData, parameter, internalCommandName, isTemplated, serverId);
setMaxLength(maxLengthOptional, optionData);
setMinLength(minLengthOptional, optionData);
setMaxValue(maxValueOptional, optionData);
setMinValue(minValueOptional, optionData);
requiredParameters.add(optionData);
}
}
@@ -235,6 +292,22 @@ public class SlashCommandServiceBean implements SlashCommandService {
return requiredParameters;
}
private void setMaxLength(Optional<Integer> maxLengthOptional, OptionData optionData) {
maxLengthOptional.ifPresent(optionData::setMaxLength);
}
private void setMaxValue(Optional<Long> maxValueOptional, OptionData optionData) {
maxValueOptional.ifPresent(optionData::setMaxValue);
}
private void setMinLength(Optional<Integer> minLengthOptional, OptionData optionData) {
minLengthOptional.ifPresent(optionData::setMinLength);
}
private void setMinValue(Optional<Long> minValueOptional, OptionData optionData) {
minValueOptional.ifPresent(optionData::setMinValue);
}
private void addChoices(OptionData optionData, Parameter parameter, String commandName, boolean isTemplated, Long serverId) {
if(CommandParameterKey.class.isAssignableFrom(parameter.getType())) {
parameter.setChoices(CommandParameterKey.getKeys(parameter.getType()));

View File

@@ -42,7 +42,7 @@ public class SlashCommandFeatureActivationListener implements FeatureActivationL
List<Command> incomingSlashCommands = slashCommandListenerBean.getSlashCommands()
.stream()
.filter(command -> command.getFeature().getKey().equals(model.getFeatureName()))
.collect(Collectors.toList());
.toList();
if(incomingSlashCommands.isEmpty()) {
return DefaultListenerResult.IGNORED;
}

View File

@@ -16,7 +16,7 @@ public class UserSlashCommandParameterProvider implements SlashCommandParameterP
return SlashCommandOptionTypeMapping
.builder()
.type(User.class)
.optionTypes(Arrays.asList(OptionType.USER, OptionType.STRING))
.optionTypes(Arrays.asList(OptionType.USER))
.strictTypes(List.of(OptionType.USER))
.build();
}

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto.core</groupId>
<artifactId>core</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>

View File

@@ -14,7 +14,7 @@ import java.util.List;
@Builder
public class MaxStringLengthValidator implements ParameterValidator {
private Long maxLength;
private Integer maxLength;
@Override
public boolean validate(Object value) {
@@ -33,7 +33,7 @@ public class MaxStringLengthValidator implements ParameterValidator {
public List<ValidatorParam> getParameters() {
SingleNumberValidatorParam param = SingleNumberValidatorParam
.builder()
.number(maxLength)
.number(maxLength.longValue())
.build();
return Arrays.asList(param);
}
@@ -43,7 +43,7 @@ public class MaxStringLengthValidator implements ParameterValidator {
return "command_parameter_validation_string_too_long";
}
public static MaxStringLengthValidator max(Long number) {
public static MaxStringLengthValidator max(Integer number) {
return MaxStringLengthValidator
.builder()
.maxLength(number)

View File

@@ -14,7 +14,7 @@ import java.util.List;
@Builder
public class MinStringLengthValidator implements ParameterValidator {
private Long minLength;
private Integer minLength;
@Override
public boolean validate(Object value) {
@@ -33,7 +33,7 @@ public class MinStringLengthValidator implements ParameterValidator {
public List<ValidatorParam> getParameters() {
SingleNumberValidatorParam param = SingleNumberValidatorParam
.builder()
.number(minLength)
.number(minLength.longValue())
.build();
return Arrays.asList(param);
}

View File

@@ -16,7 +16,7 @@ public class MaxStringLengthValidatorTest {
@Before
public void setup() {
validator.setMaxLength(4L);
validator.setMaxLength(4);
}
@Test(expected = ValidatorConfigException.class)

View File

@@ -16,7 +16,7 @@ public class MinStringLengthValidatorTest {
@Before
public void setup() {
validator.setMinLength(4L);
validator.setMinLength(4);
}
@Test(expected = ValidatorConfigException.class)

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>core</artifactId>
<groupId>dev.sheldan.abstracto.core</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>core</artifactId>
<groupId>dev.sheldan.abstracto.core</groupId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.abstracto</groupId>
<artifactId>abstracto-application</artifactId>
<version>1.6.11-SNAPSHOT</version>
<version>1.6.13-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

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