mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 11:18:54 -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.
|
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):
|
for category in (COG, COMMAND):
|
||||||
async with self.config.custom(category).all() as all_rules:
|
async with self.config.custom(category).all() as all_rules:
|
||||||
for name, rules in all_rules.items():
|
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()):
|
for subcommand in set(command.walk_commands()):
|
||||||
subcommand.requires.reset()
|
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.
|
"""Clear all permission overrides in a scope.
|
||||||
|
|
||||||
Parameters
|
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
|
``None``, this will clear all global rules and leave all
|
||||||
guild rules untouched.
|
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():
|
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():
|
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:
|
def add_permissions_hook(self, hook: commands.CheckPredicate) -> None:
|
||||||
"""Add a permissions hook.
|
"""Add a permissions hook.
|
||||||
|
|||||||
@ -398,11 +398,9 @@ class Requires:
|
|||||||
else:
|
else:
|
||||||
rules[model_id] = rule
|
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.
|
"""Clear all rules of a particular scope.
|
||||||
|
|
||||||
This will preserve the default rule, if set.
|
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
guild_id : int
|
guild_id : int
|
||||||
@ -410,6 +408,12 @@ class Requires:
|
|||||||
`Requires.GLOBAL`, this will clear all global rules and
|
`Requires.GLOBAL`, this will clear all global rules and
|
||||||
leave all guild rules untouched.
|
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:
|
if guild_id:
|
||||||
rules = self._guild_rules.setdefault(guild_id, _RulesDict())
|
rules = self._guild_rules.setdefault(guild_id, _RulesDict())
|
||||||
@ -417,7 +421,7 @@ class Requires:
|
|||||||
rules = self._global_rules
|
rules = self._global_rules
|
||||||
default = rules.get(self.DEFAULT, None)
|
default = rules.get(self.DEFAULT, None)
|
||||||
rules.clear()
|
rules.clear()
|
||||||
if default is not None:
|
if default is not None and preserve_default_rule:
|
||||||
rules[self.DEFAULT] = default
|
rules[self.DEFAULT] = default
|
||||||
|
|
||||||
def reset(self) -> None:
|
def reset(self) -> None:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user