public override Task <AutocompletionResult> GenerateSuggestionsAsync( IInteractionContext context, IAutocompleteInteraction autocompleteInteraction, IParameterInfo parameter, IServiceProvider services ) { var input = autocompleteInteraction.Data.Current.Value as string; var matches = _cmdHelpService.GetCmdsStartsWithInput(context.User, input) .Select(cmd => { if (cmd is CommandInfo regCmdInfo) { return(regCmdInfo.Name); } else { return((cmd as IApplicationCommandInfo)?.Name); } }) .Distinct() .PartialSort(25); var results = AutocompletionResult.FromSuccess(matches.Select(cmdName => new AutocompleteResult(cmdName, cmdName))); return(Task.FromResult(results)); }
public override async Task <AutocompletionResult> GenerateSuggestionsAsync( IInteractionContext context, IAutocompleteInteraction autocompleteInteraction, IParameterInfo parameter, IServiceProvider services ) { var input = autocompleteInteraction.Data.Current.Value as string; if (string.IsNullOrEmpty(input)) { return(AutocompletionResult.FromSuccess()); } var archetypes = await _yugiohDbService.GetArchetypesAutocompleteAsync(input); return(AutocompletionResult.FromSuccess(archetypes.Select(archetype => new AutocompleteResult(archetype, archetype)))); }
public override async Task <AutocompletionResult> GenerateSuggestionsAsync( IInteractionContext context, IAutocompleteInteraction autocompleteInteraction, IParameterInfo parameter, IServiceProvider services ) { var input = (string)autocompleteInteraction.Data.Current.Value; if (string.IsNullOrEmpty(input)) { return(AutocompletionResult.FromSuccess()); } var results = await _yuGiOhDbService.GetBoosterPacksAutocompleteAsync(input); return(AutocompletionResult.FromSuccess(results.Select(result => new AutocompleteResult(result, result)))); }
/// <inheritdoc/> public async Task <IResult> ExecuteAsync(IInteractionContext context, IAutocompleteInteraction autocompleteInteraction, IParameterInfo parameter, IServiceProvider services) { switch (InteractionService._runMode) { case RunMode.Sync: { return(await ExecuteInternalAsync(context, autocompleteInteraction, parameter, services).ConfigureAwait(false)); } case RunMode.Async: _ = Task.Run(async() => { await ExecuteInternalAsync(context, autocompleteInteraction, parameter, services).ConfigureAwait(false); }); break; default: throw new InvalidOperationException($"RunMode {InteractionService._runMode} is not supported."); } return(ExecuteResult.FromSuccess()); }
public override Task <AutocompletionResult> GenerateSuggestionsAsync(IInteractionContext context, IAutocompleteInteraction autocompleteInteraction, IParameterInfo parameter, IServiceProvider services) { string filter = autocompleteInteraction.Data.Current.Value.ToString(); List <SlashCommandInfo> slashCommands = InteractionService.SlashCommands.Where(x => !x.Name.Equals(HELP_COMMAND, StringComparison.OrdinalIgnoreCase)).OrderBy(x => x.Name).ToList(); if (!string.IsNullOrWhiteSpace(filter)) { slashCommands = slashCommands.Where(x => x.Name.Contains(filter, StringComparison.OrdinalIgnoreCase)).Take(MAX_AUTOCOMPLETE_RESULTS).OrderBy(x => x.Name).ToList(); } else { slashCommands = slashCommands.Take(MAX_AUTOCOMPLETE_RESULTS).ToList(); } IEnumerable <AutocompleteResult> autocompletionCollection = slashCommands.Select(x => new AutocompleteResult(x.Name, x.Name)); return(Task.FromResult(AutocompletionResult.FromSuccess(autocompletionCollection))); }
public override async Task <AutocompletionResult> GenerateSuggestionsAsync(IInteractionContext context, IAutocompleteInteraction autocompleteInteraction, IParameterInfo parameter, IServiceProvider services) { string filter = autocompleteInteraction.Data.Current.Value.ToString(); List <CryptoCodeResponse> currencyCodes = await CryptoService.GetCryptoCodeList(); if (!string.IsNullOrWhiteSpace(filter)) { List <CryptoCodeResponse> currencyCodesBySymbol = currencyCodes.Where(x => x.Symbol.Equals(filter, StringComparison.OrdinalIgnoreCase)).ToList(); if (!currencyCodesBySymbol.Any()) { currencyCodesBySymbol = currencyCodes.Where(x => x.Symbol.Contains(filter, StringComparison.OrdinalIgnoreCase)).ToList(); } List <CryptoCodeResponse> currencyCodesByName = currencyCodes.Where(x => x.Name.Contains(filter, StringComparison.OrdinalIgnoreCase)).ToList(); currencyCodes = currencyCodesBySymbol.Union(currencyCodesByName).Take(MAX_AUTOCOMPLETE_RESULTS).ToList(); } else { currencyCodes = currencyCodes.Take(MAX_AUTOCOMPLETE_RESULTS).ToList(); } IEnumerable <AutocompleteResult> autocompletionCollection = currencyCodes.Select(x => new AutocompleteResult($"[{x.Symbol.ToUpper()}] {x.Name}", x.Code)).OrderBy(x => x.Name); return(AutocompletionResult.FromSuccess(autocompletionCollection)); }
public override Task <AutocompletionResult> GenerateSuggestionsAsync(IInteractionContext context, IAutocompleteInteraction autocompleteInteraction, IParameterInfo parameter, IServiceProvider services) { var settings = services.GetRequiredService <Settings>(); var test = autocompleteInteraction.Data.Current.Value.ToString(); if (string.IsNullOrEmpty(test)) { var results = settings.Sources.Select(x => new AutocompleteResult(x.FriendlyName, x.FriendlyName)); return(Task.FromResult(AutocompletionResult.FromSuccess(results.Take(25)))); } else { // Note: This could be optimised. var results = settings.Sources.Where(x => x.FriendlyName.Contains(test, StringComparison.OrdinalIgnoreCase)) .OrderBy(entry => entry.FriendlyName) .Select(x => new AutocompleteResult(x.FriendlyName, x.FriendlyName)); return(Task.FromResult(AutocompletionResult.FromSuccess(results.Take(25)))); } }
public override async Task <AutocompletionResult> GenerateSuggestionsAsync(IInteractionContext context, IAutocompleteInteraction autocompleteInteraction, IParameterInfo parameter, IServiceProvider services) { // Create a collection with suggestions for autocomplete IEnumerable <AutocompleteResult> results = new[] { new AutocompleteResult("Name1", "value111"), new AutocompleteResult("Name2", "value2") }; // max - 25 suggestions at a time (API limit) return(AutocompletionResult.FromSuccess(results.Take(25))); }
private async Task <IResult> ExecuteInternalAsync(IInteractionContext context, IAutocompleteInteraction autocompleteInteraction, IParameterInfo parameter, IServiceProvider services) { try { var result = await GenerateSuggestionsAsync(context, autocompleteInteraction, parameter, services).ConfigureAwait(false); if (result.IsSuccess) { switch (autocompleteInteraction) { case RestAutocompleteInteraction restAutocomplete: var payload = restAutocomplete.Respond(result.Suggestions); if (context is IRestInteractionContext restContext && restContext.InteractionResponseCallback != null) { await restContext.InteractionResponseCallback.Invoke(payload).ConfigureAwait(false); } else { await InteractionService._restResponseCallback(context, payload).ConfigureAwait(false); } break; case SocketAutocompleteInteraction socketAutocomplete: await socketAutocomplete.RespondAsync(result.Suggestions).ConfigureAwait(false); break; }
/// <inheritdoc/> public abstract Task <AutocompletionResult> GenerateSuggestionsAsync(IInteractionContext context, IAutocompleteInteraction autocompleteInteraction, IParameterInfo parameter, IServiceProvider services);
public override async Task <AutocompletionResult> GenerateSuggestionsAsync(IInteractionContext context, IAutocompleteInteraction autocompleteInteraction, IParameterInfo parameter, IServiceProvider services) { string filter = autocompleteInteraction.Data.Current.Value.ToString(); List <WorldCurrencyCodeResponse> currencyCodes = await FiatCurrencyService.GetWorldCurrenciesList(); if (!string.IsNullOrWhiteSpace(filter)) { currencyCodes = currencyCodes.Where(x => x.Code.Contains(filter, StringComparison.OrdinalIgnoreCase) || x.Name.Contains(filter, StringComparison.OrdinalIgnoreCase)) .Take(MAX_AUTOCOMPLETE_RESULTS) .ToList(); } else { currencyCodes = currencyCodes.Take(MAX_AUTOCOMPLETE_RESULTS).ToList(); } IEnumerable <AutocompleteResult> autocompletionCollection = currencyCodes.Select(x => new AutocompleteResult($"{x.Code} ({x.Name})", x.Code)).OrderBy(x => x.Name).ToList(); return(AutocompletionResult.FromSuccess(autocompletionCollection)); }