3030from typing import TYPE_CHECKING , Callable , TypeVar
3131
3232from ..channel import _threaded_guild_channel_factory
33- from ..components import SelectMenu , SelectOption , SelectDefaultValue
33+ from ..components import SelectDefaultValue , SelectMenu , SelectOption
3434from ..emoji import AppEmoji , GuildEmoji
3535from ..enums import ChannelType , ComponentType , SelectMenuDefaultValueType
3636from ..errors import InvalidArgument
@@ -120,7 +120,7 @@ class Select(Item[V]):
120120 "options" ,
121121 "channel_types" ,
122122 "disabled" ,
123- "default_values"
123+ "default_values" ,
124124 )
125125
126126 def __init__ (
@@ -135,7 +135,10 @@ def __init__(
135135 channel_types : list [ChannelType ] | None = None ,
136136 disabled : bool = False ,
137137 row : int | None = None ,
138- default_values : list [User | Member | Role | GuildChannel | Thread | SelectDefaultValue ] | None = None ,
138+ default_values : (
139+ list [User | Member | Role | GuildChannel | Thread | SelectDefaultValue ]
140+ | None
141+ ) = None ,
139142 ) -> None :
140143 if options and select_type is not ComponentType .string_select :
141144 raise InvalidArgument ("options parameter is only valid for string selects" )
@@ -145,41 +148,60 @@ def __init__(
145148 )
146149 _default_values = []
147150 if default_values and select_type is ComponentType .string_select :
148- raise InvalidArgument ("default_values parameter is only valid for user/role/channel/mentionable selects" )
151+ raise InvalidArgument (
152+ "default_values parameter is only valid for user/role/channel/mentionable selects"
153+ )
149154 if default_values and select_type is ComponentType .role_select :
150155 for r in default_values :
151156 if not isinstance (r , Role ):
152- raise ValueError (f"default_values must be a list of Role objects, not { r .__class__ .__name__ } " )
153- _default_values .append (SelectDefaultValue (
154- id = r .id ,
155- type = SelectMenuDefaultValueType .Role ))
157+ raise ValueError (
158+ f"default_values must be a list of Role objects, not { r .__class__ .__name__ } "
159+ )
160+ _default_values .append (
161+ SelectDefaultValue (id = r .id , type = SelectMenuDefaultValueType .Role )
162+ )
156163 if default_values and select_type is ComponentType .user_select :
157164 for u in default_values :
158165 if not isinstance (u , (User , Member )):
159- raise ValueError (f"default_values must be a list of User/Member objects, "
160- f"not { u .__class__ .__name__ } " )
161- _default_values .append (SelectDefaultValue (
162- id = u .id ,
163- type = SelectMenuDefaultValueType .User ))
166+ raise ValueError (
167+ f"default_values must be a list of User/Member objects, "
168+ f"not { u .__class__ .__name__ } "
169+ )
170+ _default_values .append (
171+ SelectDefaultValue (id = u .id , type = SelectMenuDefaultValueType .User )
172+ )
164173 if default_values and select_type is ComponentType .channel_select :
165174 for c in default_values :
166175 if not isinstance (c , GuildChannel ):
167- raise ValueError (f"default_values must be a list of GuildChannel objects, "
168- f"not { c .__class__ .__name__ } " )
176+ raise ValueError (
177+ f"default_values must be a list of GuildChannel objects, "
178+ f"not { c .__class__ .__name__ } "
179+ )
169180 if channel_types and c .type not in channel_types :
170- raise ValueError (f"default_values must be a list of channels of type { channel_types } , "
171- f"not { c .__class__ .__name__ } " )
172- _default_values .append (SelectDefaultValue (
173- id = c .id ,
174- type = SelectMenuDefaultValueType .Channel ))
181+ raise ValueError (
182+ f"default_values must be a list of channels of type { channel_types } , "
183+ f"not { c .__class__ .__name__ } "
184+ )
185+ _default_values .append (
186+ SelectDefaultValue (id = c .id , type = SelectMenuDefaultValueType .Channel )
187+ )
175188 if default_values and select_type is ComponentType .mentionable_select :
176189 for m in default_values :
177190 if not isinstance (m , (User , Member , Role )):
178- raise ValueError (f"default_values must be a list of User/Member/Role objects, "
179- f"not { m .__class__ .__name__ } " )
180- _default_values .append (SelectDefaultValue (
181- id = m .id ,
182- type = SelectMenuDefaultValueType .Role if isinstance (m , Role ) else SelectMenuDefaultValueType .User ))
191+ raise ValueError (
192+ f"default_values must be a list of User/Member/Role objects, "
193+ f"not { m .__class__ .__name__ } "
194+ )
195+ _default_values .append (
196+ SelectDefaultValue (
197+ id = m .id ,
198+ type = (
199+ SelectMenuDefaultValueType .Role
200+ if isinstance (m , Role )
201+ else SelectMenuDefaultValueType .User
202+ ),
203+ )
204+ )
183205 super ().__init__ ()
184206 self ._selected_values : list [str ] = []
185207 self ._interaction : Interaction | None = None
@@ -372,7 +394,9 @@ def default_values(self) -> list[SelectDefaultValue]:
372394 @default_values .setter
373395 def default_values (self , value : list [SelectDefaultValue ]):
374396 if self ._underlying .type is ComponentType .string_select :
375- raise InvalidArgument ("default_values can only be set on non string selects" )
397+ raise InvalidArgument (
398+ "default_values can only be set on non string selects"
399+ )
376400 if not isinstance (value , list ):
377401 raise TypeError ("options must be a list of SelectDefaultValue" )
378402 if not all (isinstance (obj , SelectDefaultValue ) for obj in value ):
@@ -381,70 +405,87 @@ def default_values(self, value: list[SelectDefaultValue]):
381405 self ._underlying .default_values = value
382406
383407 def add_default_value (
384- self ,
385- * ,
386- default_value : User | Member | Role | GuildChannel | Thread ,
408+ self ,
409+ * ,
410+ default_value : User | Member | Role | GuildChannel | Thread ,
387411 ):
388412 """Adds a default value to the select menu.
389413
390- To append a pre-existing :class:`discord.SelectDefaultValue` use the
391- :meth:`append_default_value` method instead.
392-
393- Parameters
394- ----------
395- default_value: Union[:class:`discord.User`, :class:`discord.Member`, :class:`discord.Role`,
396- :class:`discord.abc.GuildChannel`, :class:`discord.Thread`]
397- The to be added default value
398-
399-
400- Raises
401- ------
402- ValueError
403- The number of options exceeds 25.
404- """
414+ To append a pre-existing :class:`discord.SelectDefaultValue` use the
415+ :meth:`append_default_value` method instead.
416+
417+ Parameters
418+ ----------
419+ default_value: Union[:class:`discord.User`, :class:`discord.Member`, :class:`discord.Role`,
420+ :class:`discord.abc.GuildChannel`, :class:`discord.Thread`]
421+ The to be added default value
422+
423+ Raises
424+ ------
425+ ValueError
426+ The number of options exceeds 25.
427+ """
405428 if self ._underlying .type is ComponentType .string_select :
406429 raise Exception ("default values can only be set on non string selects" )
407430 default_value_type = None
408- if self .type is ComponentType .channel_select and not isinstance (default_value , (GuildChannel , Thread )):
409- raise InvalidArgument ("default values have to be of type GuildChannel or Thread" )
431+ if self .type is ComponentType .channel_select and not isinstance (
432+ default_value , (GuildChannel , Thread )
433+ ):
434+ raise InvalidArgument (
435+ "default values have to be of type GuildChannel or Thread"
436+ )
410437 elif self .type is ComponentType .channel_select :
411438 default_value_type = SelectMenuDefaultValueType .Channel
412- if self .type is ComponentType .user_select and not isinstance (default_value , (User , Member )):
439+ if self .type is ComponentType .user_select and not isinstance (
440+ default_value , (User , Member )
441+ ):
413442 raise InvalidArgument ("default values have to be of type User or Member" )
414443 elif self .type is ComponentType .user_select :
415444 default_value_type = SelectMenuDefaultValueType .User
416- if self .type is ComponentType .role_select and not isinstance (default_value , Role ):
445+ if self .type is ComponentType .role_select and not isinstance (
446+ default_value , Role
447+ ):
417448 raise InvalidArgument ("default values have to be of type Role" )
418449 elif self .type is ComponentType .role_select :
419450 default_value_type = SelectMenuDefaultValueType .Role
420- if self .type is ComponentType .mentionable_select and not isinstance (default_value , (User , Member , Role )):
421- raise InvalidArgument ("default values have to be of type User, Member or Role" )
422- elif self .type is ComponentType .mentionable_select and isinstance (default_value , (User , Member )):
451+ if self .type is ComponentType .mentionable_select and not isinstance (
452+ default_value , (User , Member , Role )
453+ ):
454+ raise InvalidArgument (
455+ "default values have to be of type User, Member or Role"
456+ )
457+ elif self .type is ComponentType .mentionable_select and isinstance (
458+ default_value , (User , Member )
459+ ):
423460 default_value_type = SelectMenuDefaultValueType .User
424- elif self .type is ComponentType .mentionable_select and isinstance (default_value , Role ):
461+ elif self .type is ComponentType .mentionable_select and isinstance (
462+ default_value , Role
463+ ):
425464 default_value_type = SelectMenuDefaultValueType .Role
426465 if default_value_type is None :
427- raise InvalidArgument ("default values have to be of type User, Member, Role or GuildChannel" )
466+ raise InvalidArgument (
467+ "default values have to be of type User, Member, Role or GuildChannel"
468+ )
428469 default_value = SelectDefaultValue (
429- id = default_value .id ,
430- type = default_value_type ,
470+ id = default_value .id ,
471+ type = default_value_type ,
431472 )
432473
433474 self .append_default_value (default_value )
434475
435476 def append_default_value (self , default_value : SelectDefaultValue ):
436477 """Appends a default value to the select menu.
437478
438- Parameters
439- ----------
440- default_value: :class:`discord.SelectDefaultValue`
441- The default value to append to the select menu.
479+ Parameters
480+ ----------
481+ default_value: :class:`discord.SelectDefaultValue`
482+ The default value to append to the select menu.
442483
443- Raises
444- ------
445- ValueError
446- The number of options exceeds 25.
447- """
484+ Raises
485+ ------
486+ ValueError
487+ The number of options exceeds 25.
488+ """
448489 if self ._underlying .type is ComponentType .string_select :
449490 raise Exception ("default values can only be set on string selects" )
450491
@@ -647,7 +688,9 @@ def select(
647688 raise TypeError ("options may only be specified for string selects" )
648689
649690 if default_values is not MISSING and select_type is ComponentType .string_select :
650- raise TypeError ("default_values may only be specified for user/role/channel/mentionable selects" )
691+ raise TypeError (
692+ "default_values may only be specified for user/role/channel/mentionable selects"
693+ )
651694
652695 if channel_types is not MISSING and select_type is not ComponentType .channel_select :
653696 raise TypeError ("channel_types may only be specified for channel selects" )
@@ -754,7 +797,7 @@ def role_select(
754797 max_values = max_values ,
755798 disabled = disabled ,
756799 row = row ,
757- default_values = default_values
800+ default_values = default_values ,
758801 )
759802
760803
0 commit comments