mirror of
				https://github.com/Rapptz/discord.py.git
				synced 2025-10-31 05:23:03 +00:00 
			
		
		
		
	[commands] Add a converter for discord.Object
This commit is contained in:
		| @@ -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`            | | ||||
|   | ||||
		Reference in New Issue
	
	Block a user