@@ -311,13 +311,47 @@ def _dispatch_event(self, event: str, data: dict) -> None: # sourcery no-metric
311311
312312 if _context .data ._json .get ("options" ):
313313 for option in _context .data .options :
314-
315- if option .focused :
316- __name , _value = self .__sub_command_context (option , _context )
317- _name += f"_{ __name } " if __name else ""
318-
319- if _value :
320- __args .append (_value )
314+ if isinstance (option , dict ):
315+ option = Option (** option )
316+ if option .type not in (
317+ OptionType .SUB_COMMAND ,
318+ OptionType .SUB_COMMAND_GROUP ,
319+ ):
320+ if option .focused :
321+ __name , _value = self .__sub_command_context (option , _context )
322+ _name += f"_{ __name } " if __name else ""
323+ if _value :
324+ __args .append (_value )
325+
326+ elif option .type == OptionType .SUB_COMMAND :
327+ for _option in option .options :
328+ if isinstance (_option , dict ):
329+ _option = Option (** _option )
330+ if _option .focused :
331+ __name , _value = self .__sub_command_context (
332+ _option , _context
333+ )
334+ _name += f"_{ __name } " if __name else ""
335+ if _value :
336+ __args .append (_value )
337+ break
338+
339+ elif option .type == OptionType .SUB_COMMAND_GROUP :
340+ for _option in option .options :
341+ if isinstance (_option , dict ):
342+ _option = Option (** _option )
343+ for __option in _option .options :
344+ if isinstance (__option , dict ):
345+ __option = Option (** __option )
346+ if __option .focused :
347+ __name , _value = self .__sub_command_context (
348+ __option , _context
349+ )
350+ _name += f"_{ __name } " if __name else ""
351+ if _value :
352+ __args .append (_value )
353+ break
354+ break
321355 break
322356
323357 self ._dispatch .dispatch ("on_autocomplete" , _context )
0 commit comments