mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 03:08:55 -05:00
[Permissions] Ensure defaults are cleared when clearing all rules (#3041)
- fixes #3037
This commit is contained in:
parent
a729a474b1
commit
ddd9c4c6b0
1
changelog.d/permissions/3037.bugfix.rst
Normal file
1
changelog.d/permissions/3037.bugfix.rst
Normal file
@ -0,0 +1 @@
|
||||
defaults are cleared properly when clearing all rules
|
||||
@ -544,7 +544,7 @@ class Permissions(commands.Cog):
|
||||
|
||||
Handles config.
|
||||
"""
|
||||
self.bot.clear_permission_rules(guild_id)
|
||||
self.bot.clear_permission_rules(guild_id, preserve_default_rule=False)
|
||||
for category in (COG, COMMAND):
|
||||
async with self.config.custom(category).all() as all_rules:
|
||||
for name, rules in all_rules.items():
|
||||
|
||||
@ -779,7 +779,7 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin): # pylint: d
|
||||
for subcommand in set(command.walk_commands()):
|
||||
subcommand.requires.reset()
|
||||
|
||||
def clear_permission_rules(self, guild_id: Optional[int]) -> None:
|
||||
def clear_permission_rules(self, guild_id: Optional[int], **kwargs) -> None:
|
||||
"""Clear all permission overrides in a scope.
|
||||
|
||||
Parameters
|
||||
@ -789,11 +789,15 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin): # pylint: d
|
||||
``None``, this will clear all global rules and leave all
|
||||
guild rules untouched.
|
||||
|
||||
**kwargs
|
||||
Keyword arguments to be passed to each required call of
|
||||
``commands.Requires.clear_all_rules``
|
||||
|
||||
"""
|
||||
for cog in self.cogs.values():
|
||||
cog.requires.clear_all_rules(guild_id)
|
||||
cog.requires.clear_all_rules(guild_id, **kwargs)
|
||||
for command in self.walk_commands():
|
||||
command.requires.clear_all_rules(guild_id)
|
||||
command.requires.clear_all_rules(guild_id, **kwargs)
|
||||
|
||||
def add_permissions_hook(self, hook: commands.CheckPredicate) -> None:
|
||||
"""Add a permissions hook.
|
||||
|
||||
@ -398,11 +398,9 @@ class Requires:
|
||||
else:
|
||||
rules[model_id] = rule
|
||||
|
||||
def clear_all_rules(self, guild_id: int) -> None:
|
||||
def clear_all_rules(self, guild_id: int, *, preserve_default_rule: bool = True) -> None:
|
||||
"""Clear all rules of a particular scope.
|
||||
|
||||
This will preserve the default rule, if set.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
guild_id : int
|
||||
@ -410,6 +408,12 @@ class Requires:
|
||||
`Requires.GLOBAL`, this will clear all global rules and
|
||||
leave all guild rules untouched.
|
||||
|
||||
Other Parameters
|
||||
----------------
|
||||
preserve_default_rule : bool
|
||||
Whether to preserve the default rule or not.
|
||||
This defaults to being preserved
|
||||
|
||||
"""
|
||||
if guild_id:
|
||||
rules = self._guild_rules.setdefault(guild_id, _RulesDict())
|
||||
@ -417,7 +421,7 @@ class Requires:
|
||||
rules = self._global_rules
|
||||
default = rules.get(self.DEFAULT, None)
|
||||
rules.clear()
|
||||
if default is not None:
|
||||
if default is not None and preserve_default_rule:
|
||||
rules[self.DEFAULT] = default
|
||||
|
||||
def reset(self) -> None:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user