diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/interaction/slash/SlashCommandServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/interaction/slash/SlashCommandServiceBean.java index ced6fa19a..89961d102 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/interaction/slash/SlashCommandServiceBean.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/interaction/slash/SlashCommandServiceBean.java @@ -124,14 +124,18 @@ public class SlashCommandServiceBean implements SlashCommandService { for (OptionType type : types) { String parameterName = slashCommandParameterService.getFullQualifiedParameterName(parameter.getSlashCompatibleName(), type) + "_" + i; String parameterDescription = isTemplated ? templateService.renderSimpleTemplate(internalCommandName + "_parameter_" + parameter.getName()) : parameter.getDescription(); - optionalParameters.add(new OptionData(type, parameterName, parameterDescription, false)); + OptionData optionData = new OptionData(type, parameterName, parameterDescription, false); + addChoices(optionData, parameter, internalCommandName, isTemplated); + optionalParameters.add(optionData); } } } else { types.forEach(type -> { String parameterName = slashCommandParameterService.getFullQualifiedParameterName(parameter.getSlashCompatibleName(), type); String parameterDescription = isTemplated ? templateService.renderSimpleTemplate(internalCommandName + "_parameter_" + parameter.getName()) : parameter.getDescription(); - optionalParameters.add(new OptionData(type, parameterName, parameterDescription, false)); + OptionData optionData = new OptionData(type, parameterName, parameterDescription, false); + addChoices(optionData, parameter, internalCommandName, isTemplated); + optionalParameters.add(optionData); }); } } else { @@ -139,10 +143,14 @@ public class SlashCommandServiceBean implements SlashCommandService { String parameterDescription = isTemplated ? templateService.renderSimpleTemplate(internalCommandName + "_parameter_" + parameter.getName()) : parameter.getDescription(); if(parameter.isListParam()) { for (int i = 0; i < parameter.getListSize(); i++) { - optionalParameters.add(new OptionData(type, parameter.getSlashCompatibleName() + "_" + i, parameterDescription, false)); + OptionData optionData = new OptionData(type, parameter.getSlashCompatibleName() + "_" + i, parameterDescription, false); + addChoices(optionData, parameter, internalCommandName, isTemplated); + optionalParameters.add(optionData); } } else { - requiredParameters.add(new OptionData(type, parameter.getSlashCompatibleName(), parameterDescription, !parameter.isOptional(), parameter.getSupportsAutoComplete())); + OptionData optionData = new OptionData(type, parameter.getSlashCompatibleName(), parameterDescription, !parameter.isOptional(), parameter.getSupportsAutoComplete()); + addChoices(optionData, parameter, internalCommandName, isTemplated); + requiredParameters.add(optionData); } } }); @@ -150,6 +158,13 @@ public class SlashCommandServiceBean implements SlashCommandService { return requiredParameters; } + private void addChoices(OptionData optionData, Parameter parameter, String commandName, boolean isTemplated) { + parameter.getChoices().forEach(choiceKey -> { + String value = isTemplated ? templateService.renderSimpleTemplate(commandName + "_parameter_" + parameter.getName() + "_choice_" + choiceKey) : choiceKey; + optionData.addChoice(value, choiceKey); + }); + } + private boolean shouldParameterBeCreated(Parameter parameter, Long serverId) { if(parameter.getDependentFeatures().isEmpty()) { return true; diff --git a/abstracto-application/core/core-int/src/main/java/dev/sheldan/abstracto/core/command/config/Parameter.java b/abstracto-application/core/core-int/src/main/java/dev/sheldan/abstracto/core/command/config/Parameter.java index 98e22fe98..48d2b13fa 100644 --- a/abstracto-application/core/core-int/src/main/java/dev/sheldan/abstracto/core/command/config/Parameter.java +++ b/abstracto-application/core/core-int/src/main/java/dev/sheldan/abstracto/core/command/config/Parameter.java @@ -37,6 +37,8 @@ public class Parameter implements Serializable { // these are the features which potentially require this parameter @Builder.Default private List dependentFeatures = new ArrayList<>(); + @Builder.Default + private List choices = new ArrayList<>(); public String getSlashCompatibleName() { return name.toLowerCase(Locale.ROOT);