From cfe93f19b19df526d360d8d0bde4121e4e36d0ad Mon Sep 17 00:00:00 2001 From: Josh Date: Wed, 21 Apr 2021 21:16:23 +1000 Subject: [PATCH] [commands] Allow FlagCommand subclasses to inherit options --- discord/ext/commands/flags.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/discord/ext/commands/flags.py b/discord/ext/commands/flags.py index 8f5d34d39..b84e9a183 100644 --- a/discord/ext/commands/flags.py +++ b/discord/ext/commands/flags.py @@ -268,14 +268,11 @@ class FlagsMeta(type): bases: Tuple[type, ...], attrs: Dict[str, Any], *, - case_insensitive: bool = False, - delimiter: str = ':', - prefix: str = '', + case_insensitive: bool = MISSING, + delimiter: str = MISSING, + prefix: str = MISSING, ): attrs['__commands_is_flag__'] = True - attrs['__commands_flag_case_insensitive__'] = case_insensitive - attrs['__commands_flag_delimiter__'] = delimiter - attrs['__commands_flag_prefix__'] = prefix if not prefix and not delimiter: raise TypeError('Must have either a delimiter or a prefix set') @@ -303,6 +300,23 @@ class FlagsMeta(type): if base.__dict__.get('__commands_is_flag__', False): flags.update(base.__dict__['__commands_flags__']) aliases.update(base.__dict__['__commands_flag_aliases__']) + if case_insensitive is MISSING: + attrs['__commands_flag_case_insensitive__'] = base.__dict__['__commands_flag_case_insensitive__'] + if delimiter is MISSING: + attrs['__commands_flag_delimiter__'] = base.__dict__['__commands_flag_delimiter__'] + if prefix is MISSING: + attrs['__commands_flag_prefix__'] = base.__dict__['__commands_flag_prefix__'] + + if case_insensitive is not MISSING: + attrs['__commands_flag_case_insensitive__'] = case_insensitive + if delimiter is not MISSING: + attrs['__commands_flag_delimiter__'] = delimiter + if prefix is not MISSING: + attrs['__commands_flag_prefix__'] = prefix + + case_insensitive = attrs.setdefault('__commands_flag_case_insensitive__', False) + delimiter = attrs.setdefault('__commands_flag_delimiter__', ':') + prefix = attrs.setdefault('__commands_flag_prefix__', '') for flag_name, flag in get_flags(attrs, global_ns, local_ns).items(): flags[flag_name] = flag