|
|
@ -129,6 +129,8 @@ class AsyncWebhookAdapter: |
|
|
|
*, |
|
|
|
payload: Optional[Dict[str, Any]] = None, |
|
|
|
multipart: Optional[List[Dict[str, Any]]] = None, |
|
|
|
proxy: Optional[str] = None, |
|
|
|
proxy_auth: Optional[aiohttp.BasicAuth] = None, |
|
|
|
files: Optional[Sequence[File]] = None, |
|
|
|
reason: Optional[str] = None, |
|
|
|
auth_token: Optional[str] = None, |
|
|
@ -234,10 +236,12 @@ class AsyncWebhookAdapter: |
|
|
|
*, |
|
|
|
token: Optional[str] = None, |
|
|
|
session: aiohttp.ClientSession, |
|
|
|
proxy: Optional[str] = None, |
|
|
|
proxy_auth: Optional[aiohttp.BasicAuth] = None, |
|
|
|
reason: Optional[str] = None, |
|
|
|
) -> Response[None]: |
|
|
|
route = Route('DELETE', '/webhooks/{webhook_id}', webhook_id=webhook_id) |
|
|
|
return self.request(route, session, reason=reason, auth_token=token) |
|
|
|
return self.request(route, session=session, proxy=proxy, proxy_auth=proxy_auth, reason=reason, auth_token=token) |
|
|
|
|
|
|
|
def delete_webhook_with_token( |
|
|
|
self, |
|
|
@ -245,10 +249,12 @@ class AsyncWebhookAdapter: |
|
|
|
token: str, |
|
|
|
*, |
|
|
|
session: aiohttp.ClientSession, |
|
|
|
proxy: Optional[str] = None, |
|
|
|
proxy_auth: Optional[aiohttp.BasicAuth] = None, |
|
|
|
reason: Optional[str] = None, |
|
|
|
) -> Response[None]: |
|
|
|
route = Route('DELETE', '/webhooks/{webhook_id}/{webhook_token}', webhook_id=webhook_id, webhook_token=token) |
|
|
|
return self.request(route, session, reason=reason) |
|
|
|
return self.request(route, session=session, proxy=proxy, proxy_auth=proxy_auth, reason=reason) |
|
|
|
|
|
|
|
def edit_webhook( |
|
|
|
self, |
|
|
@ -257,10 +263,20 @@ class AsyncWebhookAdapter: |
|
|
|
payload: Dict[str, Any], |
|
|
|
*, |
|
|
|
session: aiohttp.ClientSession, |
|
|
|
proxy: Optional[str] = None, |
|
|
|
proxy_auth: Optional[aiohttp.BasicAuth] = None, |
|
|
|
reason: Optional[str] = None, |
|
|
|
) -> Response[WebhookPayload]: |
|
|
|
route = Route('PATCH', '/webhooks/{webhook_id}', webhook_id=webhook_id) |
|
|
|
return self.request(route, session, reason=reason, payload=payload, auth_token=token) |
|
|
|
return self.request( |
|
|
|
route, |
|
|
|
session=session, |
|
|
|
proxy=proxy, |
|
|
|
proxy_auth=proxy_auth, |
|
|
|
reason=reason, |
|
|
|
payload=payload, |
|
|
|
auth_token=token, |
|
|
|
) |
|
|
|
|
|
|
|
def edit_webhook_with_token( |
|
|
|
self, |
|
|
@ -269,10 +285,12 @@ class AsyncWebhookAdapter: |
|
|
|
payload: Dict[str, Any], |
|
|
|
*, |
|
|
|
session: aiohttp.ClientSession, |
|
|
|
proxy: Optional[str] = None, |
|
|
|
proxy_auth: Optional[aiohttp.BasicAuth] = None, |
|
|
|
reason: Optional[str] = None, |
|
|
|
) -> Response[WebhookPayload]: |
|
|
|
route = Route('PATCH', '/webhooks/{webhook_id}/{webhook_token}', webhook_id=webhook_id, webhook_token=token) |
|
|
|
return self.request(route, session, reason=reason, payload=payload) |
|
|
|
return self.request(route, session=session, proxy=proxy, proxy_auth=proxy_auth, reason=reason, payload=payload) |
|
|
|
|
|
|
|
def execute_webhook( |
|
|
|
self, |
|
|
@ -280,6 +298,8 @@ class AsyncWebhookAdapter: |
|
|
|
token: str, |
|
|
|
*, |
|
|
|
session: aiohttp.ClientSession, |
|
|
|
proxy: Optional[str] = None, |
|
|
|
proxy_auth: Optional[aiohttp.BasicAuth] = None, |
|
|
|
payload: Optional[Dict[str, Any]] = None, |
|
|
|
multipart: Optional[List[Dict[str, Any]]] = None, |
|
|
|
files: Optional[Sequence[File]] = None, |
|
|
@ -290,7 +310,16 @@ class AsyncWebhookAdapter: |
|
|
|
if thread_id: |
|
|
|
params['thread_id'] = thread_id |
|
|
|
route = Route('POST', '/webhooks/{webhook_id}/{webhook_token}', webhook_id=webhook_id, webhook_token=token) |
|
|
|
return self.request(route, session, payload=payload, multipart=multipart, files=files, params=params) |
|
|
|
return self.request( |
|
|
|
route, |
|
|
|
session=session, |
|
|
|
proxy=proxy, |
|
|
|
proxy_auth=proxy_auth, |
|
|
|
payload=payload, |
|
|
|
multipart=multipart, |
|
|
|
files=files, |
|
|
|
params=params, |
|
|
|
) |
|
|
|
|
|
|
|
def get_webhook_message( |
|
|
|
self, |
|
|
@ -299,6 +328,8 @@ class AsyncWebhookAdapter: |
|
|
|
message_id: int, |
|
|
|
*, |
|
|
|
session: aiohttp.ClientSession, |
|
|
|
proxy: Optional[str] = None, |
|
|
|
proxy_auth: Optional[aiohttp.BasicAuth] = None, |
|
|
|
thread_id: Optional[int] = None, |
|
|
|
) -> Response[MessagePayload]: |
|
|
|
route = Route( |
|
|
@ -309,7 +340,7 @@ class AsyncWebhookAdapter: |
|
|
|
message_id=message_id, |
|
|
|
) |
|
|
|
params = None if thread_id is None else {'thread_id': thread_id} |
|
|
|
return self.request(route, session, params=params) |
|
|
|
return self.request(route, session=session, proxy=proxy, proxy_auth=proxy_auth, params=params) |
|
|
|
|
|
|
|
def edit_webhook_message( |
|
|
|
self, |
|
|
@ -318,6 +349,8 @@ class AsyncWebhookAdapter: |
|
|
|
message_id: int, |
|
|
|
*, |
|
|
|
session: aiohttp.ClientSession, |
|
|
|
proxy: Optional[str] = None, |
|
|
|
proxy_auth: Optional[aiohttp.BasicAuth] = None, |
|
|
|
payload: Optional[Dict[str, Any]] = None, |
|
|
|
multipart: Optional[List[Dict[str, Any]]] = None, |
|
|
|
files: Optional[Sequence[File]] = None, |
|
|
@ -331,7 +364,16 @@ class AsyncWebhookAdapter: |
|
|
|
message_id=message_id, |
|
|
|
) |
|
|
|
params = None if thread_id is None else {'thread_id': thread_id} |
|
|
|
return self.request(route, session, payload=payload, multipart=multipart, files=files, params=params) |
|
|
|
return self.request( |
|
|
|
route, |
|
|
|
session=session, |
|
|
|
proxy=proxy, |
|
|
|
proxy_auth=proxy_auth, |
|
|
|
payload=payload, |
|
|
|
multipart=multipart, |
|
|
|
files=files, |
|
|
|
params=params, |
|
|
|
) |
|
|
|
|
|
|
|
def delete_webhook_message( |
|
|
|
self, |
|
|
@ -340,6 +382,8 @@ class AsyncWebhookAdapter: |
|
|
|
message_id: int, |
|
|
|
*, |
|
|
|
session: aiohttp.ClientSession, |
|
|
|
proxy: Optional[str] = None, |
|
|
|
proxy_auth: Optional[aiohttp.BasicAuth] = None, |
|
|
|
thread_id: Optional[int] = None, |
|
|
|
) -> Response[None]: |
|
|
|
route = Route( |
|
|
@ -350,7 +394,7 @@ class AsyncWebhookAdapter: |
|
|
|
message_id=message_id, |
|
|
|
) |
|
|
|
params = None if thread_id is None else {'thread_id': thread_id} |
|
|
|
return self.request(route, session, params=params) |
|
|
|
return self.request(route, session=session, proxy=proxy, proxy_auth=proxy_auth, params=params) |
|
|
|
|
|
|
|
def fetch_webhook( |
|
|
|
self, |
|
|
@ -358,9 +402,11 @@ class AsyncWebhookAdapter: |
|
|
|
token: str, |
|
|
|
*, |
|
|
|
session: aiohttp.ClientSession, |
|
|
|
proxy: Optional[str] = None, |
|
|
|
proxy_auth: Optional[aiohttp.BasicAuth] = None, |
|
|
|
) -> Response[WebhookPayload]: |
|
|
|
route = Route('GET', '/webhooks/{webhook_id}', webhook_id=webhook_id) |
|
|
|
return self.request(route, session=session, auth_token=token) |
|
|
|
return self.request(route, session=session, proxy=proxy, proxy_auth=proxy_auth, auth_token=token) |
|
|
|
|
|
|
|
def fetch_webhook_with_token( |
|
|
|
self, |
|
|
@ -368,9 +414,11 @@ class AsyncWebhookAdapter: |
|
|
|
token: str, |
|
|
|
*, |
|
|
|
session: aiohttp.ClientSession, |
|
|
|
proxy: Optional[str] = None, |
|
|
|
proxy_auth: Optional[aiohttp.BasicAuth] = None, |
|
|
|
) -> Response[WebhookPayload]: |
|
|
|
route = Route('GET', '/webhooks/{webhook_id}/{webhook_token}', webhook_id=webhook_id, webhook_token=token) |
|
|
|
return self.request(route, session=session) |
|
|
|
return self.request(route, session=session, proxy=proxy, proxy_auth=proxy_auth) |
|
|
|
|
|
|
|
def create_interaction_response( |
|
|
|
self, |
|
|
@ -378,6 +426,8 @@ class AsyncWebhookAdapter: |
|
|
|
token: str, |
|
|
|
*, |
|
|
|
session: aiohttp.ClientSession, |
|
|
|
proxy: Optional[str] = None, |
|
|
|
proxy_auth: Optional[aiohttp.BasicAuth] = None, |
|
|
|
params: MultipartParameters, |
|
|
|
) -> Response[None]: |
|
|
|
route = Route( |
|
|
@ -388,9 +438,16 @@ class AsyncWebhookAdapter: |
|
|
|
) |
|
|
|
|
|
|
|
if params.files: |
|
|
|
return self.request(route, session=session, files=params.files, multipart=params.multipart) |
|
|
|
return self.request( |
|
|
|
route, |
|
|
|
session=session, |
|
|
|
proxy=proxy, |
|
|
|
proxy_auth=proxy_auth, |
|
|
|
files=params.files, |
|
|
|
multipart=params.multipart, |
|
|
|
) |
|
|
|
else: |
|
|
|
return self.request(route, session=session, payload=params.payload) |
|
|
|
return self.request(route, session=session, proxy=proxy, proxy_auth=proxy_auth, payload=params.payload) |
|
|
|
|
|
|
|
def get_original_interaction_response( |
|
|
|
self, |
|
|
@ -398,6 +455,8 @@ class AsyncWebhookAdapter: |
|
|
|
token: str, |
|
|
|
*, |
|
|
|
session: aiohttp.ClientSession, |
|
|
|
proxy: Optional[str] = None, |
|
|
|
proxy_auth: Optional[aiohttp.BasicAuth] = None, |
|
|
|
) -> Response[MessagePayload]: |
|
|
|
r = Route( |
|
|
|
'GET', |
|
|
@ -405,7 +464,7 @@ class AsyncWebhookAdapter: |
|
|
|
webhook_id=application_id, |
|
|
|
webhook_token=token, |
|
|
|
) |
|
|
|
return self.request(r, session=session) |
|
|
|
return self.request(r, session=session, proxy=proxy, proxy_auth=proxy_auth) |
|
|
|
|
|
|
|
def edit_original_interaction_response( |
|
|
|
self, |
|
|
@ -413,6 +472,8 @@ class AsyncWebhookAdapter: |
|
|
|
token: str, |
|
|
|
*, |
|
|
|
session: aiohttp.ClientSession, |
|
|
|
proxy: Optional[str] = None, |
|
|
|
proxy_auth: Optional[aiohttp.BasicAuth] = None, |
|
|
|
payload: Optional[Dict[str, Any]] = None, |
|
|
|
multipart: Optional[List[Dict[str, Any]]] = None, |
|
|
|
files: Optional[Sequence[File]] = None, |
|
|
@ -423,7 +484,15 @@ class AsyncWebhookAdapter: |
|
|
|
webhook_id=application_id, |
|
|
|
webhook_token=token, |
|
|
|
) |
|
|
|
return self.request(r, session, payload=payload, multipart=multipart, files=files) |
|
|
|
return self.request( |
|
|
|
r, |
|
|
|
session=session, |
|
|
|
proxy=proxy, |
|
|
|
proxy_auth=proxy_auth, |
|
|
|
payload=payload, |
|
|
|
multipart=multipart, |
|
|
|
files=files, |
|
|
|
) |
|
|
|
|
|
|
|
def delete_original_interaction_response( |
|
|
|
self, |
|
|
@ -431,6 +500,8 @@ class AsyncWebhookAdapter: |
|
|
|
token: str, |
|
|
|
*, |
|
|
|
session: aiohttp.ClientSession, |
|
|
|
proxy: Optional[str] = None, |
|
|
|
proxy_auth: Optional[aiohttp.BasicAuth] = None, |
|
|
|
) -> Response[None]: |
|
|
|
r = Route( |
|
|
|
'DELETE', |
|
|
@ -438,7 +509,7 @@ class AsyncWebhookAdapter: |
|
|
|
webhook_id=application_id, |
|
|
|
webhook_token=token, |
|
|
|
) |
|
|
|
return self.request(r, session=session) |
|
|
|
return self.request(r, session=session, proxy=proxy, proxy_auth=proxy_auth) |
|
|
|
|
|
|
|
|
|
|
|
def interaction_response_params(type: int, data: Optional[Dict[str, Any]] = None) -> MultipartParameters: |
|
|
@ -1058,7 +1129,7 @@ class Webhook(BaseWebhook): |
|
|
|
.. versionadded:: 2.0 |
|
|
|
""" |
|
|
|
|
|
|
|
__slots__: Tuple[str, ...] = ('session',) |
|
|
|
__slots__: Tuple[str, ...] = ('session', 'proxy', 'proxy_auth') |
|
|
|
|
|
|
|
def __init__( |
|
|
|
self, |
|
|
@ -1066,9 +1137,13 @@ class Webhook(BaseWebhook): |
|
|
|
session: aiohttp.ClientSession, |
|
|
|
token: Optional[str] = None, |
|
|
|
state: Optional[_State] = None, |
|
|
|
proxy: Optional[str] = None, |
|
|
|
proxy_auth: Optional[aiohttp.BasicAuth] = None, |
|
|
|
) -> None: |
|
|
|
super().__init__(data, token, state) |
|
|
|
self.session: aiohttp.ClientSession = session |
|
|
|
self.proxy: Optional[str] = proxy |
|
|
|
self.proxy_auth: Optional[aiohttp.BasicAuth] = proxy_auth |
|
|
|
|
|
|
|
def __repr__(self) -> str: |
|
|
|
return f'<Webhook id={self.id!r}>' |
|
|
@ -1170,13 +1245,19 @@ class Webhook(BaseWebhook): |
|
|
|
} |
|
|
|
|
|
|
|
state = channel._state |
|
|
|
session = channel._state.http._HTTPClient__session |
|
|
|
return cls(feed, session=session, state=state, token=state.http.token) |
|
|
|
http = state.http |
|
|
|
session = http._HTTPClient__session |
|
|
|
proxy_auth = http.proxy_auth |
|
|
|
proxy = http.proxy |
|
|
|
return cls(feed, session=session, state=state, proxy_auth=proxy_auth, proxy=proxy, token=state.http.token) |
|
|
|
|
|
|
|
@classmethod |
|
|
|
def from_state(cls, data: WebhookPayload, state: ConnectionState) -> Self: |
|
|
|
session = state.http._HTTPClient__session # type: ignore |
|
|
|
return cls(data, session=session, state=state, token=state.http.token) |
|
|
|
http = state.http |
|
|
|
session = http._HTTPClient__session # type: ignore |
|
|
|
proxy_auth = http.proxy_auth |
|
|
|
proxy = http.proxy |
|
|
|
return cls(data, session=session, state=state, proxy_auth=proxy_auth, proxy=proxy, token=state.http.token) |
|
|
|
|
|
|
|
async def fetch(self, *, prefer_auth: bool = True) -> Webhook: |
|
|
|
"""|coro| |
|
|
@ -1216,13 +1297,32 @@ class Webhook(BaseWebhook): |
|
|
|
adapter = async_context.get() |
|
|
|
|
|
|
|
if prefer_auth and self.auth_token: |
|
|
|
data = await adapter.fetch_webhook(self.id, self.auth_token, session=self.session) |
|
|
|
data = await adapter.fetch_webhook( |
|
|
|
self.id, |
|
|
|
self.auth_token, |
|
|
|
session=self.session, |
|
|
|
proxy=self.proxy, |
|
|
|
proxy_auth=self.proxy_auth, |
|
|
|
) |
|
|
|
elif self.token: |
|
|
|
data = await adapter.fetch_webhook_with_token(self.id, self.token, session=self.session) |
|
|
|
data = await adapter.fetch_webhook_with_token( |
|
|
|
self.id, |
|
|
|
self.token, |
|
|
|
session=self.session, |
|
|
|
proxy=self.proxy, |
|
|
|
proxy_auth=self.proxy_auth, |
|
|
|
) |
|
|
|
else: |
|
|
|
raise ValueError('This webhook does not have a token associated with it') |
|
|
|
|
|
|
|
return Webhook(data, self.session, token=self.auth_token, state=self._state) |
|
|
|
return Webhook( |
|
|
|
data, |
|
|
|
session=self.session, |
|
|
|
proxy=self.proxy, |
|
|
|
proxy_auth=self.proxy_auth, |
|
|
|
token=self.auth_token, |
|
|
|
state=self._state, |
|
|
|
) |
|
|
|
|
|
|
|
async def delete(self, *, reason: Optional[str] = None, prefer_auth: bool = True) -> None: |
|
|
|
"""|coro| |
|
|
@ -1258,9 +1358,18 @@ class Webhook(BaseWebhook): |
|
|
|
adapter = async_context.get() |
|
|
|
|
|
|
|
if prefer_auth and self.auth_token: |
|
|
|
await adapter.delete_webhook(self.id, token=self.auth_token, session=self.session, reason=reason) |
|
|
|
await adapter.delete_webhook( |
|
|
|
self.id, |
|
|
|
token=self.auth_token, |
|
|
|
session=self.session, |
|
|
|
proxy=self.proxy, |
|
|
|
proxy_auth=self.proxy_auth, |
|
|
|
reason=reason, |
|
|
|
) |
|
|
|
elif self.token: |
|
|
|
await adapter.delete_webhook_with_token(self.id, self.token, session=self.session, reason=reason) |
|
|
|
await adapter.delete_webhook_with_token( |
|
|
|
self.id, self.token, session=self.session, proxy=self.proxy, proxy_auth=self.proxy_auth, reason=reason, |
|
|
|
) |
|
|
|
|
|
|
|
async def edit( |
|
|
|
self, |
|
|
@ -1328,19 +1437,48 @@ class Webhook(BaseWebhook): |
|
|
|
raise ValueError('Editing channel requires authenticated webhook') |
|
|
|
|
|
|
|
payload['channel_id'] = channel.id |
|
|
|
data = await adapter.edit_webhook(self.id, self.auth_token, payload=payload, session=self.session, reason=reason) |
|
|
|
data = await adapter.edit_webhook( |
|
|
|
self.id, |
|
|
|
self.auth_token, |
|
|
|
payload=payload, |
|
|
|
session=self.session, |
|
|
|
proxy=self.proxy, |
|
|
|
proxy_auth=self.proxy_auth, |
|
|
|
reason=reason, |
|
|
|
) |
|
|
|
|
|
|
|
if prefer_auth and self.auth_token: |
|
|
|
data = await adapter.edit_webhook(self.id, self.auth_token, payload=payload, session=self.session, reason=reason) |
|
|
|
data = await adapter.edit_webhook( |
|
|
|
self.id, |
|
|
|
self.auth_token, |
|
|
|
payload=payload, |
|
|
|
session=self.session, |
|
|
|
proxy=self.proxy, |
|
|
|
proxy_auth=self.proxy_auth, |
|
|
|
reason=reason, |
|
|
|
) |
|
|
|
elif self.token: |
|
|
|
data = await adapter.edit_webhook_with_token( |
|
|
|
self.id, self.token, payload=payload, session=self.session, reason=reason |
|
|
|
self.id, |
|
|
|
self.token, |
|
|
|
payload=payload, |
|
|
|
session=self.session, |
|
|
|
proxy=self.proxy, |
|
|
|
proxy_auth=self.proxy_auth, |
|
|
|
reason=reason, |
|
|
|
) |
|
|
|
|
|
|
|
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) |
|
|
|
return Webhook( |
|
|
|
data, |
|
|
|
session=self.session, |
|
|
|
proxy=self.proxy, |
|
|
|
proxy_auth=self.proxy_auth, |
|
|
|
token=self.auth_token, |
|
|
|
state=self._state, |
|
|
|
) |
|
|
|
|
|
|
|
def _create_message(self, data, *, thread: Snowflake): |
|
|
|
state = _WebhookState(self, parent=self._state, thread=thread) |
|
|
@ -1566,6 +1704,8 @@ class Webhook(BaseWebhook): |
|
|
|
self.id, |
|
|
|
self.token, |
|
|
|
session=self.session, |
|
|
|
proxy=self.proxy, |
|
|
|
proxy_auth=self.proxy_auth, |
|
|
|
payload=params.payload, |
|
|
|
multipart=params.multipart, |
|
|
|
files=params.files, |
|
|
@ -1627,6 +1767,8 @@ class Webhook(BaseWebhook): |
|
|
|
self.token, |
|
|
|
id, |
|
|
|
session=self.session, |
|
|
|
proxy=self.proxy, |
|
|
|
proxy_auth=self.proxy_auth, |
|
|
|
thread_id=thread_id, |
|
|
|
) |
|
|
|
return self._create_message(data, thread=thread) |
|
|
@ -1738,6 +1880,8 @@ class Webhook(BaseWebhook): |
|
|
|
self.token, |
|
|
|
message_id, |
|
|
|
session=self.session, |
|
|
|
proxy=self.proxy, |
|
|
|
proxy_auth=self.proxy_auth, |
|
|
|
payload=params.payload, |
|
|
|
multipart=params.multipart, |
|
|
|
files=params.files, |
|
|
@ -1798,5 +1942,7 @@ class Webhook(BaseWebhook): |
|
|
|
self.token, |
|
|
|
message_id, |
|
|
|
session=self.session, |
|
|
|
proxy=self.proxy, |
|
|
|
proxy_auth=self.proxy_auth, |
|
|
|
thread_id=thread_id, |
|
|
|
) |
|
|
|