diff --git a/discord/flags.py b/discord/flags.py index 3b6c1a3dc..0221f6270 100644 --- a/discord/flags.py +++ b/discord/flags.py @@ -74,6 +74,7 @@ __all__ = ( 'MemberFlags', 'ReadStateFlags', 'InviteFlags', + 'AttachmentFlags', ) BF = TypeVar('BF', bound='BaseFlags') @@ -2618,3 +2619,67 @@ class InviteFlags(BaseFlags): def guest(self): """:class:`bool`: Returns ``True`` if the invite is a guest invite. Guest invites grant temporary membership for the purposes of joining a voice channel.""" return 1 << 0 + + +@fill_with_flags() +class AttachmentFlags(BaseFlags): + r"""Wraps up the Discord Attachment flags + + .. 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``. + + .. versionadded:: 2.1 + + 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 media channel 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 diff --git a/discord/message.py b/discord/message.py index d0d7c9003..0d506a3ed 100644 --- a/discord/message.py +++ b/discord/message.py @@ -56,7 +56,7 @@ from .errors import HTTPException 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 @@ -215,6 +215,7 @@ class Attachment(Hashable): 'ephemeral', 'duration', 'waveform', + '_flags', ) def __init__(self, *, data: AttachmentPayload, state: ConnectionState): @@ -234,6 +235,13 @@ class Attachment(Hashable): 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_') diff --git a/discord/types/message.py b/discord/types/message.py index d2866d5a3..dbee9782a 100644 --- a/discord/types/message.py +++ b/discord/types/message.py @@ -72,6 +72,7 @@ class Attachment(TypedDict): ephemeral: NotRequired[bool] duration_secs: NotRequired[float] waveform: NotRequired[str] + flags: NotRequired[int] MessageActivityType = Literal[1, 2, 3, 5] diff --git a/docs/api.rst b/docs/api.rst index ff2619df6..2b7c1858d 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -7849,9 +7849,9 @@ Flags .. autoclass:: ApplicationDiscoveryFlags() :members: -.. attributetable:: LibraryApplicationFlags +.. attributetable:: AttachmentFlags -.. autoclass:: LibraryApplicationFlags() +.. autoclass:: AttachmentFlags() :members: .. attributetable:: ChannelFlags @@ -7859,11 +7859,6 @@ Flags .. autoclass:: ChannelFlags() :members: -.. attributetable:: SystemChannelFlags - -.. autoclass:: SystemChannelFlags() - :members: - .. attributetable:: FriendSourceFlags .. autoclass:: FriendSourceFlags() @@ -7889,11 +7884,21 @@ Flags .. autoclass:: InviteFlags() :members: +.. attributetable:: LibraryApplicationFlags + +.. autoclass:: LibraryApplicationFlags() + :members: + .. attributetable:: MemberFlags .. autoclass:: MemberFlags() :members: +.. attributetable:: MemberCacheFlags + +.. autoclass:: MemberCacheFlags() + :members: + .. attributetable:: MessageFlags .. autoclass:: MessageFlags() @@ -7950,9 +7955,9 @@ Flags .. autoclass:: SKUFlags() :members: -.. attributetable:: MemberCacheFlags +.. attributetable:: SystemChannelFlags -.. autoclass:: MemberCacheFlags() +.. autoclass:: SystemChannelFlags() :members: