Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add MessageFlags.suppress_notifications and flags parameter #929

Merged
merged 11 commits into from Feb 21, 2023
1 change: 1 addition & 0 deletions changelog/929.feature.0.rst
@@ -0,0 +1 @@
Add ``flags`` parameter to message send and edit methods.
1 change: 1 addition & 0 deletions changelog/929.feature.1.rst
@@ -0,0 +1 @@
Add :attr:`MessageFlags.suppress_notifications`.
31 changes: 24 additions & 7 deletions disnake/abc.py
Expand Up @@ -1355,6 +1355,7 @@ async def send(
delete_after: float = ...,
nonce: Union[str, int] = ...,
suppress_embeds: bool = ...,
flags: MessageFlags = ...,
allowed_mentions: AllowedMentions = ...,
reference: Union[Message, MessageReference, PartialMessage] = ...,
mention_author: bool = ...,
Expand All @@ -1375,6 +1376,7 @@ async def send(
delete_after: float = ...,
nonce: Union[str, int] = ...,
suppress_embeds: bool = ...,
flags: MessageFlags = ...,
allowed_mentions: AllowedMentions = ...,
reference: Union[Message, MessageReference, PartialMessage] = ...,
mention_author: bool = ...,
Expand All @@ -1395,6 +1397,7 @@ async def send(
delete_after: float = ...,
nonce: Union[str, int] = ...,
suppress_embeds: bool = ...,
flags: MessageFlags = ...,
allowed_mentions: AllowedMentions = ...,
reference: Union[Message, MessageReference, PartialMessage] = ...,
mention_author: bool = ...,
Expand All @@ -1415,6 +1418,7 @@ async def send(
delete_after: float = ...,
nonce: Union[str, int] = ...,
suppress_embeds: bool = ...,
flags: MessageFlags = ...,
allowed_mentions: AllowedMentions = ...,
reference: Union[Message, MessageReference, PartialMessage] = ...,
mention_author: bool = ...,
Expand All @@ -1435,7 +1439,8 @@ async def send(
stickers: Optional[Sequence[Union[GuildSticker, StickerItem]]] = None,
delete_after: Optional[float] = None,
nonce: Optional[Union[str, int]] = None,
suppress_embeds: bool = False,
suppress_embeds: Optional[bool] = None,
flags: Optional[MessageFlags] = None,
allowed_mentions: Optional[AllowedMentions] = None,
reference: Optional[Union[Message, MessageReference, PartialMessage]] = None,
mention_author: Optional[bool] = None,
Expand Down Expand Up @@ -1535,6 +1540,16 @@ async def send(

.. versionadded:: 2.5

flags: :class:`.MessageFlags`
The flags to set for this message.
Only :attr:`~.MessageFlags.suppress_embeds` and :attr:`~.MessageFlags.suppress_notifications`
are supported.

If parameter ``suppress_embeds`` is provided,
that will override the setting of :attr:`.MessageFlags.suppress_embeds`.

.. versionadded:: 2.9

Raises
------
HTTPException
Expand Down Expand Up @@ -1623,10 +1638,12 @@ async def send(
else:
components_payload = None

if suppress_embeds:
flags = MessageFlags.suppress_embeds.flag
else:
flags = 0
flags_payload = None
if suppress_embeds is not None:
flags = MessageFlags._from_value(0 if flags is None else flags.value)
flags.suppress_embeds = suppress_embeds
if flags is not None:
flags_payload = flags.value

if files is not None:
if len(files) > 10:
Expand All @@ -1646,7 +1663,7 @@ async def send(
message_reference=reference_payload,
stickers=stickers_payload,
components=components_payload,
flags=flags,
flags=flags_payload,
)
finally:
for f in files:
Expand All @@ -1662,7 +1679,7 @@ async def send(
message_reference=reference_payload,
stickers=stickers_payload,
components=components_payload,
flags=flags,
flags=flags_payload,
)

ret = state.create_message(channel=channel, data=data)
Expand Down
17 changes: 16 additions & 1 deletion disnake/channel.py
Expand Up @@ -40,7 +40,7 @@
)
from .errors import ClientException
from .file import File
from .flags import ChannelFlags
from .flags import ChannelFlags, MessageFlags
from .iterators import ArchivedThreadIterator
from .mixins import Hashable
from .partial_emoji import PartialEmoji
Expand Down Expand Up @@ -2979,6 +2979,7 @@ async def create_thread(
embed: Embed = ...,
file: File = ...,
suppress_embeds: bool = ...,
flags: MessageFlags = ...,
stickers: Sequence[Union[GuildSticker, StickerItem]] = ...,
allowed_mentions: AllowedMentions = ...,
view: View = ...,
Expand All @@ -2999,6 +3000,7 @@ async def create_thread(
embed: Embed = ...,
files: List[File] = ...,
suppress_embeds: bool = ...,
flags: MessageFlags = ...,
stickers: Sequence[Union[GuildSticker, StickerItem]] = ...,
allowed_mentions: AllowedMentions = ...,
view: View = ...,
Expand All @@ -3019,6 +3021,7 @@ async def create_thread(
embeds: List[Embed] = ...,
file: File = ...,
suppress_embeds: bool = ...,
flags: MessageFlags = ...,
stickers: Sequence[Union[GuildSticker, StickerItem]] = ...,
allowed_mentions: AllowedMentions = ...,
view: View = ...,
Expand All @@ -3039,6 +3042,7 @@ async def create_thread(
embeds: List[Embed] = ...,
files: List[File] = ...,
suppress_embeds: bool = ...,
flags: MessageFlags = ...,
stickers: Sequence[Union[GuildSticker, StickerItem]] = ...,
allowed_mentions: AllowedMentions = ...,
view: View = ...,
Expand All @@ -3060,6 +3064,7 @@ async def create_thread(
file: File = MISSING,
files: List[File] = MISSING,
suppress_embeds: bool = MISSING,
flags: MessageFlags = MISSING,
stickers: Sequence[Union[GuildSticker, StickerItem]] = MISSING,
allowed_mentions: AllowedMentions = MISSING,
view: View = MISSING,
Expand Down Expand Up @@ -3110,6 +3115,15 @@ async def create_thread(
suppress_embeds: :class:`bool`
Whether to suppress embeds for the message. This hides
all the embeds from the UI if set to ``True``.
flags: :class:`MessageFlags`
The flags to set for this message.
Only :attr:`~MessageFlags.suppress_embeds` is supported.

If parameter ``suppress_embeds`` is provided,
that will override the setting of :attr:`MessageFlags.suppress_embeds`.

.. versionadded:: 2.9

file: :class:`.File`
The file to upload. This cannot be mixed with the ``files`` parameter.
files: List[:class:`.File`]
Expand Down Expand Up @@ -3163,6 +3177,7 @@ async def create_thread(
file=file,
files=files,
suppress_embeds=suppress_embeds,
flags=flags,
view=view,
components=components,
allowed_mentions=allowed_mentions,
Expand Down
10 changes: 10 additions & 0 deletions disnake/flags.py
Expand Up @@ -571,6 +571,7 @@ def __init__(
loading: bool = ...,
source_message_deleted: bool = ...,
suppress_embeds: bool = ...,
suppress_notifications: bool = ...,
urgent: bool = ...,
) -> None:
...
Expand Down Expand Up @@ -637,6 +638,15 @@ def failed_to_mention_roles_in_thread(self):
"""
return 1 << 8

@flag_value
def suppress_notifications(self):
""":class:`bool`: Returns ``True`` if the source message does not
trigger push and desktop notifications.

.. versionadded:: 2.9
"""
return 1 << 12


class PublicUserFlags(BaseFlags):
"""
Expand Down
71 changes: 62 additions & 9 deletions disnake/interactions/base.py
Expand Up @@ -383,6 +383,7 @@ async def edit_original_response(
view: Optional[View] = MISSING,
components: Optional[Components[MessageUIComponent]] = MISSING,
suppress_embeds: bool = MISSING,
flags: MessageFlags = MISSING,
allowed_mentions: Optional[AllowedMentions] = None,
) -> InteractionMessage:
"""|coro|
Expand Down Expand Up @@ -456,6 +457,15 @@ async def edit_original_response(

.. versionadded:: 2.7

flags: :class:`MessageFlags`
The new flags to set for this message. Overrides existing flags.
Only :attr:`~MessageFlags.suppress_embeds` is supported.

If parameter ``suppress_embeds`` is provided,
that will override the setting of :attr:`.MessageFlags.suppress_embeds`.

.. versionadded:: 2.9

Raises
------
HTTPException
Expand Down Expand Up @@ -488,6 +498,7 @@ async def edit_original_response(
view=view,
components=components,
suppress_embeds=suppress_embeds,
flags=flags,
allowed_mentions=allowed_mentions,
previous_allowed_mentions=previous_mentions,
)
Expand Down Expand Up @@ -587,8 +598,9 @@ async def send(
view: View = MISSING,
components: Components[MessageUIComponent] = MISSING,
tts: bool = False,
ephemeral: bool = False,
suppress_embeds: bool = False,
ephemeral: bool = MISSING,
suppress_embeds: bool = MISSING,
flags: MessageFlags = MISSING,
delete_after: float = MISSING,
) -> None:
"""|coro|
Expand Down Expand Up @@ -645,6 +657,16 @@ async def send(

.. versionadded:: 2.5

flags: :class:`MessageFlags`
The flags to set for this message.
Only :attr:`~MessageFlags.suppress_embeds`, :attr:`~MessageFlags.ephemeral`
and :attr:`~MessageFlags.suppress_notifications` are supported.

If parameters ``suppress_embeds`` or ``ephemeral`` are provided,
they will override the corresponding setting of this ``flags`` parameter.

.. versionadded:: 2.9

delete_after: :class:`float`
If provided, the number of seconds to wait in the background
before deleting the message we just sent. If the deletion fails,
Expand Down Expand Up @@ -681,6 +703,7 @@ async def send(
tts=tts,
ephemeral=ephemeral,
suppress_embeds=suppress_embeds,
flags=flags,
delete_after=delete_after,
)

Expand Down Expand Up @@ -852,8 +875,9 @@ async def send_message(
view: View = MISSING,
components: Components[MessageUIComponent] = MISSING,
tts: bool = False,
ephemeral: bool = False,
suppress_embeds: bool = False,
ephemeral: bool = MISSING,
suppress_embeds: bool = MISSING,
flags: MessageFlags = MISSING,
delete_after: float = MISSING,
) -> None:
"""|coro|
Expand Down Expand Up @@ -907,6 +931,16 @@ async def send_message(

.. versionadded:: 2.5

flags: :class:`MessageFlags`
The flags to set for this message.
Only :attr:`~MessageFlags.suppress_embeds`, :attr:`~MessageFlags.ephemeral`
and :attr:`~MessageFlags.suppress_notifications` are supported.

If parameters ``suppress_embeds`` or ``ephemeral`` are provided,
they will override the corresponding setting of this ``flags`` parameter.

.. versionadded:: 2.9

Raises
------
HTTPException
Expand Down Expand Up @@ -966,11 +1000,14 @@ async def send_message(
if content is not None:
payload["content"] = str(content)

payload["flags"] = 0
if suppress_embeds:
payload["flags"] |= MessageFlags.suppress_embeds.flag
if ephemeral:
payload["flags"] |= MessageFlags.ephemeral.flag
if suppress_embeds is not MISSING or ephemeral is not MISSING:
flags = MessageFlags._from_value(0 if flags is MISSING else flags.value)
if suppress_embeds is not MISSING:
flags.suppress_embeds = suppress_embeds
if ephemeral is not MISSING:
flags.ephemeral = ephemeral
if flags is not MISSING:
payload["flags"] = flags.value

if view is not MISSING:
payload["components"] = view.to_components()
Expand Down Expand Up @@ -1445,6 +1482,7 @@ async def edit(
file: File = ...,
attachments: Optional[List[Attachment]] = ...,
suppress_embeds: bool = ...,
flags: MessageFlags = ...,
allowed_mentions: Optional[AllowedMentions] = ...,
view: Optional[View] = ...,
components: Optional[Components[MessageUIComponent]] = ...,
Expand All @@ -1460,6 +1498,7 @@ async def edit(
files: List[File] = ...,
attachments: Optional[List[Attachment]] = ...,
suppress_embeds: bool = ...,
flags: MessageFlags = ...,
allowed_mentions: Optional[AllowedMentions] = ...,
view: Optional[View] = ...,
components: Optional[Components[MessageUIComponent]] = ...,
Expand All @@ -1475,6 +1514,7 @@ async def edit(
file: File = ...,
attachments: Optional[List[Attachment]] = ...,
suppress_embeds: bool = ...,
flags: MessageFlags = ...,
allowed_mentions: Optional[AllowedMentions] = ...,
view: Optional[View] = ...,
components: Optional[Components[MessageUIComponent]] = ...,
Expand All @@ -1490,6 +1530,7 @@ async def edit(
files: List[File] = ...,
attachments: Optional[List[Attachment]] = ...,
suppress_embeds: bool = ...,
flags: MessageFlags = ...,
allowed_mentions: Optional[AllowedMentions] = ...,
view: Optional[View] = ...,
components: Optional[Components[MessageUIComponent]] = ...,
Expand All @@ -1506,6 +1547,7 @@ async def edit(
files: List[File] = MISSING,
attachments: Optional[List[Attachment]] = MISSING,
suppress_embeds: bool = MISSING,
flags: MessageFlags = MISSING,
allowed_mentions: Optional[AllowedMentions] = MISSING,
view: Optional[View] = MISSING,
components: Optional[Components[MessageUIComponent]] = MISSING,
Expand Down Expand Up @@ -1567,6 +1609,15 @@ async def edit(

.. versionadded:: 2.7

flags: :class:`MessageFlags`
The new flags to set for this message. Overrides existing flags.
Only :attr:`~MessageFlags.suppress_embeds` is supported.

If parameter ``suppress_embeds`` is provided,
that will override the setting of :attr:`.MessageFlags.suppress_embeds`.

.. versionadded:: 2.9

allowed_mentions: :class:`AllowedMentions`
Controls the mentions being processed in this message.
See :meth:`.abc.Messageable.send` for more information.
Expand Down Expand Up @@ -1599,6 +1650,7 @@ async def edit(
files=files,
attachments=attachments,
suppress_embeds=suppress_embeds,
flags=flags,
allowed_mentions=allowed_mentions,
view=view,
components=components,
Expand All @@ -1619,6 +1671,7 @@ async def edit(
files=files,
attachments=attachments,
suppress_embeds=suppress_embeds,
flags=flags,
allowed_mentions=allowed_mentions,
view=view,
components=components,
Expand Down