[commands] Raise error when a cog name is already registered
This commit is contained in:
parent
9da2f349e7
commit
4134a17a29
@ -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…
x
Reference in New Issue
Block a user