aboutsummaryrefslogtreecommitdiff
path: root/modules/commands
diff options
context:
space:
mode:
authorGravatar jesopo2019-06-14 12:01:55 +0100
committerGravatar jesopo2019-06-14 12:01:55 +0100
commitf05fc209b015e9d883566fc8cc4141dc9eff4db3 (patch)
tree599c4bb8f31e22af304c3b8f20977738b9b55649 /modules/commands
parentCatch `yield`s in command callbacks for e.g. permission checks (diff)
signature
Add a way to __or__ `utils.Check`s, as a "if one of these passes" thing
Diffstat (limited to 'modules/commands')
-rw-r--r--modules/commands/__init__.py22
1 files changed, 16 insertions, 6 deletions
diff --git a/modules/commands/__init__.py b/modules/commands/__init__.py
index 3d948c68..3b4dc74e 100644
--- a/modules/commands/__init__.py
+++ b/modules/commands/__init__.py
@@ -130,12 +130,16 @@ class Module(ModuleManager.BaseModule):
return hook, args_split
- def _check(self, context, kwargs, request=None, **extra_kwargs):
+ def _check(self, context, kwargs, requests=[]):
event_hook = self.events.on(context).on("command")
- if not request == None:
- event_hook = event_hook.on(request)
- returns = event_hook.call_unsafe(**kwargs, **extra_kwargs)
+ returns = []
+ if requests:
+ for request, request_args in requests:
+ returns.append(event_hook.on(request).call_unsafe_for_result(
+ **kwargs, request_args=request_args))
+ else:
+ returns = event_hook.call_unsafe(**kwargs)
hard_fail = False
force_success = False
@@ -174,10 +178,16 @@ class Module(ModuleManager.BaseModule):
break
if next_success:
+ multi_check = None
if isinstance(next_return, utils.Check):
+ multi_check = next_return.to_multi()
+ elif isinstance(next_return, utils.MultiCheck):
+ multi_check = next_return
+
+ if multi_check:
check_success, check_message = self._check("check",
- check_kwargs, next_return.request,
- check_args=next_return.args)
+ check_kwargs, multi_check.requests)
+
if not check_success:
return False, check_message
else: