diff --git a/discord/guild.py b/discord/guild.py index 7d9e7a473..ff6d53516 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -3648,8 +3648,8 @@ class Guild(Hashable): hoist: bool = ..., display_icon: Union[bytes, str] = MISSING, mentionable: bool = ..., - secondary_colour: Union[Colour, int, None] = ..., - tertiary_colour: Union[Colour, int, None] = ..., + secondary_colour: Optional[Union[Colour, int]] = ..., + tertiary_colour: Optional[Union[Colour, int]] = ..., ) -> Role: ... @@ -3664,8 +3664,8 @@ class Guild(Hashable): hoist: bool = ..., display_icon: Union[bytes, str] = MISSING, mentionable: bool = ..., - secondary_color: Union[Colour, int, None] = ..., - tertiary_color: Union[Colour, int, None] = ..., + secondary_color: Optional[Union[Colour, int]] = ..., + tertiary_color: Optional[Union[Colour, int]] = ..., ) -> Role: ... @@ -3680,10 +3680,10 @@ class Guild(Hashable): display_icon: Union[bytes, str] = MISSING, mentionable: bool = MISSING, reason: Optional[str] = None, - secondary_color: Union[Colour, int, None] = MISSING, - tertiary_color: Union[Colour, int, None] = MISSING, - secondary_colour: Union[Colour, int, None] = MISSING, - tertiary_colour: Union[Colour, int, None] = MISSING, + secondary_color: Optional[Union[Colour, int]] = MISSING, + tertiary_color: Optional[Union[Colour, int]] = MISSING, + secondary_colour: Optional[Union[Colour, int]] = MISSING, + tertiary_colour: Optional[Union[Colour, int]] = MISSING, ) -> Role: """|coro| @@ -3712,9 +3712,9 @@ class Guild(Hashable): colour: Union[:class:`Colour`, :class:`int`] The colour for the role. Defaults to :meth:`Colour.default`. This is aliased to ``color`` as well. - secondary_colour: Union[:class:`Colour`, :class:`int`, None] + secondary_colour: Optional[Union[:class:`Colour`, :class:`int`]] The secondary colour for the role. - tertiary_colour: Union[:class:`Colour`, :class:`int`, None] + tertiary_colour: Optional[Union[:class:`Colour`, :class:`int`]] The tertiary colour for the role. Can only be used for the holographic role preset, which is ``(11127295, 16759788, 16761760)`` hoist: :class:`bool` @@ -3757,20 +3757,25 @@ class Guild(Hashable): else: fields['color'] = actual_colour.value - actual_secondary_colour = secondary_colour or secondary_color or Colour.default() + actual_secondary_colour = secondary_colour or secondary_color actual_tertiary_colour = tertiary_colour or tertiary_color - colours = { + + colours: Dict[str, Any] = { 'primary_color': fields['color'], } if actual_secondary_colour is not MISSING: - if isinstance(actual_secondary_colour, int): + if actual_secondary_colour is None: + colours['secondary_color'] = None + elif isinstance(actual_secondary_colour, int): colours['secondary_color'] = actual_secondary_colour else: colours['secondary_color'] = actual_secondary_colour.value - if actual_tertiary_colour is not MISSING and actual_tertiary_colour is not None: - if isinstance(actual_tertiary_colour, int): + if actual_tertiary_colour is not MISSING: + if actual_tertiary_colour is None: + colours['tertiary_color'] = None + elif isinstance(actual_tertiary_colour, int): colours['tertiary_color'] = actual_tertiary_colour else: colours['tertiary_color'] = actual_tertiary_colour.value diff --git a/discord/role.py b/discord/role.py index ed0bdf430..7f51782c5 100644 --- a/discord/role.py +++ b/discord/role.py @@ -287,8 +287,8 @@ class Role(Hashable): self.tags: Optional[RoleTags] self._flags: int = data.get('flags', 0) colors = data.get('colors', {}) - self._secondary_colour = colors.get('secondary_colour', None) - self._tertiary_colour = colors.get('tertiary_colour', None) + self._secondary_colour = colors.get('secondary_color', None) + self._tertiary_colour = colors.get('tertiary_color', None) try: self.tags = RoleTags(data['tags']) # pyright: ignore[reportTypedDictNotRequiredAccess] @@ -450,10 +450,10 @@ class Role(Hashable): mentionable: bool = MISSING, position: int = MISSING, reason: Optional[str] = MISSING, - secondary_color: Union[Colour, int, None] = MISSING, - tertiary_color: Union[Colour, int, None] = MISSING, - secondary_colour: Union[Colour, int, None] = MISSING, - tertiary_colour: Union[Colour, int, None] = MISSING, + secondary_color: Optional[Union[Colour, int]] = MISSING, + tertiary_color: Optional[Union[Colour, int]] = MISSING, + secondary_colour: Optional[Union[Colour, int]] = MISSING, + tertiary_colour: Optional[Union[Colour, int]] = MISSING, ) -> Optional[Role]: """|coro| @@ -484,9 +484,9 @@ class Role(Hashable): The new permissions to change to. colour: Union[:class:`Colour`, :class:`int`] The new colour to change to. (aliased to color as well) - secondary_colour: Union[:class:`Colour`, :class:`int`, None] + secondary_colour: Optional[Union[:class:`Colour`, :class:`int`]] The new secondary colour for the role. - tertiary_colour: Union[:class:`Colour`, :class:`int`, None] + tertiary_colour: Optional[Union[:class:`Colour`, :class:`int`]] The new tertiary colour for the role. Can only be used for the holographic role preset, which is ``(11127295, 16759788, 16761760)`` hoist: :class:`bool` @@ -553,7 +553,7 @@ class Role(Hashable): if mentionable is not MISSING: payload['mentionable'] = mentionable - colours = { + colours: Dict[str, Any] = { 'primary_color': payload['color'], } diff --git a/discord/types/guild.py b/discord/types/guild.py index 7ac90b89e..0e328fed2 100644 --- a/discord/types/guild.py +++ b/discord/types/guild.py @@ -90,6 +90,7 @@ GuildFeature = Literal[ 'VERIFIED', 'VIP_REGIONS', 'WELCOME_SCREEN_ENABLED', + 'ENHANCED_ROLE_COLORS', 'RAID_ALERTS_DISABLED', 'SOUNDBOARD', 'MORE_SOUNDBOARD', diff --git a/discord/types/role.py b/discord/types/role.py index 9614aa07a..dabd1c1cf 100644 --- a/discord/types/role.py +++ b/discord/types/role.py @@ -30,12 +30,17 @@ from typing_extensions import NotRequired from .snowflake import Snowflake +class RoleColours(TypedDict): + primary_color: int + secondary_color: Optional[int] + tertiary_color: Optional[int] + + class Role(TypedDict): id: Snowflake name: str color: int - secondary_color: NotRequired[Optional[int]] - tertiary_color: NotRequired[Optional[int]] + colors: RoleColours hoist: bool position: int permissions: str