Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions discord/flags.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
'ChannelFlags',
'AutoModPresets',
'MemberFlags',
'AttachmentFlags',
)

BF = TypeVar('BF', bound='BaseFlags')
Expand Down Expand Up @@ -1824,3 +1825,76 @@ def bypasses_verification(self):
def started_onboarding(self):
""":class:`bool`: Returns ``True`` if the member has started onboarding."""
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
Comment on lines +1887 to +1895
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know these are undocumented on Discord's side but it sure would be nice to know what these even are for better documentation and maybe better naming, but this won't block this PR.


@flag_value
def remix(self):
""":class:`bool`: Returns ``True`` if the attachment has been edited using the remix feature."""
return 1 << 2
10 changes: 9 additions & 1 deletion discord/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
from .components import _component_factory
from .embeds import Embed
from .member import Member
from .flags import MessageFlags
from .flags import MessageFlags, AttachmentFlags
from .file import File
from .utils import escape_mentions, MISSING
from .http import handle_message_parameters
Expand Down Expand Up @@ -207,6 +207,7 @@ class Attachment(Hashable):
'ephemeral',
'duration',
'waveform',
'_flags',
)

def __init__(self, *, data: AttachmentPayload, state: ConnectionState):
Expand All @@ -226,6 +227,13 @@ def __init__(self, *, data: AttachmentPayload, state: ConnectionState):
waveform = data.get('waveform')
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:
""":class:`bool`: Whether this attachment contains a spoiler."""
return self.filename.startswith('SPOILER_')
Expand Down
1 change: 1 addition & 0 deletions discord/types/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ class Attachment(TypedDict):
ephemeral: NotRequired[bool]
duration_secs: NotRequired[float]
waveform: NotRequired[str]
flags: NotRequired[int]


MessageActivityType = Literal[1, 2, 3, 5]
Expand Down
8 changes: 8 additions & 0 deletions docs/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4970,6 +4970,14 @@ MemberFlags
.. autoclass:: MemberFlags
:members:

AttachmentFlags
~~~~~~~~~~~~~~~~

.. attributetable:: AttachmentFlags

.. autoclass:: AttachmentFlags
:members:

ForumTag
~~~~~~~~~

Expand Down