Skip to content

Commit

Permalink
cmdroute: Fix Autocompleter handling (#423)
Browse files Browse the repository at this point in the history
* handle group with cmdroute/autocompleter

* handle autocompleter: find all options
  • Loading branch information
patyhank committed Mar 19, 2024
1 parent 5089b62 commit 529272a
Showing 1 changed file with 26 additions and 3 deletions.
29 changes: 26 additions & 3 deletions api/cmdroute/router.go
Expand Up @@ -316,18 +316,42 @@ type autocompleterData struct {
data discord.AutocompleteOption
}

// findAutocompleter finds the autocomplete handler for the given option name.
// It checks the current router and its groups.
func (r *Router) findAutocompleter(ev *discord.InteractionEvent, data discord.AutocompleteOption) (autocompleterData, bool) {
found, ok := r.findAutocompleterOnce(ev, data)
if ok {
return found, true
}

for _, sub := range r.groups {
found, ok = sub.findAutocompleterOnce(ev, data)
if ok {
return found, true
}
}

return autocompleterData{}, false
}

// findAutocompleter finds the autocomplete handler for the given option name.
// It only checks the current router and not its groups.
func (r *Router) findAutocompleterOnce(ev *discord.InteractionEvent, data discord.AutocompleteOption) (autocompleterData, bool) {
node, ok := r.nodes[data.Name]
if !ok {
return autocompleterData{}, false
}

switch node := node.(type) {
case routeNodeSub:
if len(data.Options) != 1 || data.Type != discord.SubcommandGroupOptionType {
break
}
return node.findAutocompleter(ev, data.Options[0])
for _, option := range data.Options {
found, ok := node.findAutocompleter(ev, option)
if ok {
return found, true
}
}
case routeNodeCommand:
if node.autocomplete == nil {
break
Expand All @@ -341,7 +365,6 @@ func (r *Router) findAutocompleter(ev *discord.InteractionEvent, data discord.Au
data: data,
}, true
}

return autocompleterData{}, false
}

Expand Down

0 comments on commit 529272a

Please sign in to comment.