[AB-81] adding support for choices in slash command parameters

This commit is contained in:
Sheldan
2023-01-12 01:34:30 +01:00
parent db27f64832
commit aa10c88588
2 changed files with 21 additions and 4 deletions

View File

@@ -124,14 +124,18 @@ public class SlashCommandServiceBean implements SlashCommandService {
for (OptionType type : types) { for (OptionType type : types) {
String parameterName = slashCommandParameterService.getFullQualifiedParameterName(parameter.getSlashCompatibleName(), type) + "_" + i; String parameterName = slashCommandParameterService.getFullQualifiedParameterName(parameter.getSlashCompatibleName(), type) + "_" + i;
String parameterDescription = isTemplated ? templateService.renderSimpleTemplate(internalCommandName + "_parameter_" + parameter.getName()) : parameter.getDescription(); 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 { } else {
types.forEach(type -> { types.forEach(type -> {
String parameterName = slashCommandParameterService.getFullQualifiedParameterName(parameter.getSlashCompatibleName(), type); String parameterName = slashCommandParameterService.getFullQualifiedParameterName(parameter.getSlashCompatibleName(), type);
String parameterDescription = isTemplated ? templateService.renderSimpleTemplate(internalCommandName + "_parameter_" + parameter.getName()) : parameter.getDescription(); 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 { } else {
@@ -139,10 +143,14 @@ public class SlashCommandServiceBean implements SlashCommandService {
String parameterDescription = isTemplated ? templateService.renderSimpleTemplate(internalCommandName + "_parameter_" + parameter.getName()) : parameter.getDescription(); String parameterDescription = isTemplated ? templateService.renderSimpleTemplate(internalCommandName + "_parameter_" + parameter.getName()) : parameter.getDescription();
if(parameter.isListParam()) { if(parameter.isListParam()) {
for (int i = 0; i < parameter.getListSize(); i++) { 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 { } 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; 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) { private boolean shouldParameterBeCreated(Parameter parameter, Long serverId) {
if(parameter.getDependentFeatures().isEmpty()) { if(parameter.getDependentFeatures().isEmpty()) {
return true; return true;

View File

@@ -37,6 +37,8 @@ public class Parameter implements Serializable {
// these are the features which potentially require this parameter // these are the features which potentially require this parameter
@Builder.Default @Builder.Default
private List<String> dependentFeatures = new ArrayList<>(); private List<String> dependentFeatures = new ArrayList<>();
@Builder.Default
private List<String> choices = new ArrayList<>();
public String getSlashCompatibleName() { public String getSlashCompatibleName() {
return name.toLowerCase(Locale.ROOT); return name.toLowerCase(Locale.ROOT);