Browse Source

Revert "Make embed flags required and add them to all media fields"

This reverts commit cab4732b7e.
pull/10153/head
Alex Nørgaard 2 weeks ago
parent
commit
e90c1e94cd
Failed to extract signature
  1. 64
      discord/embeds.py
  2. 22
      discord/types/embed.py

64
discord/embeds.py

@ -77,7 +77,12 @@ if TYPE_CHECKING:
proxy_url: Optional[str] proxy_url: Optional[str]
height: Optional[int] height: Optional[int]
width: Optional[int] width: Optional[int]
flags: AttachmentFlags flags: Optional[AttachmentFlags]
class _EmbedVideoProxy(Protocol):
url: Optional[str]
height: Optional[int]
width: Optional[int]
class _EmbedProviderProxy(Protocol): class _EmbedProviderProxy(Protocol):
name: Optional[str] name: Optional[str]
@ -143,6 +148,10 @@ class Embed:
colour: Optional[Union[:class:`Colour`, :class:`int`]] colour: Optional[Union[:class:`Colour`, :class:`int`]]
The colour code of the embed. Aliased to ``color`` as well. The colour code of the embed. Aliased to ``color`` as well.
This can be set during initialisation. This can be set during initialisation.
flags: Optional[:class:`EmbedFlags`]
The flags of this embed.
.. versionadded:: 2.5
""" """
__slots__ = ( __slots__ = (
@ -159,7 +168,7 @@ class Embed:
'_author', '_author',
'_fields', '_fields',
'description', 'description',
'_flags', 'flags',
) )
def __init__( def __init__(
@ -179,7 +188,7 @@ class Embed:
self.type: EmbedType = type self.type: EmbedType = type
self.url: Optional[str] = url self.url: Optional[str] = url
self.description: Optional[str] = description self.description: Optional[str] = description
self._flags: int = 0 self.flags: Optional[EmbedFlags] = None
if self.title is not None: if self.title is not None:
self.title = str(self.title) self.title = str(self.title)
@ -214,7 +223,6 @@ class Embed:
self.type = data.get('type', None) self.type = data.get('type', None)
self.description = data.get('description', None) self.description = data.get('description', None)
self.url = data.get('url', None) self.url = data.get('url', None)
self._flags = data.get('flags', 0)
if self.title is not None: if self.title is not None:
self.title = str(self.title) self.title = str(self.title)
@ -245,6 +253,11 @@ class Embed:
else: else:
setattr(self, '_' + attr, value) setattr(self, '_' + attr, value)
try:
self.flags = EmbedFlags._from_value(data['flags'])
except KeyError:
pass
return self return self
def copy(self) -> Self: def copy(self) -> Self:
@ -305,17 +318,8 @@ class Embed:
and self.image == other.image and self.image == other.image
and self.provider == other.provider and self.provider == other.provider
and self.video == other.video and self.video == other.video
and self._flags == other._flags
) )
@property
def flags(self) -> EmbedFlags:
""":class:`EmbedFlags`: The flags of this embed.
.. versionadded:: 2.5
"""
return EmbedFlags._from_value(self._flags or 0)
@property @property
def colour(self) -> Optional[Colour]: def colour(self) -> Optional[Colour]:
return getattr(self, '_colour', None) return getattr(self, '_colour', None)
@ -404,17 +408,18 @@ class Embed:
Possible attributes you can access are: Possible attributes you can access are:
- ``url`` for the image URL. - ``url``
- ``proxy_url`` for the proxied image URL. - ``proxy_url``
- ``width`` for the image width. - ``width``
- ``height`` for the image height. - ``height``
- ``flags`` for the image's attachment flags. - ``flags``
If the attribute has no value then ``None`` is returned. If the attribute has no value then ``None`` is returned.
""" """
# Lying to the type checker for better developer UX. # Lying to the type checker for better developer UX.
data = getattr(self, '_image', {}) data = getattr(self, '_image', {})
data['flags'] = AttachmentFlags._from_value(data.get('flags', 0)) if 'flags' in data:
data['flags'] = AttachmentFlags._from_value(data['flags'])
return EmbedProxy(data) # type: ignore return EmbedProxy(data) # type: ignore
def set_image(self, *, url: Optional[Any]) -> Self: def set_image(self, *, url: Optional[Any]) -> Self:
@ -449,18 +454,15 @@ class Embed:
Possible attributes you can access are: Possible attributes you can access are:
- ``url`` for the thumbnail URL. - ``url``
- ``proxy_url`` for the proxied thumbnail URL. - ``proxy_url``
- ``width`` for the thumbnail width. - ``width``
- ``height`` for the thumbnail height. - ``height``
- ``flags`` for the thumbnail's attachment flags.
If the attribute has no value then ``None`` is returned. If the attribute has no value then ``None`` is returned.
""" """
# Lying to the type checker for better developer UX. # Lying to the type checker for better developer UX.
data = getattr(self, '_thumbnail', {}) return EmbedProxy(getattr(self, '_thumbnail', {})) # type: ignore
data['flags'] = AttachmentFlags._from_value(data.get('flags', 0))
return EmbedProxy(data) # type: ignore
def set_thumbnail(self, *, url: Optional[Any]) -> Self: def set_thumbnail(self, *, url: Optional[Any]) -> Self:
"""Sets the thumbnail for the embed content. """Sets the thumbnail for the embed content.
@ -489,23 +491,19 @@ class Embed:
return self return self
@property @property
def video(self) -> _EmbedMediaProxy: def video(self) -> _EmbedVideoProxy:
"""Returns an ``EmbedProxy`` denoting the video contents. """Returns an ``EmbedProxy`` denoting the video contents.
Possible attributes include: Possible attributes include:
- ``url`` for the video URL. - ``url`` for the video URL.
- ``proxy_url`` for the proxied video URL.
- ``height`` for the video height. - ``height`` for the video height.
- ``width`` for the video width. - ``width`` for the video width.
- ``flags`` for the video's attachment flags.
If the attribute has no value then ``None`` is returned. If the attribute has no value then ``None`` is returned.
""" """
# Lying to the type checker for better developer UX. # Lying to the type checker for better developer UX.
data = getattr(self, '_video', {}) return EmbedProxy(getattr(self, '_video', {})) # type: ignore
data['flags'] = AttachmentFlags._from_value(data.get('flags', 0))
return EmbedProxy(data) # type: ignore
@property @property
def provider(self) -> _EmbedProviderProxy: def provider(self) -> _EmbedProviderProxy:

22
discord/types/embed.py

@ -38,14 +38,28 @@ class EmbedField(TypedDict):
inline: NotRequired[bool] inline: NotRequired[bool]
class EmbedMedia(TypedDict, total=False): class EmbedThumbnail(TypedDict, total=False):
url: Required[str] url: Required[str]
proxy_url: str proxy_url: str
height: int height: int
width: int width: int
class EmbedVideo(TypedDict, total=False):
url: str
proxy_url: str
height: int
width: int
flags: int flags: int
class EmbedImage(TypedDict, total=False):
url: Required[str]
proxy_url: str
height: int
width: int
class EmbedProvider(TypedDict, total=False): class EmbedProvider(TypedDict, total=False):
name: str name: str
url: str url: str
@ -69,9 +83,9 @@ class Embed(TypedDict, total=False):
timestamp: str timestamp: str
color: int color: int
footer: EmbedFooter footer: EmbedFooter
image: EmbedMedia image: EmbedImage
thumbnail: EmbedMedia thumbnail: EmbedThumbnail
video: EmbedMedia video: EmbedVideo
provider: EmbedProvider provider: EmbedProvider
author: EmbedAuthor author: EmbedAuthor
fields: List[EmbedField] fields: List[EmbedField]

Loading…
Cancel
Save