diff options
Diffstat (limited to 'discord/webhook.py')
| -rw-r--r-- | discord/webhook.py | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/discord/webhook.py b/discord/webhook.py index 64136b9e..317c54c4 100644 --- a/discord/webhook.py +++ b/discord/webhook.py @@ -28,6 +28,7 @@ import asyncio import json import time import re +from urllib.parse import quote as _uriquote import aiohttp @@ -84,11 +85,11 @@ class WebhookAdapter: """ raise NotImplementedError() - def delete_webhook(self): - return self.request('DELETE', self._request_url) + def delete_webhook(self, *, reason=None): + return self.request('DELETE', self._request_url, reason=reason) - def edit_webhook(self, **payload): - return self.request('PATCH', self._request_url, payload=payload) + def edit_webhook(self, *, reason=None, **payload): + return self.request('PATCH', self._request_url, payload=payload, reason=reason) def handle_execution_response(self, data, *, wait): """Transforms the webhook execution response into something @@ -174,13 +175,16 @@ class AsyncWebhookAdapter(WebhookAdapter): self.session = session self.loop = asyncio.get_event_loop() - async def request(self, verb, url, payload=None, multipart=None, *, files=None): + async def request(self, verb, url, payload=None, multipart=None, *, files=None, reason=None): headers = {} data = None files = files or [] if payload: headers['Content-Type'] = 'application/json' data = utils.to_json(payload) + + if reason: + headers['X-Audit-Log-Reason'] = _uriquote(reason, safe='/ ') if multipart: data = aiohttp.FormData() @@ -260,13 +264,16 @@ class RequestsWebhookAdapter(WebhookAdapter): self.session = session or requests self.sleep = sleep - def request(self, verb, url, payload=None, multipart=None, *, files=None): + def request(self, verb, url, payload=None, multipart=None, *, files=None, reason=None): headers = {} data = None files = files or [] if payload: headers['Content-Type'] = 'application/json' data = utils.to_json(payload) + + if reason: + headers['X-Audit-Log-Reason'] = _uriquote(reason, safe='/ ') if multipart is not None: data = {'payload_json': multipart.pop('payload_json')} @@ -640,7 +647,7 @@ class Webhook(Hashable): url = '/avatars/{0.id}/{0.avatar}.{1}?size={2}'.format(self, format, size) return Asset(self._state, url) - def delete(self): + def delete(self, *, reason=None): """|maybecoro| Deletes this Webhook. @@ -648,6 +655,13 @@ class Webhook(Hashable): If the webhook is constructed with a :class:`RequestsWebhookAdapter` then this is not a coroutine. + Parameters + ------------ + reason: Optional[:class:`str`] + The reason for deleting this webhook. Shows up on the audit log. + + .. versionadded:: 1.4 + Raises ------- HTTPException @@ -662,9 +676,9 @@ class Webhook(Hashable): if self.token is None: raise InvalidArgument('This webhook does not have a token associated with it') - return self._adapter.delete_webhook() + return self._adapter.delete_webhook(reason=reason) - def edit(self, **kwargs): + def edit(self, *, reason=None, **kwargs): """|maybecoro| Edits this Webhook. @@ -673,11 +687,15 @@ class Webhook(Hashable): not a coroutine. Parameters - ------------- + ------------ name: Optional[:class:`str`] The webhook's new default name. avatar: Optional[:class:`bytes`] A :term:`py:bytes-like object` representing the webhook's new default avatar. + reason: Optional[:class:`str`] + The reason for deleting this webhook. Shows up on the audit log. + + .. versionadded:: 1.4 Raises ------- @@ -713,7 +731,7 @@ class Webhook(Hashable): else: payload['avatar'] = None - return self._adapter.edit_webhook(**payload) + return self._adapter.edit_webhook(reason=reason, **payload) def send(self, content=None, *, wait=False, username=None, avatar_url=None, tts=False, file=None, files=None, embed=None, embeds=None, allowed_mentions=None): |