mirror of
https://github.com/Rapptz/discord.py.git
synced 2026-03-05 02:20:46 +00:00
Fix (Sync)Webhook.edit_message missing the view parameter
This commit is contained in:
@@ -364,6 +364,7 @@ class AsyncWebhookAdapter:
|
||||
multipart: Optional[List[Dict[str, Any]]] = None,
|
||||
files: Optional[Sequence[File]] = None,
|
||||
thread_id: Optional[int] = None,
|
||||
with_components: bool = False,
|
||||
) -> Response[MessagePayload]:
|
||||
route = Route(
|
||||
'PATCH',
|
||||
@@ -372,7 +373,9 @@ class AsyncWebhookAdapter:
|
||||
webhook_token=token,
|
||||
message_id=message_id,
|
||||
)
|
||||
params = None if thread_id is None else {'thread_id': thread_id}
|
||||
params = {'with_components': int(with_components)}
|
||||
if thread_id:
|
||||
params['thread_id'] = thread_id
|
||||
return self.request(
|
||||
route,
|
||||
session=session,
|
||||
@@ -848,7 +851,15 @@ class WebhookMessage(Message):
|
||||
See :meth:`.abc.Messageable.send` for more information.
|
||||
view: Optional[:class:`~discord.ui.View`]
|
||||
The updated view to update this message with. If ``None`` is passed then
|
||||
the view is removed.
|
||||
the view is removed. If the webhook is partial or is not managed by the
|
||||
library, then you can not send interactable components. Otherwise, you
|
||||
can send views with any type of components.
|
||||
|
||||
.. note::
|
||||
|
||||
To update the message to add a :class:`~discord.ui.LayoutView`, you
|
||||
must explicitly set the ``content``, ``embed``, ``embeds``, and
|
||||
``attachments`` parameters to either ``None`` or an empty array, as appropriate.
|
||||
|
||||
.. versionadded:: 2.0
|
||||
|
||||
@@ -1772,7 +1783,7 @@ class Webhook(BaseWebhook):
|
||||
.. versionadded:: 1.4
|
||||
view: Union[:class:`discord.ui.View`, :class:`discord.ui.LayoutView`]
|
||||
The view to send with the message. If the webhook is partial or
|
||||
is not managed by the library, then you can only send URL buttons.
|
||||
is not managed by the library, then you can not send interactable components.
|
||||
Otherwise, you can send views with any type of components.
|
||||
|
||||
.. versionadded:: 2.0
|
||||
@@ -1857,12 +1868,10 @@ class Webhook(BaseWebhook):
|
||||
|
||||
if view is not MISSING:
|
||||
if not hasattr(view, '__discord_ui_view__'):
|
||||
raise TypeError(f'expected view parameter to be of type View not {view.__class__.__name__}')
|
||||
raise TypeError(f'expected view parameter to be of type View or LayoutView, not {view.__class__.__name__}')
|
||||
|
||||
if isinstance(self._state, _WebhookState) and view.is_dispatchable():
|
||||
raise ValueError(
|
||||
'Webhook views with any component other than URL buttons require an associated state with the webhook'
|
||||
)
|
||||
raise ValueError('Webhook views with interactable components require an associated state with the webhook')
|
||||
|
||||
if ephemeral is True and view.timeout is None and view.is_dispatchable():
|
||||
view.timeout = 15 * 60.0
|
||||
@@ -2048,8 +2057,9 @@ class Webhook(BaseWebhook):
|
||||
See :meth:`.abc.Messageable.send` for more information.
|
||||
view: Optional[Union[:class:`~discord.ui.View`, :class:`~discord.ui.LayoutView`]]
|
||||
The updated view to update this message with. If ``None`` is passed then
|
||||
the view is removed. The webhook must have state attached, similar to
|
||||
:meth:`send`.
|
||||
the view is removed. If the webhook is partial or is not managed by the
|
||||
library, then you can not send interactable components. Otherwise, you
|
||||
can send views with any type of components.
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -2085,11 +2095,12 @@ class Webhook(BaseWebhook):
|
||||
if self.token is None:
|
||||
raise ValueError('This webhook does not have a token associated with it')
|
||||
|
||||
if view is not MISSING:
|
||||
if isinstance(self._state, _WebhookState):
|
||||
raise ValueError('This webhook does not have state associated with it')
|
||||
if view:
|
||||
if not hasattr(view, '__discord_ui_view__'):
|
||||
raise TypeError(f'expected view parameter to be of type View or LayoutView, not {view.__class__.__name__}')
|
||||
|
||||
self._state.prevent_view_updates_for(message_id)
|
||||
if isinstance(self._state, _WebhookState) and view.is_dispatchable():
|
||||
raise ValueError('Webhook views with interactable components require an associated state with the webhook')
|
||||
|
||||
previous_mentions: Optional[AllowedMentions] = getattr(self._state, 'allowed_mentions', None)
|
||||
with handle_message_parameters(
|
||||
@@ -2117,6 +2128,7 @@ class Webhook(BaseWebhook):
|
||||
multipart=params.multipart,
|
||||
files=params.files,
|
||||
thread_id=thread_id,
|
||||
with_components=bool(view),
|
||||
)
|
||||
|
||||
message = self._create_message(data, thread=thread)
|
||||
|
||||
@@ -329,6 +329,7 @@ class WebhookAdapter:
|
||||
multipart: Optional[List[Dict[str, Any]]] = None,
|
||||
files: Optional[Sequence[File]] = None,
|
||||
thread_id: Optional[int] = None,
|
||||
with_components: bool = False,
|
||||
) -> MessagePayload:
|
||||
route = Route(
|
||||
'PATCH',
|
||||
@@ -337,7 +338,9 @@ class WebhookAdapter:
|
||||
webhook_token=token,
|
||||
message_id=message_id,
|
||||
)
|
||||
params = None if thread_id is None else {'thread_id': thread_id}
|
||||
params = {'with_components': int(with_components)}
|
||||
if thread_id:
|
||||
params['thread_id'] = thread_id
|
||||
return self.request(route, session, payload=payload, multipart=multipart, files=files, params=params)
|
||||
|
||||
def delete_webhook_message(
|
||||
@@ -415,6 +418,7 @@ class SyncWebhookMessage(Message):
|
||||
embed: Optional[Embed] = MISSING,
|
||||
attachments: Sequence[Union[Attachment, File]] = MISSING,
|
||||
allowed_mentions: Optional[AllowedMentions] = None,
|
||||
view: Optional[BaseView] = MISSING,
|
||||
) -> SyncWebhookMessage:
|
||||
"""Edits the message.
|
||||
|
||||
@@ -443,6 +447,19 @@ class SyncWebhookMessage(Message):
|
||||
allowed_mentions: :class:`AllowedMentions`
|
||||
Controls the mentions being processed in this message.
|
||||
See :meth:`.abc.Messageable.send` for more information.
|
||||
view: Union[:class:`discord.ui.View`, :class:`discord.ui.LayoutView`]
|
||||
The updated view to update this message with. This can only have non-interactible items, which do not
|
||||
require a state to be attached to it. If ``None`` is passed then the view is removed.
|
||||
|
||||
If you want to edit a webhook message with any component attached to it, check :meth:`WebhookMessage.edit`.
|
||||
|
||||
.. note::
|
||||
|
||||
To update the message to add a :class:`~discord.ui.LayoutView`, you
|
||||
must explicitly set the ``content``, ``embed``, ``embeds``, and
|
||||
``attachments`` parameters to either ``None`` or an empty array, as appropriate.
|
||||
|
||||
.. versionadded:: 2.7
|
||||
|
||||
Raises
|
||||
-------
|
||||
@@ -451,7 +468,7 @@ class SyncWebhookMessage(Message):
|
||||
Forbidden
|
||||
Edited a message that is not yours.
|
||||
TypeError
|
||||
You specified both ``embed`` and ``embeds``
|
||||
You specified both ``embed`` and ``embeds``.
|
||||
ValueError
|
||||
The length of ``embeds`` was invalid or
|
||||
there was no token associated with this webhook.
|
||||
@@ -469,6 +486,7 @@ class SyncWebhookMessage(Message):
|
||||
attachments=attachments,
|
||||
allowed_mentions=allowed_mentions,
|
||||
thread=self._state._thread,
|
||||
view=view,
|
||||
)
|
||||
|
||||
def add_files(self, *files: File) -> SyncWebhookMessage:
|
||||
@@ -1245,6 +1263,12 @@ class SyncWebhook(BaseWebhook):
|
||||
|
||||
If you want to edit a webhook message with any component attached to it, check :meth:`WebhookMessage.edit`.
|
||||
|
||||
.. note::
|
||||
|
||||
To update the message to add a :class:`~discord.ui.LayoutView`, you
|
||||
must explicitly set the ``content``, ``embed``, ``embeds``, and
|
||||
``attachments`` parameters to either ``None`` or an empty array, as appropriate.
|
||||
|
||||
.. versionadded:: 2.6
|
||||
allowed_mentions: :class:`AllowedMentions`
|
||||
Controls the mentions being processed in this message.
|
||||
@@ -1270,6 +1294,13 @@ class SyncWebhook(BaseWebhook):
|
||||
if self.token is None:
|
||||
raise ValueError('This webhook does not have a token associated with it')
|
||||
|
||||
if view:
|
||||
if not hasattr(view, '__discord_ui_view__'):
|
||||
raise TypeError(f'expected view parameter to be of type View or LayoutView, not {view.__class__.__name__}')
|
||||
|
||||
if view.is_dispatchable():
|
||||
raise ValueError('SyncWebhooks can not send interactable components')
|
||||
|
||||
previous_mentions: Optional[AllowedMentions] = getattr(self._state, 'allowed_mentions', None)
|
||||
with handle_message_parameters(
|
||||
content=content,
|
||||
@@ -1278,6 +1309,7 @@ class SyncWebhook(BaseWebhook):
|
||||
embeds=embeds,
|
||||
allowed_mentions=allowed_mentions,
|
||||
previous_allowed_mentions=previous_mentions,
|
||||
view=view,
|
||||
) as params:
|
||||
thread_id: Optional[int] = None
|
||||
if thread is not MISSING:
|
||||
@@ -1293,6 +1325,7 @@ class SyncWebhook(BaseWebhook):
|
||||
multipart=params.multipart,
|
||||
files=params.files,
|
||||
thread_id=thread_id,
|
||||
with_components=bool(view),
|
||||
)
|
||||
return self._create_message(data, thread=thread)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user