Allow more methods to set an audit log reason

This commit is contained in:
Nadir Chowdhury
2020-07-01 04:35:42 +01:00
committed by GitHub
parent de556b01d1
commit e971e2f16c
4 changed files with 59 additions and 23 deletions

View File

@ -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):