aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh <[email protected]>2021-08-22 04:35:05 +1000
committerGitHub <[email protected]>2021-08-21 14:35:05 -0400
commit166152647cba5f5a7cfcc6cc75c8c73b12902847 (patch)
treeb4e36875dafaa84d790bf6ca1e1f73e2fde44bb4
parentAdd missing typehints for Member properties (diff)
downloaddiscord.py-166152647cba5f5a7cfcc6cc75c8c73b12902847.tar.xz
discord.py-166152647cba5f5a7cfcc6cc75c8c73b12902847.zip
[commands] Make GroupMixin Generic
-rw-r--r--discord/ext/commands/core.py31
1 files changed, 21 insertions, 10 deletions
diff --git a/discord/ext/commands/core.py b/discord/ext/commands/core.py
index 800b4b02..35b7e840 100644
--- a/discord/ext/commands/core.py
+++ b/discord/ext/commands/core.py
@@ -1125,7 +1125,7 @@ class Command(_BaseCommand, Generic[CogT, P, T]):
finally:
ctx.command = original
-class GroupMixin:
+class GroupMixin(Generic[CogT]):
"""A mixin that implements common functionality for classes that behave
similar to :class:`.Group` and are allowed to register commands.
@@ -1139,12 +1139,12 @@ class GroupMixin:
"""
def __init__(self, *args: Any, **kwargs: Any) -> None:
case_insensitive = kwargs.get('case_insensitive', False)
- self.all_commands: Dict[str, Command] = _CaseInsensitiveDict() if case_insensitive else {}
+ self.all_commands: Dict[str, Command[CogT, Any, Any]] = _CaseInsensitiveDict() if case_insensitive else {}
self.case_insensitive: bool = case_insensitive
super().__init__(*args, **kwargs)
@property
- def commands(self) -> Set[Command]:
+ def commands(self) -> Set[Command[CogT, Any, Any]]:
"""Set[:class:`.Command`]: A unique set of commands without aliases that are registered."""
return set(self.all_commands.values())
@@ -1154,7 +1154,7 @@ class GroupMixin:
command.recursively_remove_all_commands()
self.remove_command(command.name)
- def add_command(self, command: Command) -> None:
+ def add_command(self, command: Command[CogT, Any, Any]) -> None:
"""Adds a :class:`.Command` into the internal list of commands.
This is usually not called, instead the :meth:`~.GroupMixin.command` or
@@ -1192,7 +1192,7 @@ class GroupMixin:
raise CommandRegistrationError(alias, alias_conflict=True)
self.all_commands[alias] = command
- def remove_command(self, name: str) -> Optional[Command]:
+ def remove_command(self, name: str) -> Optional[Command[CogT, Any, Any]]:
"""Remove a :class:`.Command` from the internal list
of commands.
@@ -1229,7 +1229,7 @@ class GroupMixin:
self.all_commands[alias] = cmd
return command
- def walk_commands(self) -> Generator[Command, None, None]:
+ def walk_commands(self) -> Generator[Command[CogT, Any, Any], None, None]:
"""An iterator that recursively walks through all commands and subcommands.
.. versionchanged:: 1.4
@@ -1245,7 +1245,7 @@ class GroupMixin:
if isinstance(command, GroupMixin):
yield from command.walk_commands()
- def get_command(self, name: str) -> Optional[Command]:
+ def get_command(self, name: str) -> Optional[Command[CogT, Any, Any]]:
"""Get a :class:`.Command` from the internal list
of commands.
@@ -1292,7 +1292,13 @@ class GroupMixin:
cls: Type[Command[CogT, P, T]] = ...,
*args: Any,
**kwargs: Any,
- ) -> Callable[[Callable[Concatenate[ContextT, P], Coro[T]]], Command[CogT, P, T]]:
+ ) -> Callable[
+ [
+ Union[
+ Callable[Concatenate[CogT, ContextT, P], Coro[T]],
+ Callable[Concatenate[ContextT, P], Coro[T]],
+ ]
+ ], Command[CogT, P, T]]:
...
@overload
@@ -1335,7 +1341,12 @@ class GroupMixin:
cls: Type[Group[CogT, P, T]] = ...,
*args: Any,
**kwargs: Any,
- ) -> Callable[[Callable[Concatenate[ContextT, P], Coro[T]]], Group[CogT, P, T]]:
+ ) -> Callable[[
+ Union[
+ Callable[Concatenate[CogT, ContextT, P], Coro[T]],
+ Callable[Concatenate[ContextT, P], Coro[T]]
+ ]
+ ], Group[CogT, P, T]]:
...
@overload
@@ -1371,7 +1382,7 @@ class GroupMixin:
return decorator
-class Group(GroupMixin, Command[CogT, P, T]):
+class Group(GroupMixin[CogT], Command[CogT, P, T]):
"""A class that implements a grouping protocol for commands to be
executed as subcommands.