@@ -310,17 +310,23 @@ def _dispatch_event(self, event: str, data: dict) -> None:
310
310
311
311
if _context .data ._json .get ("options" ):
312
312
for option in _context .data .options :
313
- __kwargs .update (self .__sub_command_context (option ))
314
- __kwargs .update (
315
- self .__option_type_context (
316
- _context ,
317
- (
318
- option ["type" ]
319
- if isinstance (option , dict )
320
- else option .type .value
321
- ),
322
- )
313
+ _type = self .__option_type_context (
314
+ _context ,
315
+ (
316
+ option ["type" ]
317
+ if isinstance (option , dict )
318
+ else option .type .value
319
+ ),
323
320
)
321
+ if _type :
322
+ if isinstance (option , dict ):
323
+ _type [option ["value" ]]._client = self ._http
324
+ option .update ({"value" : _type [option ["value" ]]})
325
+ else :
326
+ _type [option .value ]._client = self ._http
327
+ option ._json .update ({"value" : _type [option .value ]})
328
+ _option = self .__sub_command_context (option , _context )
329
+ __kwargs .update (_option )
324
330
325
331
self ._dispatch .dispatch ("on_command" , _context )
326
332
elif data ["type" ] == InteractionType .MESSAGE_COMPONENT :
@@ -390,7 +396,9 @@ def __contextualize(self, data: dict) -> object:
390
396
context : object = getattr (__import__ ("interactions.context" ), _context )
391
397
return context (** data )
392
398
393
- def __sub_command_context (self , data : Union [dict , Option ]) -> Union [Tuple [str ], dict ]:
399
+ def __sub_command_context (
400
+ self , data : Union [dict , Option ], _context : Optional [object ] = MISSING
401
+ ) -> Union [Tuple [str ], dict ]:
394
402
"""
395
403
Checks if an application command schema has sub commands
396
404
needed for argument collection.
@@ -404,23 +412,62 @@ def __sub_command_context(self, data: Union[dict, Option]) -> Union[Tuple[str],
404
412
_data : dict = data ._json if isinstance (data , Option ) else data
405
413
406
414
def _check_auto (option : dict ) -> Optional [Tuple [str ]]:
407
- if option .get ("focused" ):
408
- return (option ["name" ], option ["value" ])
415
+ try :
416
+ if option .get ("focused" ):
417
+ return (option ["name" ], option ["value" ])
418
+ except AttributeError :
419
+ return False
409
420
410
421
x = _check_auto (_data )
411
422
if x :
412
423
return x
413
424
if _data .get ("options" ):
414
- for option in _data ["options" ]:
415
- if option ["type" ] == OptionType .SUB_COMMAND :
416
- for sub_option in _data ["options" ]:
425
+ if _data ["type" ] == OptionType .SUB_COMMAND :
426
+ __kwargs ["sub_command" ] = _data ["name" ]
427
+ for sub_option in _data ["options" ]:
428
+ _check_auto (sub_option )
429
+ _option_context = self .__option_type_context (
430
+ _context ,
431
+ (
432
+ sub_option ["type" ]
433
+ if isinstance (sub_option , dict )
434
+ else sub_option .type .value
435
+ ),
436
+ )
437
+ if _option_context :
438
+ if isinstance (sub_option , dict ):
439
+ _option_context [sub_option ["value" ]]._client = self ._http
440
+ sub_option .update ({"value" : _option_context [sub_option ["value" ]]})
441
+ else :
442
+ _option_context [sub_option .value ]._client = self ._http
443
+ sub_option ._json .update ({"value" : _option_context [sub_option .value ]})
444
+ __kwargs [sub_option ["name" ]] = sub_option ["value" ]
445
+ elif _data ["type" ] == OptionType .SUB_COMMAND_GROUP :
446
+ __kwargs ["sub_command_group" ] = _data ["name" ]
447
+ for _group_option in _data ["options" ]:
448
+ _check_auto (_group_option )
449
+ __kwargs ["sub_command" ] = _group_option ["name" ]
450
+ for sub_option in _group_option ["options" ]:
417
451
_check_auto (sub_option )
452
+ _option_context = self .__option_type_context (
453
+ _context ,
454
+ (
455
+ sub_option ["type" ]
456
+ if isinstance (sub_option , dict )
457
+ else sub_option .type .value
458
+ ),
459
+ )
460
+ if _option_context :
461
+ if isinstance (sub_option , dict ):
462
+ _option_context [sub_option ["value" ]]._client = self ._http
463
+ sub_option .update ({"value" : _option_context [sub_option ["value" ]]})
464
+ else :
465
+ _option_context [sub_option .value ]._client = self ._http
466
+ sub_option ._json .update (
467
+ {"value" : _option_context [sub_option .value ]}
468
+ )
418
469
__kwargs [sub_option ["name" ]] = sub_option ["value" ]
419
- else :
420
- for group in _data ["options" ]:
421
- for _group_option in group :
422
- _check_auto (_group_option )
423
- __kwargs [_group_option ["name" ]] = _group_option ["value" ]
470
+
424
471
elif _data .get ("value" ) and _data .get ("name" ):
425
472
__kwargs [_data ["name" ]] = _data ["value" ]
426
473
0 commit comments