Browse Source

Fix webhooks and interactions not closing files after a request

pull/10109/head
Rapptz 2 years ago
committed by dolfies
parent
commit
57b118b393
  1. 16
      discord/message.py
  2. 73
      discord/webhook/async_.py
  3. 70
      discord/webhook/sync.py

16
discord/message.py

@ -825,14 +825,14 @@ class PartialMessage(Hashable):
else: else:
previous_allowed_mentions = None previous_allowed_mentions = None
params = handle_message_parameters( with handle_message_parameters(
content=content, content=content,
attachments=attachments, attachments=attachments,
allowed_mentions=allowed_mentions, allowed_mentions=allowed_mentions,
previous_allowed_mentions=previous_allowed_mentions, previous_allowed_mentions=previous_allowed_mentions,
) ) as params:
data = await self._state.http.edit_message(self.channel.id, self.id, params=params) data = await self._state.http.edit_message(self.channel.id, self.id, params=params)
message = Message(state=self._state, channel=self.channel, data=data) message = Message(state=self._state, channel=self.channel, data=data)
if delete_after is not None: if delete_after is not None:
await self.delete(delay=delete_after) await self.delete(delay=delete_after)
@ -1999,15 +1999,15 @@ class Message(PartialMessage, Hashable):
else: else:
flags = MISSING flags = MISSING
params = handle_message_parameters( with handle_message_parameters(
content=content, content=content,
flags=flags, flags=flags,
attachments=attachments, attachments=attachments,
allowed_mentions=allowed_mentions, allowed_mentions=allowed_mentions,
previous_allowed_mentions=previous_allowed_mentions, previous_allowed_mentions=previous_allowed_mentions,
) ) as params:
data = await self._state.http.edit_message(self.channel.id, self.id, params=params) data = await self._state.http.edit_message(self.channel.id, self.id, params=params)
message = Message(state=self._state, channel=self.channel, data=data) message = Message(state=self._state, channel=self.channel, data=data)
if delete_after is not None: if delete_after is not None:
await self.delete(delay=delete_after) await self.delete(delay=delete_after)

73
discord/webhook/async_.py

@ -1462,7 +1462,7 @@ class Webhook(BaseWebhook):
if thread_name is not MISSING and thread is not MISSING: if thread_name is not MISSING and thread is not MISSING:
raise TypeError('Cannot mix thread_name and thread keyword arguments.') raise TypeError('Cannot mix thread_name and thread keyword arguments.')
params = handle_message_parameters( with handle_message_parameters(
content=content, content=content,
username=username, username=username,
avatar_url=avatar_url, avatar_url=avatar_url,
@ -1475,24 +1475,24 @@ class Webhook(BaseWebhook):
thread_name=thread_name, thread_name=thread_name,
allowed_mentions=allowed_mentions, allowed_mentions=allowed_mentions,
previous_allowed_mentions=previous_mentions, previous_allowed_mentions=previous_mentions,
) ) as params:
adapter = async_context.get() adapter = async_context.get()
thread_id: Optional[int] = None thread_id: Optional[int] = None
if thread is not MISSING: if thread is not MISSING:
thread_id = thread.id thread_id = thread.id
data = await adapter.execute_webhook( data = await adapter.execute_webhook(
self.id, self.id,
self.token, self.token,
session=self.session, session=self.session,
proxy=self.proxy, proxy=self.proxy,
proxy_auth=self.proxy_auth, proxy_auth=self.proxy_auth,
payload=params.payload, payload=params.payload,
multipart=params.multipart, multipart=params.multipart,
files=params.files, files=params.files,
thread_id=thread_id, thread_id=thread_id,
wait=wait, wait=wait,
) )
msg = None msg = None
if wait: if wait:
@ -1624,32 +1624,31 @@ class Webhook(BaseWebhook):
raise ValueError('This webhook does not have a token associated with it') raise ValueError('This webhook does not have a token associated with it')
previous_mentions: Optional[AllowedMentions] = getattr(self._state, 'allowed_mentions', None) previous_mentions: Optional[AllowedMentions] = getattr(self._state, 'allowed_mentions', None)
params = handle_message_parameters( with handle_message_parameters(
content=content, content=content,
attachments=attachments, attachments=attachments,
embed=embed, embed=embed,
embeds=embeds, embeds=embeds,
allowed_mentions=allowed_mentions, allowed_mentions=allowed_mentions,
previous_allowed_mentions=previous_mentions, previous_allowed_mentions=previous_mentions,
) ) as params:
thread_id: Optional[int] = None
if thread is not MISSING:
thread_id = thread.id
thread_id: Optional[int] = None adapter = async_context.get()
if thread is not MISSING: data = await adapter.edit_webhook_message(
thread_id = thread.id self.id,
self.token,
adapter = async_context.get() message_id,
data = await adapter.edit_webhook_message( session=self.session,
self.id, proxy=self.proxy,
self.token, proxy_auth=self.proxy_auth,
message_id, payload=params.payload,
session=self.session, multipart=params.multipart,
proxy=self.proxy, files=params.files,
proxy_auth=self.proxy_auth, thread_id=thread_id,
payload=params.payload, )
multipart=params.multipart,
files=params.files,
thread_id=thread_id,
)
message = self._create_message(data, thread=thread) message = self._create_message(data, thread=thread)
return message return message

70
discord/webhook/sync.py

@ -1004,7 +1004,7 @@ class SyncWebhook(BaseWebhook):
if thread_name is not MISSING and thread is not MISSING: if thread_name is not MISSING and thread is not MISSING:
raise TypeError('Cannot mix thread_name and thread keyword arguments.') raise TypeError('Cannot mix thread_name and thread keyword arguments.')
params = handle_message_parameters( with handle_message_parameters(
content=content, content=content,
username=username, username=username,
avatar_url=avatar_url, avatar_url=avatar_url,
@ -1017,22 +1017,23 @@ class SyncWebhook(BaseWebhook):
allowed_mentions=allowed_mentions, allowed_mentions=allowed_mentions,
previous_allowed_mentions=previous_mentions, previous_allowed_mentions=previous_mentions,
flags=flags, flags=flags,
) ) as params:
adapter: WebhookAdapter = _get_webhook_adapter() adapter: WebhookAdapter = _get_webhook_adapter()
thread_id: Optional[int] = None thread_id: Optional[int] = None
if thread is not MISSING: if thread is not MISSING:
thread_id = thread.id thread_id = thread.id
data = adapter.execute_webhook(
self.id,
self.token,
session=self.session,
payload=params.payload,
multipart=params.multipart,
files=params.files,
thread_id=thread_id,
wait=wait,
)
data = adapter.execute_webhook(
self.id,
self.token,
session=self.session,
payload=params.payload,
multipart=params.multipart,
files=params.files,
thread_id=thread_id,
wait=wait,
)
if wait: if wait:
return self._create_message(data, thread=thread) return self._create_message(data, thread=thread)
@ -1141,31 +1142,30 @@ class SyncWebhook(BaseWebhook):
raise ValueError('This webhook does not have a token associated with it') raise ValueError('This webhook does not have a token associated with it')
previous_mentions: Optional[AllowedMentions] = getattr(self._state, 'allowed_mentions', None) previous_mentions: Optional[AllowedMentions] = getattr(self._state, 'allowed_mentions', None)
params = handle_message_parameters( with handle_message_parameters(
content=content, content=content,
attachments=attachments, attachments=attachments,
embed=embed, embed=embed,
embeds=embeds, embeds=embeds,
allowed_mentions=allowed_mentions, allowed_mentions=allowed_mentions,
previous_allowed_mentions=previous_mentions, previous_allowed_mentions=previous_mentions,
) ) as params:
thread_id: Optional[int] = None
thread_id: Optional[int] = None if thread is not MISSING:
if thread is not MISSING: thread_id = thread.id
thread_id = thread.id
adapter: WebhookAdapter = _get_webhook_adapter()
adapter: WebhookAdapter = _get_webhook_adapter() data = adapter.edit_webhook_message(
data = adapter.edit_webhook_message( self.id,
self.id, self.token,
self.token, message_id,
message_id, session=self.session,
session=self.session, payload=params.payload,
payload=params.payload, multipart=params.multipart,
multipart=params.multipart, files=params.files,
files=params.files, thread_id=thread_id,
thread_id=thread_id, )
) return self._create_message(data, thread=thread)
return self._create_message(data, thread=thread)
def delete_message(self, message_id: int, /, *, thread: Snowflake = MISSING) -> None: def delete_message(self, message_id: int, /, *, thread: Snowflake = MISSING) -> None:
"""Deletes a message owned by this webhook. """Deletes a message owned by this webhook.

Loading…
Cancel
Save