mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-04-22 16:51:59 +00:00
[commands] Add a converter for discord.Object
This commit is contained in:
parent
a30ec197c2
commit
5dec62f4c0
@ -37,6 +37,7 @@ if TYPE_CHECKING:
|
||||
|
||||
__all__ = (
|
||||
'Converter',
|
||||
'ObjectConverter',
|
||||
'MemberConverter',
|
||||
'UserConverter',
|
||||
'MessageConverter',
|
||||
@ -122,6 +123,30 @@ class IDConverter(Converter[T_co]):
|
||||
return _ID_REGEX.match(argument)
|
||||
|
||||
|
||||
class ObjectConverter(IDConverter[discord.Object]):
|
||||
"""Converts to a :class:`~discord.Object`.
|
||||
|
||||
The argument must follow the valid ID or mention formats (e.g. `<@80088516616269824>`).
|
||||
|
||||
.. versionadded:: 2.0
|
||||
|
||||
The lookup strategy is as follows (in order):
|
||||
|
||||
1. Lookup by ID.
|
||||
2. Lookup by member, role, or channel mention.
|
||||
"""
|
||||
|
||||
async def convert(self, ctx: Context, argument: str) -> discord.Object:
|
||||
match = self._get_id_match(argument) or re.match(r'<(?:@(?:!|&)?|#)([0-9]{15,20})>$', argument)
|
||||
|
||||
if match is None:
|
||||
raise ObjectNotFound(argument)
|
||||
|
||||
result = int(match.group(1))
|
||||
|
||||
return discord.Object(id=result)
|
||||
|
||||
|
||||
class MemberConverter(IDConverter[discord.Member]):
|
||||
"""Converts to a :class:`~discord.Member`.
|
||||
|
||||
|
@ -42,6 +42,7 @@ __all__ = (
|
||||
'MaxConcurrencyReached',
|
||||
'NotOwner',
|
||||
'MessageNotFound',
|
||||
'ObjectNotFound',
|
||||
'MemberNotFound',
|
||||
'GuildNotFound',
|
||||
'UserNotFound',
|
||||
@ -213,6 +214,23 @@ class NotOwner(CheckFailure):
|
||||
"""
|
||||
pass
|
||||
|
||||
class ObjectNotFound(BadArgument):
|
||||
"""Exception raised when the argument provided did not match the format
|
||||
of an ID or a mention.
|
||||
|
||||
This inherits from :exc:`BadArgument`
|
||||
|
||||
.. versionadded:: 2.0
|
||||
|
||||
Attributes
|
||||
-----------
|
||||
argument: :class:`str`
|
||||
The argument supplied by the caller that was not matched
|
||||
"""
|
||||
def __init__(self, argument):
|
||||
self.argument = argument
|
||||
super().__init__(f'{argument!r} does not follow a valid ID or mention format.')
|
||||
|
||||
class MemberNotFound(BadArgument):
|
||||
"""Exception raised when the member provided was not found in the bot's
|
||||
cache.
|
||||
|
@ -273,6 +273,9 @@ Converters
|
||||
.. autoclass:: discord.ext.commands.Converter
|
||||
:members:
|
||||
|
||||
.. autoclass:: discord.ext.commands.ObjectConverter
|
||||
:members:
|
||||
|
||||
.. autoclass:: discord.ext.commands.MemberConverter
|
||||
:members:
|
||||
|
||||
|
@ -374,6 +374,7 @@ or just a regular username. The default set of converters have been written to b
|
||||
|
||||
A lot of discord models work out of the gate as a parameter:
|
||||
|
||||
- :class:`Object` (since v2.0)
|
||||
- :class:`Member`
|
||||
- :class:`User`
|
||||
- :class:`Message` (since v1.1)
|
||||
@ -400,6 +401,8 @@ converter is given below:
|
||||
+--------------------------+-------------------------------------------------+
|
||||
| Discord Class | Converter |
|
||||
+--------------------------+-------------------------------------------------+
|
||||
| :class:`Object` | :class:`~ext.commands.ObjectConverter` |
|
||||
+--------------------------+-------------------------------------------------+
|
||||
| :class:`Member` | :class:`~ext.commands.MemberConverter` |
|
||||
+--------------------------+-------------------------------------------------+
|
||||
| :class:`User` | :class:`~ext.commands.UserConverter` |
|
||||
|
Loading…
x
Reference in New Issue
Block a user