@@ -316,18 +316,42 @@ type autocompleterData struct {
316
316
data discord.AutocompleteOption
317
317
}
318
318
319
+ // findAutocompleter finds the autocomplete handler for the given option name.
320
+ // It checks the current router and its groups.
319
321
func (r * Router ) findAutocompleter (ev * discord.InteractionEvent , data discord.AutocompleteOption ) (autocompleterData , bool ) {
322
+ found , ok := r .findAutocompleterOnce (ev , data )
323
+ if ok {
324
+ return found , true
325
+ }
326
+
327
+ for _ , sub := range r .groups {
328
+ found , ok = sub .findAutocompleterOnce (ev , data )
329
+ if ok {
330
+ return found , true
331
+ }
332
+ }
333
+
334
+ return autocompleterData {}, false
335
+ }
336
+
337
+ // findAutocompleter finds the autocomplete handler for the given option name.
338
+ // It only checks the current router and not its groups.
339
+ func (r * Router ) findAutocompleterOnce (ev * discord.InteractionEvent , data discord.AutocompleteOption ) (autocompleterData , bool ) {
320
340
node , ok := r .nodes [data .Name ]
321
341
if ! ok {
322
342
return autocompleterData {}, false
323
343
}
324
-
325
344
switch node := node .(type ) {
326
345
case routeNodeSub :
327
346
if len (data .Options ) != 1 || data .Type != discord .SubcommandGroupOptionType {
328
347
break
329
348
}
330
- return node .findAutocompleter (ev , data .Options [0 ])
349
+ for _ , option := range data .Options {
350
+ found , ok := node .findAutocompleter (ev , option )
351
+ if ok {
352
+ return found , true
353
+ }
354
+ }
331
355
case routeNodeCommand :
332
356
if node .autocomplete == nil {
333
357
break
@@ -341,7 +365,6 @@ func (r *Router) findAutocompleter(ev *discord.InteractionEvent, data discord.Au
341
365
data : data ,
342
366
}, true
343
367
}
344
-
345
368
return autocompleterData {}, false
346
369
}
347
370
0 commit comments