mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-07-06 18:11:59 +00:00
Add support for passing client to Webhook.from_url and Webhook.partial
This commit is contained in:
parent
3af6b308ab
commit
4057afad6a
@ -62,6 +62,7 @@ if TYPE_CHECKING:
|
|||||||
from types import TracebackType
|
from types import TracebackType
|
||||||
|
|
||||||
from ..embeds import Embed
|
from ..embeds import Embed
|
||||||
|
from ..client import Client
|
||||||
from ..mentions import AllowedMentions
|
from ..mentions import AllowedMentions
|
||||||
from ..message import Attachment
|
from ..message import Attachment
|
||||||
from ..state import ConnectionState
|
from ..state import ConnectionState
|
||||||
@ -1161,7 +1162,15 @@ class Webhook(BaseWebhook):
|
|||||||
return f'https://discord.com/api/webhooks/{self.id}/{self.token}'
|
return f'https://discord.com/api/webhooks/{self.id}/{self.token}'
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def partial(cls, id: int, token: str, *, session: aiohttp.ClientSession, bot_token: Optional[str] = None) -> Self:
|
def partial(
|
||||||
|
cls,
|
||||||
|
id: int,
|
||||||
|
token: str,
|
||||||
|
*,
|
||||||
|
session: aiohttp.ClientSession = MISSING,
|
||||||
|
client: Client = MISSING,
|
||||||
|
bot_token: Optional[str] = None,
|
||||||
|
) -> Self:
|
||||||
"""Creates a partial :class:`Webhook`.
|
"""Creates a partial :class:`Webhook`.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
@ -1176,12 +1185,23 @@ class Webhook(BaseWebhook):
|
|||||||
will not close it.
|
will not close it.
|
||||||
|
|
||||||
.. versionadded:: 2.0
|
.. versionadded:: 2.0
|
||||||
|
client: :class:`Client`
|
||||||
|
The client to initialise this webhook with. This allows it to
|
||||||
|
attach the client's internal state. If ``session`` is not given
|
||||||
|
while this is given then the client's internal session will be used.
|
||||||
|
|
||||||
|
.. versionadded:: 2.2
|
||||||
bot_token: Optional[:class:`str`]
|
bot_token: Optional[:class:`str`]
|
||||||
The bot authentication token for authenticated requests
|
The bot authentication token for authenticated requests
|
||||||
involving the webhook.
|
involving the webhook.
|
||||||
|
|
||||||
.. versionadded:: 2.0
|
.. versionadded:: 2.0
|
||||||
|
|
||||||
|
Raises
|
||||||
|
-------
|
||||||
|
TypeError
|
||||||
|
Neither ``session`` nor ``client`` were given.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
--------
|
--------
|
||||||
:class:`Webhook`
|
:class:`Webhook`
|
||||||
@ -1194,10 +1214,26 @@ class Webhook(BaseWebhook):
|
|||||||
'token': token,
|
'token': token,
|
||||||
}
|
}
|
||||||
|
|
||||||
return cls(data, session, token=bot_token)
|
state = None
|
||||||
|
if client is not MISSING:
|
||||||
|
state = client._connection
|
||||||
|
if session is MISSING:
|
||||||
|
session = client.http._HTTPClient__session # type: ignore
|
||||||
|
|
||||||
|
if session is MISSING:
|
||||||
|
raise TypeError('session or client must be given')
|
||||||
|
|
||||||
|
return cls(data, session, token=bot_token, state=state)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_url(cls, url: str, *, session: aiohttp.ClientSession, bot_token: Optional[str] = None) -> Self:
|
def from_url(
|
||||||
|
cls,
|
||||||
|
url: str,
|
||||||
|
*,
|
||||||
|
session: aiohttp.ClientSession = MISSING,
|
||||||
|
client: Client = MISSING,
|
||||||
|
bot_token: Optional[str] = None,
|
||||||
|
) -> Self:
|
||||||
"""Creates a partial :class:`Webhook` from a webhook URL.
|
"""Creates a partial :class:`Webhook` from a webhook URL.
|
||||||
|
|
||||||
.. versionchanged:: 2.0
|
.. versionchanged:: 2.0
|
||||||
@ -1214,6 +1250,12 @@ class Webhook(BaseWebhook):
|
|||||||
will not close it.
|
will not close it.
|
||||||
|
|
||||||
.. versionadded:: 2.0
|
.. versionadded:: 2.0
|
||||||
|
client: :class:`Client`
|
||||||
|
The client to initialise this webhook with. This allows it to
|
||||||
|
attach the client's internal state. If ``session`` is not given
|
||||||
|
while this is given then the client's internal session will be used.
|
||||||
|
|
||||||
|
.. versionadded:: 2.2
|
||||||
bot_token: Optional[:class:`str`]
|
bot_token: Optional[:class:`str`]
|
||||||
The bot authentication token for authenticated requests
|
The bot authentication token for authenticated requests
|
||||||
involving the webhook.
|
involving the webhook.
|
||||||
@ -1224,6 +1266,8 @@ class Webhook(BaseWebhook):
|
|||||||
-------
|
-------
|
||||||
ValueError
|
ValueError
|
||||||
The URL is invalid.
|
The URL is invalid.
|
||||||
|
TypeError
|
||||||
|
Neither ``session`` nor ``client`` were given.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
--------
|
--------
|
||||||
@ -1235,9 +1279,18 @@ class Webhook(BaseWebhook):
|
|||||||
if m is None:
|
if m is None:
|
||||||
raise ValueError('Invalid webhook URL given.')
|
raise ValueError('Invalid webhook URL given.')
|
||||||
|
|
||||||
|
state = None
|
||||||
|
if client is not MISSING:
|
||||||
|
state = client._connection
|
||||||
|
if session is MISSING:
|
||||||
|
session = client.http._HTTPClient__session # type: ignore
|
||||||
|
|
||||||
|
if session is MISSING:
|
||||||
|
raise TypeError('session or client must be given')
|
||||||
|
|
||||||
data: Dict[str, Any] = m.groupdict()
|
data: Dict[str, Any] = m.groupdict()
|
||||||
data['type'] = 1
|
data['type'] = 1
|
||||||
return cls(data, session, token=bot_token) # type: ignore
|
return cls(data, session, token=bot_token, state=state) # type: ignore # Casting dict[str, Any] to WebhookPayload
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _as_follower(cls, data, *, channel, user) -> Self:
|
def _as_follower(cls, data, *, channel, user) -> Self:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user