|
|
@ -222,6 +222,8 @@ class Role(Hashable): |
|
|
|
'tags', |
|
|
|
'_flags', |
|
|
|
'_state', |
|
|
|
'_secondary_colour', |
|
|
|
'_tertiary_colour', |
|
|
|
) |
|
|
|
|
|
|
|
def __init__(self, *, guild: Guild, state: ConnectionState, data: RolePayload): |
|
|
@ -273,10 +275,11 @@ class Role(Hashable): |
|
|
|
return not r |
|
|
|
|
|
|
|
def _update(self, data: RolePayload): |
|
|
|
colors = data.get('colors', {}) |
|
|
|
self.name: str = data['name'] |
|
|
|
self._permissions: int = int(data.get('permissions', 0)) |
|
|
|
self.position: int = data.get('position', 0) |
|
|
|
self._colour: int = data.get('color', 0) |
|
|
|
self._colour: int = colors.get('primary_color', 0) |
|
|
|
self.hoist: bool = data.get('hoist', False) |
|
|
|
self._icon: Optional[str] = data.get('icon') |
|
|
|
self.unicode_emoji: Optional[str] = data.get('unicode_emoji') |
|
|
@ -284,6 +287,8 @@ class Role(Hashable): |
|
|
|
self.mentionable: bool = data.get('mentionable', False) |
|
|
|
self.tags: Optional[RoleTags] |
|
|
|
self._flags: int = data.get('flags', 0) |
|
|
|
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] |
|
|
@ -323,6 +328,38 @@ class Role(Hashable): |
|
|
|
me = self.guild.me |
|
|
|
return not self.is_default() and not self.managed and (me.top_role > self or me.id == self.guild.owner_id) |
|
|
|
|
|
|
|
@property |
|
|
|
def secondary_colour(self) -> Optional[Colour]: |
|
|
|
"""Optional[:class:`Colour`]: The role's secondary colour. |
|
|
|
|
|
|
|
.. versionadded:: 2.6 |
|
|
|
""" |
|
|
|
return Colour(self._secondary_colour) if self._secondary_colour is not None else None |
|
|
|
|
|
|
|
@property |
|
|
|
def secondary_color(self) -> Optional[Colour]: |
|
|
|
"""Optional[:class:`Colour`]: Alias for :attr:`secondary_colour`. |
|
|
|
|
|
|
|
.. versionadded:: 2.6 |
|
|
|
""" |
|
|
|
return self.secondary_colour |
|
|
|
|
|
|
|
@property |
|
|
|
def tertiary_colour(self) -> Optional[Colour]: |
|
|
|
"""Optional[:class:`Colour`]: The role's tertiary colour. |
|
|
|
|
|
|
|
.. versionadded:: 2.6 |
|
|
|
""" |
|
|
|
return Colour(self._tertiary_colour) if self._tertiary_colour is not None else None |
|
|
|
|
|
|
|
@property |
|
|
|
def tertiary_color(self) -> Optional[Colour]: |
|
|
|
"""Optional[:class:`Colour`]: Alias for :attr:`tertiary_colour`. |
|
|
|
|
|
|
|
.. versionadded:: 2.6 |
|
|
|
""" |
|
|
|
return self.tertiary_colour |
|
|
|
|
|
|
|
@property |
|
|
|
def permissions(self) -> Permissions: |
|
|
|
""":class:`Permissions`: Returns the role's permissions.""" |
|
|
@ -330,12 +367,12 @@ class Role(Hashable): |
|
|
|
|
|
|
|
@property |
|
|
|
def colour(self) -> Colour: |
|
|
|
""":class:`Colour`: Returns the role colour. An alias exists under ``color``.""" |
|
|
|
""":class:`Colour`: Returns the role's primary colour. An alias exists under ``color``.""" |
|
|
|
return Colour(self._colour) |
|
|
|
|
|
|
|
@property |
|
|
|
def color(self) -> Colour: |
|
|
|
""":class:`Colour`: Returns the role color. An alias exists under ``colour``.""" |
|
|
|
""":class:`Colour`: Returns the role's primary colour. An alias exists under ``colour``.""" |
|
|
|
return self.colour |
|
|
|
|
|
|
|
@property |
|
|
@ -425,6 +462,10 @@ class Role(Hashable): |
|
|
|
mentionable: bool = MISSING, |
|
|
|
position: int = MISSING, |
|
|
|
reason: Optional[str] = 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| |
|
|
|
|
|
|
@ -447,6 +488,9 @@ class Role(Hashable): |
|
|
|
This function will now raise :exc:`ValueError` instead of |
|
|
|
``InvalidArgument``. |
|
|
|
|
|
|
|
.. versionchanged:: 2.6 |
|
|
|
The ``colour`` and ``color`` parameters now set the role's primary color. |
|
|
|
|
|
|
|
Parameters |
|
|
|
----------- |
|
|
|
name: :class:`str` |
|
|
@ -455,6 +499,15 @@ 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: Optional[Union[:class:`Colour`, :class:`int`]] |
|
|
|
The new secondary colour for the role. |
|
|
|
|
|
|
|
.. versionadded:: 2.6 |
|
|
|
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)`` |
|
|
|
|
|
|
|
.. versionadded:: 2.6 |
|
|
|
hoist: :class:`bool` |
|
|
|
Indicates if the role should be shown separately in the member list. |
|
|
|
display_icon: Optional[Union[:class:`bytes`, :class:`str`]] |
|
|
@ -490,14 +543,17 @@ class Role(Hashable): |
|
|
|
await self._move(position, reason=reason) |
|
|
|
|
|
|
|
payload: Dict[str, Any] = {} |
|
|
|
|
|
|
|
colours: Dict[str, Any] = {} |
|
|
|
|
|
|
|
if color is not MISSING: |
|
|
|
colour = color |
|
|
|
|
|
|
|
if colour is not MISSING: |
|
|
|
if isinstance(colour, int): |
|
|
|
payload['color'] = colour |
|
|
|
colours['primary_color'] = colour |
|
|
|
else: |
|
|
|
payload['color'] = colour.value |
|
|
|
colours['primary_color'] = colour.value |
|
|
|
|
|
|
|
if name is not MISSING: |
|
|
|
payload['name'] = name |
|
|
@ -519,6 +575,26 @@ class Role(Hashable): |
|
|
|
if mentionable is not MISSING: |
|
|
|
payload['mentionable'] = mentionable |
|
|
|
|
|
|
|
actual_secondary_colour = secondary_colour or secondary_color |
|
|
|
actual_tertiary_colour = tertiary_colour or tertiary_color |
|
|
|
|
|
|
|
if actual_secondary_colour is not MISSING: |
|
|
|
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: |
|
|
|
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 |
|
|
|
|
|
|
|
if colours: |
|
|
|
payload['colors'] = colours |
|
|
|
data = await self._state.http.edit_role(self.guild.id, self.id, reason=reason, **payload) |
|
|
|
return Role(guild=self.guild, data=data, state=self._state) |
|
|
|
|
|
|
|