PartialMessage.edit returns a full Message
This commit is contained in:
parent
b9a99238e8
commit
941e1efcb6
@ -1351,7 +1351,6 @@ class PartialMessage(Hashable):
|
|||||||
_exported_names = (
|
_exported_names = (
|
||||||
'jump_url',
|
'jump_url',
|
||||||
'delete',
|
'delete',
|
||||||
'edit',
|
|
||||||
'publish',
|
'publish',
|
||||||
'pin',
|
'pin',
|
||||||
'unpin',
|
'unpin',
|
||||||
@ -1416,3 +1415,102 @@ class PartialMessage(Hashable):
|
|||||||
|
|
||||||
data = await self._state.http.get_message(self.channel.id, self.id)
|
data = await self._state.http.get_message(self.channel.id, self.id)
|
||||||
return self._state.create_message(channel=self.channel, data=data)
|
return self._state.create_message(channel=self.channel, data=data)
|
||||||
|
|
||||||
|
async def edit(self, **fields):
|
||||||
|
"""|coro|
|
||||||
|
|
||||||
|
Edits the message.
|
||||||
|
|
||||||
|
The content must be able to be transformed into a string via ``str(content)``.
|
||||||
|
|
||||||
|
.. versionchanged:: 1.7
|
||||||
|
:class:`discord.Message` is returned instead of ``None`` if an edit took place.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
-----------
|
||||||
|
content: Optional[:class:`str`]
|
||||||
|
The new content to replace the message with.
|
||||||
|
Could be ``None`` to remove the content.
|
||||||
|
embed: Optional[:class:`Embed`]
|
||||||
|
The new embed to replace the original with.
|
||||||
|
Could be ``None`` to remove the embed.
|
||||||
|
suppress: :class:`bool`
|
||||||
|
Whether to suppress embeds for the message. This removes
|
||||||
|
all the embeds if set to ``True``. If set to ``False``
|
||||||
|
this brings the embeds back if they were suppressed.
|
||||||
|
Using this parameter requires :attr:`~.Permissions.manage_messages`.
|
||||||
|
delete_after: Optional[:class:`float`]
|
||||||
|
If provided, the number of seconds to wait in the background
|
||||||
|
before deleting the message we just edited. If the deletion fails,
|
||||||
|
then it is silently ignored.
|
||||||
|
allowed_mentions: Optional[:class:`~discord.AllowedMentions`]
|
||||||
|
Controls the mentions being processed in this message. If this is
|
||||||
|
passed, then the object is merged with :attr:`~discord.Client.allowed_mentions`.
|
||||||
|
The merging behaviour only overrides attributes that have been explicitly passed
|
||||||
|
to the object, otherwise it uses the attributes set in :attr:`~discord.Client.allowed_mentions`.
|
||||||
|
If no object is passed at all then the defaults given by :attr:`~discord.Client.allowed_mentions`
|
||||||
|
are used instead.
|
||||||
|
|
||||||
|
Raises
|
||||||
|
-------
|
||||||
|
NotFound
|
||||||
|
The message was not found.
|
||||||
|
HTTPException
|
||||||
|
Editing the message failed.
|
||||||
|
Forbidden
|
||||||
|
Tried to suppress a message without permissions or
|
||||||
|
edited a message's content or embed that isn't yours.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
---------
|
||||||
|
Optional[:class:`Message`]
|
||||||
|
The message that was edited.
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
content = fields['content']
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
if content is not None:
|
||||||
|
fields['content'] = str(content)
|
||||||
|
|
||||||
|
try:
|
||||||
|
embed = fields['embed']
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
if embed is not None:
|
||||||
|
fields['embed'] = embed.to_dict()
|
||||||
|
|
||||||
|
try:
|
||||||
|
suppress = fields.pop('suppress')
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
flags = MessageFlags._from_value(0)
|
||||||
|
flags.suppress_embeds = suppress
|
||||||
|
fields['flags'] = flags.value
|
||||||
|
|
||||||
|
delete_after = fields.pop('delete_after', None)
|
||||||
|
|
||||||
|
try:
|
||||||
|
allowed_mentions = fields.pop('allowed_mentions')
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
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()
|
||||||
|
else:
|
||||||
|
allowed_mentions = allowed_mentions.to_dict()
|
||||||
|
fields['allowed_mentions'] = allowed_mentions
|
||||||
|
|
||||||
|
if fields:
|
||||||
|
data = await self._state.http.edit_message(self.channel.id, self.id, **fields)
|
||||||
|
|
||||||
|
if delete_after is not None:
|
||||||
|
await self.delete(delay=delete_after)
|
||||||
|
|
||||||
|
if fields:
|
||||||
|
return self._state.create_message(channel=self.channel, data=data)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user