mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-04-19 15:36:02 +00:00
Rework Message.edit implementation
This commit is contained in:
parent
75477b2995
commit
b1836c5577
@ -29,7 +29,7 @@ import datetime
|
||||
import re
|
||||
import io
|
||||
from os import PathLike
|
||||
from typing import TYPE_CHECKING, Union, List, Optional, Any, Callable, Tuple, ClassVar, Optional, overload
|
||||
from typing import Dict, TYPE_CHECKING, Union, List, Optional, Any, Callable, Tuple, ClassVar, Optional, overload
|
||||
|
||||
from . import utils
|
||||
from .reaction import Reaction
|
||||
@ -42,7 +42,7 @@ from .embeds import Embed
|
||||
from .member import Member
|
||||
from .flags import MessageFlags
|
||||
from .file import File
|
||||
from .utils import escape_mentions
|
||||
from .utils import escape_mentions, MISSING
|
||||
from .guild import Guild
|
||||
from .mixins import Hashable
|
||||
from .sticker import Sticker
|
||||
@ -1114,7 +1114,7 @@ class Message(Hashable):
|
||||
self,
|
||||
*,
|
||||
content: Optional[str] = ...,
|
||||
embeds: Optional[List[Embed]] = ...,
|
||||
embeds: List[Embed] = ...,
|
||||
attachments: List[Attachment] = ...,
|
||||
suppress: bool = ...,
|
||||
delete_after: Optional[float] = ...,
|
||||
@ -1123,7 +1123,17 @@ class Message(Hashable):
|
||||
) -> None:
|
||||
...
|
||||
|
||||
async def edit(self, **fields) -> None:
|
||||
async def edit(
|
||||
self,
|
||||
content: Optional[str] = MISSING,
|
||||
embed: Optional[Embed] = MISSING,
|
||||
embeds: List[Embed] = MISSING,
|
||||
attachments: List[Attachment] = MISSING,
|
||||
suppress: bool = MISSING,
|
||||
delete_after: Optional[float] = None,
|
||||
allowed_mentions: Optional[AllowedMentions] = MISSING,
|
||||
view: Optional[View] = MISSING,
|
||||
) -> None:
|
||||
"""|coro|
|
||||
|
||||
Edits the message.
|
||||
@ -1141,6 +1151,11 @@ class Message(Hashable):
|
||||
embed: Optional[:class:`Embed`]
|
||||
The new embed to replace the original with.
|
||||
Could be ``None`` to remove the embed.
|
||||
embeds: List[:class:`Embeds`]
|
||||
The new embeds to replace the original with. Must be a maximum of 10.
|
||||
To remove all embeds ``[]`` should be passed.
|
||||
|
||||
.. versionadded:: 2.0
|
||||
attachments: List[:class:`Attachment`]
|
||||
A list of attachments to keep in the message. If ``[]`` is passed
|
||||
then all attachments are removed.
|
||||
@ -1165,12 +1180,6 @@ class Message(Hashable):
|
||||
view: Optional[:class:`~discord.ui.View`]
|
||||
The updated view to update this message with. If ``None`` is passed then
|
||||
the view is removed.
|
||||
embeds: Optional[List[:class:`Embeds`]]
|
||||
The new embeds to replace the original with.
|
||||
Could be ``None`` to remove the embeds.
|
||||
Must be a maximum of 10.
|
||||
|
||||
.. versionadded:: 2.0
|
||||
|
||||
Raises
|
||||
-------
|
||||
@ -1183,79 +1192,52 @@ class Message(Hashable):
|
||||
You specified both ``embed`` and ``embeds``
|
||||
"""
|
||||
|
||||
try:
|
||||
content = fields['content']
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
payload: Dict[str, Any] = {}
|
||||
if content is not MISSING:
|
||||
if content is not None:
|
||||
fields['content'] = str(content)
|
||||
payload['content'] = str(content)
|
||||
else:
|
||||
payload['content'] = None
|
||||
|
||||
try:
|
||||
fields['embed']
|
||||
fields['embeds']
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
if embed is not MISSING and embeds is not MISSING:
|
||||
raise InvalidArgument('cannot pass both embed and embeds parameter to edit()')
|
||||
try:
|
||||
embeds = fields.pop('embeds')
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
fields['embeds'] = [embed.to_dict() for embed in embeds]
|
||||
try:
|
||||
embed = fields.pop('embed')
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
fields['embeds'] = [embed.to_dict()]
|
||||
|
||||
try:
|
||||
suppress = fields.pop('suppress')
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
if embed is not MISSING:
|
||||
if embed is None:
|
||||
payload['embeds'] = []
|
||||
else:
|
||||
payload['embeds'] = [embed.to_dict()]
|
||||
elif embeds is not MISSING:
|
||||
payload['embeds'] = [e.to_dict() for e in embeds]
|
||||
|
||||
if suppress is not MISSING:
|
||||
flags = MessageFlags._from_value(self.flags.value)
|
||||
flags.suppress_embeds = suppress
|
||||
fields['flags'] = flags.value
|
||||
payload['flags'] = flags.value
|
||||
|
||||
delete_after = fields.pop('delete_after', None)
|
||||
|
||||
try:
|
||||
allowed_mentions = fields.pop('allowed_mentions')
|
||||
except KeyError:
|
||||
if allowed_mentions is MISSING:
|
||||
if self._state.allowed_mentions is not None and self.author.id == self._state.self_id:
|
||||
fields['allowed_mentions'] = self._state.allowed_mentions.to_dict()
|
||||
payload['allowed_mentions'] = self._state.allowed_mentions.to_dict()
|
||||
else:
|
||||
if allowed_mentions is not None:
|
||||
if self._state.allowed_mentions is not None:
|
||||
allowed_mentions = self._state.allowed_mentions.merge(allowed_mentions).to_dict()
|
||||
payload['allowed_mentions'] = self._state.allowed_mentions.merge(allowed_mentions).to_dict()
|
||||
else:
|
||||
allowed_mentions = allowed_mentions.to_dict()
|
||||
fields['allowed_mentions'] = allowed_mentions
|
||||
payload['allowed_mentions'] = allowed_mentions.to_dict()
|
||||
|
||||
try:
|
||||
attachments = fields.pop('attachments')
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
fields['attachments'] = [a.to_dict() for a in attachments]
|
||||
if attachments is not MISSING:
|
||||
payload['attachments'] = [a.to_dict() for a in attachments]
|
||||
|
||||
try:
|
||||
view = fields.pop('view')
|
||||
except KeyError:
|
||||
# To check for the view afterwards
|
||||
view = None
|
||||
else:
|
||||
if view is not MISSING:
|
||||
self._state.prevent_view_updates_for(self.id)
|
||||
if view:
|
||||
fields['components'] = view.to_components()
|
||||
payload['components'] = view.to_components()
|
||||
else:
|
||||
fields['components'] = []
|
||||
payload['components'] = []
|
||||
|
||||
if fields:
|
||||
data = await self._state.http.edit_message(self.channel.id, self.id, **fields)
|
||||
if payload:
|
||||
data = await self._state.http.edit_message(self.channel.id, self.id, **payload)
|
||||
self._update(data)
|
||||
|
||||
if view and not view.is_finished():
|
||||
|
Loading…
x
Reference in New Issue
Block a user