Reserves command names (#2977)

* Reserves command names

  - Currently, only reserving ``cancel``
  - This should only impact matching command qualified names
  - This also checks aliases
  - This makes cc and alias use the new module constant with info about
  this
  - Module constant is available for use by 3rd party cogs which may
  dynamically create responses.

* Change misleading var name

* style

* Thanks Flame!

* Handles issues with CC
This commit is contained in:
Michael H
2019-09-28 16:58:40 -04:00
committed by GitHub
parent e38c08ab12
commit 83483abfa5
4 changed files with 22 additions and 2 deletions

View File

@@ -28,8 +28,14 @@ __all__ = [
"GroupMixin",
"command",
"group",
"RESERVED_COMMAND_NAMES",
]
#: The following names are reserved for various reasons
RESERVED_COMMAND_NAMES = (
"cancel", # reserved due to use in ``redbot.core.utils.MessagePredicate``
)
_ = Translator("commands.commands", __file__)
@@ -155,6 +161,12 @@ class Command(CogCommandMixin, commands.Command):
super().__init__(*args, **kwargs)
self._help_override = kwargs.pop("help_override", None)
self.translator = kwargs.pop("i18n", None)
if self.parent is None:
for name in (self.name, *self.aliases):
if name in RESERVED_COMMAND_NAMES:
raise RuntimeError(
f"The name `{name}` cannot be set as a command name. It is reserved for internal use."
)
def _ensure_assignment_on_copy(self, other):
super()._ensure_assignment_on_copy(other)