Add support for attachment flags

This commit is contained in:
Soheab_ 2023-07-15 03:41:44 +02:00 committed by GitHub
parent 00ea67d315
commit 14faa9bdab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 92 additions and 1 deletions

View File

@ -58,6 +58,7 @@ __all__ = (
'ChannelFlags', 'ChannelFlags',
'AutoModPresets', 'AutoModPresets',
'MemberFlags', 'MemberFlags',
'AttachmentFlags',
) )
BF = TypeVar('BF', bound='BaseFlags') BF = TypeVar('BF', bound='BaseFlags')
@ -1824,3 +1825,76 @@ class MemberFlags(BaseFlags):
def started_onboarding(self): def started_onboarding(self):
""":class:`bool`: Returns ``True`` if the member has started onboarding.""" """:class:`bool`: Returns ``True`` if the member has started onboarding."""
return 1 << 3 return 1 << 3
@fill_with_flags()
class AttachmentFlags(BaseFlags):
r"""Wraps up the Discord Attachment flags
.. versionadded:: 2.4
.. container:: operations
.. describe:: x == y
Checks if two AttachmentFlags are equal.
.. describe:: x != y
Checks if two AttachmentFlags are not equal.
.. describe:: x | y, x |= y
Returns a AttachmentFlags instance with all enabled flags from
both x and y.
.. describe:: x & y, x &= y
Returns a AttachmentFlags instance with only flags enabled on
both x and y.
.. describe:: x ^ y, x ^= y
Returns a AttachmentFlags instance with only flags enabled on
only one of x or y, not on both.
.. describe:: ~x
Returns a AttachmentFlags instance with all flags inverted from x.
.. describe:: hash(x)
Return the flag's hash.
.. describe:: iter(x)
Returns an iterator of ``(name, value)`` pairs. This allows it
to be, for example, constructed as a dict or a list of pairs.
Note that aliases are not shown.
.. describe:: bool(b)
Returns whether any flag is set to ``True``.
Attributes
-----------
value: :class:`int`
The raw value. You should query flags via the properties
rather than using this raw value.
"""
@flag_value
def clip(self):
""":class:`bool`: Returns ``True`` if the attachment is a clip."""
return 1 << 0
@flag_value
def thumbnail(self):
""":class:`bool`: Returns ``True`` if the attachment is a thumbnail."""
return 1 << 1
@flag_value
def remix(self):
""":class:`bool`: Returns ``True`` if the attachment has been edited using the remix feature."""
return 1 << 2

View File

@ -54,7 +54,7 @@ from .errors import HTTPException
from .components import _component_factory from .components import _component_factory
from .embeds import Embed from .embeds import Embed
from .member import Member from .member import Member
from .flags import MessageFlags from .flags import MessageFlags, AttachmentFlags
from .file import File from .file import File
from .utils import escape_mentions, MISSING from .utils import escape_mentions, MISSING
from .http import handle_message_parameters from .http import handle_message_parameters
@ -207,6 +207,7 @@ class Attachment(Hashable):
'ephemeral', 'ephemeral',
'duration', 'duration',
'waveform', 'waveform',
'_flags',
) )
def __init__(self, *, data: AttachmentPayload, state: ConnectionState): def __init__(self, *, data: AttachmentPayload, state: ConnectionState):
@ -226,6 +227,13 @@ class Attachment(Hashable):
waveform = data.get('waveform') waveform = data.get('waveform')
self.waveform: Optional[bytes] = utils._base64_to_bytes(waveform) if waveform is not None else None self.waveform: Optional[bytes] = utils._base64_to_bytes(waveform) if waveform is not None else None
self._flags: int = data.get('flags', 0)
@property
def flags(self) -> AttachmentFlags:
""":class:`AttachmentFlags`: The attachment's flags."""
return AttachmentFlags._from_value(self._flags)
def is_spoiler(self) -> bool: def is_spoiler(self) -> bool:
""":class:`bool`: Whether this attachment contains a spoiler.""" """:class:`bool`: Whether this attachment contains a spoiler."""
return self.filename.startswith('SPOILER_') return self.filename.startswith('SPOILER_')

View File

@ -70,6 +70,7 @@ class Attachment(TypedDict):
ephemeral: NotRequired[bool] ephemeral: NotRequired[bool]
duration_secs: NotRequired[float] duration_secs: NotRequired[float]
waveform: NotRequired[str] waveform: NotRequired[str]
flags: NotRequired[int]
MessageActivityType = Literal[1, 2, 3, 5] MessageActivityType = Literal[1, 2, 3, 5]

View File

@ -4982,6 +4982,14 @@ MemberFlags
.. autoclass:: MemberFlags .. autoclass:: MemberFlags
:members: :members:
AttachmentFlags
~~~~~~~~~~~~~~~~
.. attributetable:: AttachmentFlags
.. autoclass:: AttachmentFlags
:members:
ForumTag ForumTag
~~~~~~~~~ ~~~~~~~~~