Browse Source

Add support for display_name_styles

pull/10285/head
Soheab_ 4 days ago
parent
commit
865d6ff5fa
  1. 23
      discord/enums.py
  2. 11
      discord/types/user.py
  3. 23
      discord/user.py

23
discord/enums.py

@ -988,6 +988,29 @@ class NameplatePalette(Enum):
white = 'white' white = 'white'
class NameFont(Enum):
default = 11
bangers = 1
bio_rhyme = 2
cherry_bomb = 3
chicle = 4
compagnon = 5
museo_moderno = 6
neo_castel = 7
pixelify = 8
ribes = 9
sinistre = 10
zilla_slab = 12
class NameEffect(Enum):
solid = 1
gradient = 2
neon = 3
toon = 4
pop = 5
def create_unknown_value(cls: Type[E], val: Any) -> E: def create_unknown_value(cls: Type[E], val: Any) -> E:
value_cls = cls._enum_value_cls_ # type: ignore # This is narrowed below value_cls = cls._enum_value_cls_ # type: ignore # This is narrowed below
name = f'unknown_{val}' name = f'unknown_{val}'

11
discord/types/user.py

@ -23,12 +23,14 @@ DEALINGS IN THE SOFTWARE.
""" """
from .snowflake import Snowflake from .snowflake import Snowflake
from typing import Literal, Optional, TypedDict from typing import Literal, Optional, TypedDict, List
from typing_extensions import NotRequired from typing_extensions import NotRequired
PremiumType = Literal[0, 1, 2, 3] PremiumType = Literal[0, 1, 2, 3]
NameplatePallete = Literal['crimson', 'berry', 'sky', 'teal', 'forest', 'bubble_gum', 'violet', 'cobalt', 'clover'] NameplatePallete = Literal['crimson', 'berry', 'sky', 'teal', 'forest', 'bubble_gum', 'violet', 'cobalt', 'clover']
DisplayNameFont = Literal[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
DisplayNameEffect = Literal[1, 2, 3, 4, 5]
class _UserSKU(TypedDict): class _UserSKU(TypedDict):
@ -70,6 +72,12 @@ class PartialUser(TypedDict):
collectibles: NotRequired[UserCollectibles] collectibles: NotRequired[UserCollectibles]
class DisplayNameStyle(TypedDict):
font_id: DisplayNameFont
effect_id: DisplayNameEffect
colors: List[int] # 1-2
class User(PartialUser, total=False): class User(PartialUser, total=False):
bot: bool bot: bool
system: bool system: bool
@ -80,3 +88,4 @@ class User(PartialUser, total=False):
flags: int flags: int
premium_type: PremiumType premium_type: PremiumType
public_flags: int public_flags: int
display_name_styles: DisplayNameStyle

23
discord/user.py

@ -29,7 +29,7 @@ from typing import Any, Dict, List, Optional, TYPE_CHECKING, Union
import discord.abc import discord.abc
from .asset import Asset from .asset import Asset
from .colour import Colour from .colour import Colour
from .enums import DefaultAvatar from .enums import DefaultAvatar, NameEffect, NameFont, try_enum
from .flags import PublicUserFlags from .flags import PublicUserFlags
from .utils import snowflake_time, _bytes_to_base64_data, MISSING, _get_as_snowflake from .utils import snowflake_time, _bytes_to_base64_data, MISSING, _get_as_snowflake
from .primary_guild import PrimaryGuild from .primary_guild import PrimaryGuild
@ -51,6 +51,7 @@ if TYPE_CHECKING:
AvatarDecorationData, AvatarDecorationData,
PrimaryGuild as PrimaryGuildPayload, PrimaryGuild as PrimaryGuildPayload,
UserCollectibles as UserCollectiblesPayload, UserCollectibles as UserCollectiblesPayload,
DisplayNameStyle as DisplayNameStylePayload,
) )
@ -60,6 +61,16 @@ __all__ = (
) )
class DisplayNameStyle:
def __init__(self, *, data: DisplayNameStylePayload) -> None:
self.font: NameFont = try_enum(NameFont, data['font_id'])
self.effect: NameEffect = try_enum(NameEffect, data['effect_id'])
self.colors: List[discord.Colour] = [discord.Colour(color) for color in data.get('colors', [])]
def __repr__(self) -> str:
return f'<DisplayNameStyle font={self.font} effect={self.effect} colors={self.colors}>'
class _UserTag: class _UserTag:
__slots__ = () __slots__ = ()
id: int id: int
@ -81,6 +92,7 @@ class BaseUser(_UserTag):
'_avatar_decoration_data', '_avatar_decoration_data',
'_primary_guild', '_primary_guild',
'_collectibles', '_collectibles',
'_display_name_style',
) )
if TYPE_CHECKING: if TYPE_CHECKING:
@ -98,6 +110,7 @@ class BaseUser(_UserTag):
_avatar_decoration_data: Optional[AvatarDecorationData] _avatar_decoration_data: Optional[AvatarDecorationData]
_primary_guild: Optional[PrimaryGuildPayload] _primary_guild: Optional[PrimaryGuildPayload]
_collectibles: Optional[UserCollectiblesPayload] _collectibles: Optional[UserCollectiblesPayload]
_display_name_style: Optional[DisplayNameStylePayload]
def __init__(self, *, state: ConnectionState, data: Union[UserPayload, PartialUserPayload]) -> None: def __init__(self, *, state: ConnectionState, data: Union[UserPayload, PartialUserPayload]) -> None:
self._state = state self._state = state
@ -137,6 +150,7 @@ class BaseUser(_UserTag):
self._avatar_decoration_data = data.get('avatar_decoration_data') self._avatar_decoration_data = data.get('avatar_decoration_data')
self._primary_guild = data.get('primary_guild', None) self._primary_guild = data.get('primary_guild', None)
self._collectibles = data.get('collectibles', None) self._collectibles = data.get('collectibles', None)
self._display_name_style = data.get('display_name_styles', None) or None
@classmethod @classmethod
def _copy(cls, user: Self) -> Self: def _copy(cls, user: Self) -> Self:
@ -155,6 +169,7 @@ class BaseUser(_UserTag):
self._avatar_decoration_data = user._avatar_decoration_data self._avatar_decoration_data = user._avatar_decoration_data
self._primary_guild = user._primary_guild self._primary_guild = user._primary_guild
self._collectibles = user._collectibles self._collectibles = user._collectibles
self._display_name_style = user._display_name_style
return self return self
@ -340,6 +355,12 @@ class BaseUser(_UserTag):
return [] return []
return [Collectible(state=self._state, type=key, data=value) for key, value in self._collectibles.items() if value] # type: ignore return [Collectible(state=self._state, type=key, data=value) for key, value in self._collectibles.items() if value] # type: ignore
@property
def display_name_style(self) -> Optional[DisplayNameStyle]:
if self._display_name_style is None:
return None
return DisplayNameStyle(data=self._display_name_style)
def mentioned_in(self, message: Message) -> bool: def mentioned_in(self, message: Message) -> bool:
"""Checks if the user is mentioned in the specified message. """Checks if the user is mentioned in the specified message.

Loading…
Cancel
Save