Browse Source

Add support for attachment flags

pull/9501/head
Soheab_ 2 years ago
committed by GitHub
parent
commit
14faa9bdab
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 74
      discord/flags.py
  2. 10
      discord/message.py
  3. 1
      discord/types/message.py
  4. 8
      docs/api.rst

74
discord/flags.py

@ -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

10
discord/message.py

@ -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_')

1
discord/types/message.py

@ -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]

8
docs/api.rst

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

Loading…
Cancel
Save