1+ from  collections  import  UserList 
12import  contextlib 
23import  uuid 
34from  abc  import  abstractmethod 
4- from  typing  import  Any , Dict , Iterator , List , Optional , Sequence , Union , TYPE_CHECKING 
5+ from  typing  import  Any , Dict , Iterator , List , Optional , Sequence , Union , TYPE_CHECKING , overload 
6+ from  typing_extensions  import  Self 
57
68import  attrs 
79import  discord_typings 
@@ -989,10 +991,12 @@ def to_dict(self) -> dict:
989991        }
990992
991993
992- class  ContainerComponent (BaseComponent ):
993-     components : list [
994+ class  ContainerComponent (
995+     BaseComponent ,
996+     UserList [
994997        ActionRow  |  SectionComponent  |  TextDisplayComponent  |  MediaGalleryComponent  |  FileComponent  |  SeparatorComponent 
995-     ]
998+     ],
999+ ):
9961000    accent_color : Optional [int ] =  None 
9971001    spoiler : bool  =  False 
9981002
@@ -1007,13 +1011,86 @@ def __init__(
10071011        accent_color : Optional [int ] =  None ,
10081012        spoiler : bool  =  False ,
10091013    ):
1010-         self .components  =  list (components )
1014+         self .data  =  list (components )
10111015        self .accent_color  =  accent_color 
10121016        self .spoiler  =  spoiler 
10131017        self .type  =  ComponentType .CONTAINER 
10141018
1019+     @property  
1020+     def  components (
1021+         self ,
1022+     ) ->  list [
1023+         ActionRow  |  SectionComponent  |  TextDisplayComponent  |  MediaGalleryComponent  |  FileComponent  |  SeparatorComponent 
1024+     ]:
1025+         return  self .data 
1026+ 
1027+     @components .setter  
1028+     def  components (
1029+         self ,
1030+         value : list [
1031+             ActionRow 
1032+             |  SectionComponent 
1033+             |  TextDisplayComponent 
1034+             |  MediaGalleryComponent 
1035+             |  FileComponent 
1036+             |  SeparatorComponent 
1037+         ],
1038+     ) ->  None :
1039+         self .data  =  value 
1040+ 
1041+     @overload  
1042+     def  __getitem__ (
1043+         self , i : int 
1044+     ) ->  (
1045+         ActionRow  |  SectionComponent  |  TextDisplayComponent  |  MediaGalleryComponent  |  FileComponent  |  SeparatorComponent 
1046+     ): ...
1047+ 
1048+     @overload  
1049+     def  __getitem__ (self , i : slice ) ->  Self : ...
1050+ 
1051+     def  __getitem__ (
1052+         self , i : int  |  slice 
1053+     ) ->  (
1054+         Self 
1055+         |  ActionRow 
1056+         |  SectionComponent 
1057+         |  TextDisplayComponent 
1058+         |  MediaGalleryComponent 
1059+         |  FileComponent 
1060+         |  SeparatorComponent 
1061+     ):
1062+         if  isinstance (i , slice ):
1063+             return  self .__class__ (* self .data [i ], accent_color = self .accent_color , spoiler = self .spoiler )
1064+         return  self .data [i ]
1065+ 
1066+     def  __add__ (self , other : Any ) ->  Self :
1067+         if  isinstance (other , ContainerComponent ):
1068+             return  self .__class__ (* (self .data  +  other .data ), accent_color = self .accent_color , spoiler = self .spoiler )
1069+         if  isinstance (other , UserList ):
1070+             return  self .__class__ (* (self .data  +  other .data ), accent_color = self .accent_color , spoiler = self .spoiler )
1071+         if  isinstance (other , type (self .data )):
1072+             return  self .__class__ (* (self .data  +  other ), accent_color = self .accent_color , spoiler = self .spoiler )
1073+         return  self .__class__ (* (self .data  +  list (other )), accent_color = self .accent_color , spoiler = self .spoiler )
1074+ 
1075+     def  __radd__ (self , other : Any ) ->  Self :
1076+         if  isinstance (other , ContainerComponent ):
1077+             return  self .__class__ (* (self .data  +  other .data ), accent_color = other .accent_color , spoiler = other .spoiler )
1078+         if  isinstance (other , UserList ):
1079+             return  self .__class__ (* (other .data  +  self .data ), accent_color = self .accent_color , spoiler = self .spoiler )
1080+         if  isinstance (other , type (self .data )):
1081+             return  self .__class__ (* (other  +  self .data ), accent_color = self .accent_color , spoiler = self .spoiler )
1082+         return  self .__class__ (* (list (other ) +  self .data ), accent_color = self .accent_color , spoiler = self .spoiler )
1083+ 
1084+     def  __mul__ (self , n : int ) ->  Self :
1085+         return  self .__class__ (* (self .data  *  n ), accent_color = self .accent_color , spoiler = self .spoiler )
1086+ 
1087+     __rmul__  =  __mul__ 
1088+ 
1089+     def  copy (self ) ->  Self :
1090+         return  self .__class__ (* self .data , accent_color = self .accent_color , spoiler = self .spoiler )
1091+ 
10151092    @classmethod  
1016-     def  from_dict (cls , data : dict ) ->  "ContainerComponent" :
1093+     def  from_dict (cls , data : dict ) ->  Self :
10171094        return  cls (
10181095            * [BaseComponent .from_dict_factory (component ) for  component  in  data ["components" ]],
10191096            accent_color = data .get ("accent_color" ),
0 commit comments