diff options
| author | Rapptz <[email protected]> | 2021-08-23 23:46:50 -0400 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2021-08-23 23:46:50 -0400 |
| commit | 490bbffc935856f885edd9a2d1505ac228c38f72 (patch) | |
| tree | 46a2aa80b6ebbe1faddd3ddd8c338cce1e8eb613 /discord/webhook | |
| parent | Fix typing of move role position payload parameter (diff) | |
| download | discord.py-490bbffc935856f885edd9a2d1505ac228c38f72.tar.xz discord.py-490bbffc935856f885edd9a2d1505ac228c38f72.zip | |
Remove in-place edits and return fresh instances instead
Fixes #4098
Diffstat (limited to 'discord/webhook')
| -rw-r--r-- | discord/webhook/async_.py | 38 | ||||
| -rw-r--r-- | discord/webhook/sync.py | 31 |
2 files changed, 51 insertions, 18 deletions
diff --git a/discord/webhook/async_.py b/discord/webhook/async_.py index bcd7903b..40052283 100644 --- a/discord/webhook/async_.py +++ b/discord/webhook/async_.py @@ -647,13 +647,16 @@ class WebhookMessage(Message): files: List[File] = MISSING, view: Optional[View] = MISSING, allowed_mentions: Optional[AllowedMentions] = None, - ): + ) -> WebhookMessage: """|coro| Edits the message. .. versionadded:: 1.6 + .. versionchanged:: 2.0 + The edit is no longer in-place, instead the newly edited message is returned. + Parameters ------------ content: Optional[:class:`str`] @@ -693,8 +696,13 @@ class WebhookMessage(Message): The length of ``embeds`` was invalid InvalidArgument There was no token associated with this webhook. + + Returns + -------- + :class:`WebhookMessage` + The newly edited message. """ - await self._state._webhook.edit_message( + return await self._state._webhook.edit_message( self.id, content=content, embeds=embeds, @@ -1117,7 +1125,7 @@ class Webhook(BaseWebhook): avatar: Optional[bytes] = MISSING, channel: Optional[Snowflake] = None, prefer_auth: bool = True, - ): + ) -> Webhook: """|coro| Edits this Webhook. @@ -1164,6 +1172,7 @@ class Webhook(BaseWebhook): adapter = async_context.get() + data: Optional[WebhookPayload] = None # If a channel is given, always use the authenticated endpoint if channel is not None: if self.auth_token is None: @@ -1171,17 +1180,18 @@ class Webhook(BaseWebhook): payload['channel_id'] = channel.id data = await adapter.edit_webhook(self.id, self.auth_token, payload=payload, session=self.session, reason=reason) - self._update(data) - return if prefer_auth and self.auth_token: data = await adapter.edit_webhook(self.id, self.auth_token, payload=payload, session=self.session, reason=reason) - self._update(data) elif self.token: data = await adapter.edit_webhook_with_token( self.id, self.token, payload=payload, session=self.session, reason=reason ) - self._update(data) + + if data is None: + raise RuntimeError('Unreachable code hit: data was not assigned') + + return Webhook(data=data, session=self.session, token=self.auth_token, state=self._state) def _create_message(self, data): state = _WebhookState(self, parent=self._state) @@ -1446,7 +1456,7 @@ class Webhook(BaseWebhook): files: List[File] = MISSING, view: Optional[View] = MISSING, allowed_mentions: Optional[AllowedMentions] = None, - ): + ) -> WebhookMessage: """|coro| Edits a message owned by this webhook. @@ -1456,6 +1466,9 @@ class Webhook(BaseWebhook): .. versionadded:: 1.6 + .. versionchanged:: 2.0 + The edit is no longer in-place, instead the newly edited message is returned. + Parameters ------------ message_id: :class:`int` @@ -1499,6 +1512,11 @@ class Webhook(BaseWebhook): InvalidArgument There was no token associated with this webhook or the webhook had no state. + + Returns + -------- + :class:`WebhookMessage` + The newly edited webhook message. """ if self.token is None: @@ -1522,7 +1540,7 @@ class Webhook(BaseWebhook): previous_allowed_mentions=previous_mentions, ) adapter = async_context.get() - await adapter.edit_webhook_message( + data = await adapter.edit_webhook_message( self.id, self.token, message_id, @@ -1532,8 +1550,10 @@ class Webhook(BaseWebhook): files=params.files, ) + message = self._create_message(data) if view and not view.is_finished(): self._state.store_view(view, message_id) + return message async def delete_message(self, message_id: int): """|coro| diff --git a/discord/webhook/sync.py b/discord/webhook/sync.py index 170b387d..89dc3c17 100644 --- a/discord/webhook/sync.py +++ b/discord/webhook/sync.py @@ -383,7 +383,7 @@ class SyncWebhookMessage(Message): file: File = MISSING, files: List[File] = MISSING, allowed_mentions: Optional[AllowedMentions] = None, - ): + ) -> SyncWebhookMessage: """Edits the message. Parameters @@ -416,8 +416,13 @@ class SyncWebhookMessage(Message): The length of ``embeds`` was invalid InvalidArgument There was no token associated with this webhook. + + Returns + -------- + :class:`SyncWebhookMessage` + The newly edited message. """ - self._state._webhook.edit_message( + return self._state._webhook.edit_message( self.id, content=content, embeds=embeds, @@ -687,7 +692,7 @@ class SyncWebhook(BaseWebhook): avatar: Optional[bytes] = MISSING, channel: Optional[Snowflake] = None, prefer_auth: bool = True, - ): + ) -> SyncWebhook: """Edits this Webhook. Parameters @@ -715,6 +720,11 @@ class SyncWebhook(BaseWebhook): InvalidArgument This webhook does not have a token associated with it or it tried editing a channel without authentication. + + Returns + -------- + :class:`SyncWebhook` + The newly edited webhook. """ if self.token is None and self.auth_token is None: raise InvalidArgument('This webhook does not have a token associated with it') @@ -728,6 +738,7 @@ class SyncWebhook(BaseWebhook): adapter: WebhookAdapter = _get_webhook_adapter() + data: Optional[WebhookPayload] = None # If a channel is given, always use the authenticated endpoint if channel is not None: if self.auth_token is None: @@ -735,15 +746,16 @@ class SyncWebhook(BaseWebhook): payload['channel_id'] = channel.id data = adapter.edit_webhook(self.id, self.auth_token, payload=payload, session=self.session, reason=reason) - self._update(data) - return if prefer_auth and self.auth_token: data = adapter.edit_webhook(self.id, self.auth_token, payload=payload, session=self.session, reason=reason) - self._update(data) elif self.token: data = adapter.edit_webhook_with_token(self.id, self.token, payload=payload, session=self.session, reason=reason) - self._update(data) + + if data is None: + raise RuntimeError('Unreachable code hit: data was not assigned') + + return SyncWebhook(data=data, session=self.session, token=self.auth_token, state=self._state) def _create_message(self, data): state = _WebhookState(self, parent=self._state) @@ -955,7 +967,7 @@ class SyncWebhook(BaseWebhook): file: File = MISSING, files: List[File] = MISSING, allowed_mentions: Optional[AllowedMentions] = None, - ): + ) -> SyncWebhookMessage: """Edits a message owned by this webhook. This is a lower level interface to :meth:`WebhookMessage.edit` in case @@ -1011,7 +1023,7 @@ class SyncWebhook(BaseWebhook): previous_allowed_mentions=previous_mentions, ) adapter: WebhookAdapter = _get_webhook_adapter() - adapter.edit_webhook_message( + data = adapter.edit_webhook_message( self.id, self.token, message_id, @@ -1020,6 +1032,7 @@ class SyncWebhook(BaseWebhook): multipart=params.multipart, files=params.files, ) + return self._create_message(data) def delete_message(self, message_id: int): """Deletes a message owned by this webhook. |