Browse Source

[commands] Raise error when a cog name is already registered

pull/6686/head
Sebastian Law 4 years ago
committed by GitHub
parent
commit
4134a17a29
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 24
      discord/ext/commands/bot.py

24
discord/ext/commands/bot.py

@ -489,15 +489,25 @@ class BotBase(GroupMixin):
# cogs # cogs
def add_cog(self, cog): def add_cog(self, cog: Cog, *, override: bool = False) -> None:
"""Adds a "cog" to the bot. """Adds a "cog" to the bot.
A cog is a class that has its own event listeners and commands. A cog is a class that has its own event listeners and commands.
.. versionchanged:: 2.0
:exc:`.ClientException` is raised when a cog with the same name
is already loaded.
Parameters Parameters
----------- -----------
cog: :class:`.Cog` cog: :class:`.Cog`
The cog to register to the bot. The cog to register to the bot.
override: :class:`bool`
If a previously loaded cog with the same name should be ejected
instead of raising an error.
.. versionadded:: 2.0
Raises Raises
------- -------
@ -505,13 +515,23 @@ class BotBase(GroupMixin):
The cog does not inherit from :class:`.Cog`. The cog does not inherit from :class:`.Cog`.
CommandError CommandError
An error happened during loading. An error happened during loading.
.ClientException
A cog with the same name is already loaded.
""" """
if not isinstance(cog, Cog): if not isinstance(cog, Cog):
raise TypeError('cogs must derive from Cog') raise TypeError('cogs must derive from Cog')
cog_name = cog.__cog_name__
existing = self.__cogs.get(cog_name)
if existing is not None:
if not override:
raise discord.ClientException(f'Cog named {cog_name!r} already loaded')
self.remove_cog(cog_name)
cog = cog._inject(self) cog = cog._inject(self)
self.__cogs[cog.__cog_name__] = cog self.__cogs[cog_name] = cog
def get_cog(self, name): def get_cog(self, name):
"""Gets the cog instance requested. """Gets the cog instance requested.

Loading…
Cancel
Save