[Autocompleters] provide a similar pattern to TypeConverters.
[Autocompleters] are cached, singleton services and they are used by the
Interaction Service to handle Autocomplete Interactions targeted to a specific Slash Command parameter.
To start using AutocompleteHandlers, use the [AutocompleteAttribute(Type type)]
overload of the [AutocompleteAttribute].
This will dynamically link the parameter to the AutocompleteHandler type.
AutocompleteHandlers raise the AutocompleteHandlerExecuted
event on execution. This event can be also used to create a post-execution logic, just like the *CommandExecuted
events.
A valid AutocompleteHandlers must inherit AutocompleteHandler base type and implement all of its abstract methods.
[!code-csharpAutocomplete Command Example]
The Interactions Service uses this method to generate a response of an Autocomplete Interaction.
This method should return AutocompletionResult.FromSuccess(IEnumerable<AutocompleteResult>)
to
display parameter suggestions to the user. If there are no suggestions to be presented to the user, you have two results:
AutocompletionResult.FromSuccess()
will display a "No options match your search." message to the user.AutocompleteResult.FromError()
will make the Interaction Service not respond to the interaction,AutocompletionResult.FromError()
is solely used for error handling purposes. Discord currently doesn't allowAutocompleteHandlerExecuted
method.AutocompleteHandler dependencies are resolved using the same dependency injection
pattern as the Interaction Modules.
Property injection and constructor injection are both valid ways to get service dependencies.
Because [AutocompleterHandlers] are constructed at service startup,
class dependencies are resolved only once.
[!NOTE]
If you need to access per-request dependencies you can use the
IServiceProvider parameter of theGenerateSuggestionsAsync()
method.
[AutoCompleteAttribute]: