42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
"""
|
||
|
jishaku.metacog
|
||
|
~~~~~~~~~~~~~~~
|
||
|
|
||
|
The metaclass definitions for the Jishaku cog.
|
||
|
|
||
|
:copyright: (c) 2019 Devon (Gorialis) R
|
||
|
:license: MIT, see LICENSE for more details.
|
||
|
|
||
|
"""
|
||
|
|
||
|
from discord.ext import commands
|
||
|
|
||
|
|
||
|
class GroupCogMeta(commands.CogMeta):
|
||
|
"""
|
||
|
A CogMeta metaclass that sets all unparented (non-nested) Commands under it as children
|
||
|
of a global Group.
|
||
|
|
||
|
This allows Jishaku to place all of its commands under a group, while maintaining the ability
|
||
|
to override individual subcommands in subclasses.
|
||
|
|
||
|
The Group will be inserted as an attribute of the resulting Cog under its function name.
|
||
|
"""
|
||
|
|
||
|
def __new__(cls, *args, **kwargs):
|
||
|
group = kwargs.pop('command_parent')
|
||
|
|
||
|
new_cls = super().__new__(cls, *args, **kwargs)
|
||
|
|
||
|
for subcommand in new_cls.__cog_commands__:
|
||
|
if subcommand.parent is None:
|
||
|
subcommand.parent = group
|
||
|
subcommand.__original_kwargs__['parent'] = group
|
||
|
|
||
|
new_cls.__cog_commands__.append(group)
|
||
|
setattr(new_cls, group.callback.__name__, group)
|
||
|
|
||
|
return new_cls
|