def __init_subclass__(cls, *, game_cls, cmd=None, aliases=(), **kwargs):
super().__init_subclass__(**kwargs)
cls.__game_class__ = game_cls
cmd_name = cmd or cls.__name__.lower()
group_help = inspect.getdoc(cls._game).format(name=cls.name)
group_command = commands.group(
name=cmd_name, aliases=aliases, help=group_help, invoke_without_command=True
)(cls._game)
setattr(cls, f'{cmd_name}', group_command)
gc = group_command.command
for name, member in inspect.getmembers(cls):
if not name.startswith('_game_'):
continue
name = name[6:]
if name in {'invite', 'create'}:
# Special treatment is needed for these two
continue
help = inspect.getdoc(member).format(name=cls.name, cmd=cmd_name)
command = gc(name=name, help=help)(member)
setattr(cls, f'{cmd_name}_{name}', command)
setattr(cls, f'_{cls.__name__}__error', cls._error)
# Deprecate create and invite
dc = functools.partial(gc, cls=DeprecatedCommand, version='1.2')
setattr(cls, f'{cmd_name}_create', dc(name='create', instead=f'{cmd_name}')(cls._game_create))
setattr(cls, f'{cmd_name}_invite', dc(name='invite', instead=f'{cmd_name} @user')(cls._game_invite))
评论列表
文章目录