getOptions method

  1. @override
List<CommandOptionBuilder> getOptions(
  1. CommandsPlugin commands
)
override

Return the CommandOptionBuilders that represent this entity for slash command registration.

Implementation

@override
List<CommandOptionBuilder> getOptions(CommandsPlugin commands) {
  if (resolvedOptions.type != CommandType.textOnly) {
    List<CommandOptionBuilder> options = [];

    for (final parameter in _functionData.parametersData.skip(1)) {
      Converter<dynamic>? argumentConverter =
          parameter.converterOverride ?? commands.getConverter(parameter.type);

      Iterable<CommandOptionChoiceBuilder<dynamic>>? choices = parameter.choices?.entries
          .map((entry) => CommandOptionChoiceBuilder(name: entry.key, value: entry.value));

      choices ??= argumentConverter?.choices;

      CommandOptionBuilder builder = CommandOptionBuilder(
        type: argumentConverter?.type ?? CommandOptionType.string,
        name: convertToKebabCase(parameter.name),
        nameLocalizations: parameter.localizedNames,
        description: parameter.description ?? 'No description provided',
        descriptionLocalizations: parameter.localizedDescriptions,
        isRequired: !parameter.isOptional,
        choices: choices?.toList(),
        hasAutocomplete:
            (parameter.autocompleteOverride ?? argumentConverter?.autocompleteCallback) != null,
      );

      argumentConverter?.processOptionCallback?.call(builder);

      options.add(builder);
    }

    return options;
  } else {
    // Text-only commands might have children which are slash commands
    return super.getOptions(commands);
  }
}