aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar jesopo2019-01-30 11:16:09 +0000
committerGravatar jesopo2019-01-30 11:16:34 +0000
commit2071a1018053c59d6a0178a7595d56e01df44bab (patch)
tree1d1c57dbdec1eb729b7a43e0c1a838d1b0f6ef5c
parentAdd a `permission` to !channelunset and !channelget (set.py) (diff)
signature
Support a way to check user channel access in a private command
(channel_access.py)
-rw-r--r--modules/channel_access.py23
-rw-r--r--modules/commands.py3
2 files changed, 20 insertions, 6 deletions
diff --git a/modules/channel_access.py b/modules/channel_access.py
index 72c8cad5..121e4718 100644
--- a/modules/channel_access.py
+++ b/modules/channel_access.py
@@ -13,12 +13,25 @@ class Module(ModuleManager.BaseModule):
@utils.hook("preprocess.command")
def preprocess_command(self, event):
require_access = event["hook"].get_kwarg("require_access")
- if event["is_channel"] and require_access:
- if self._has_channel_access(event["target"], event["user"],
- require_access):
- return utils.consts.PERMISSION_FORCE_SUCCESS
+ if event["is_channel"]:
+ if require_access:
+ if self._has_channel_access(event["target"], event["user"],
+ require_access):
+ return utils.consts.PERMISSION_FORCE_SUCCESS
+ else:
+ return "You do not have permission to do this"
+ else:
+ channel_arg_index = event["hook"].get_kwarg("channel_arg")
+ channel_name = event["args_split"][channel_arg_index]
+ if channel_name in event["server"].channels:
+ channel = event["server"].channels.get(channel_name)
+ if self._has_channel_access(channel, event["user"],
+ require_access):
+ return utils.consts.PERMISSION_FORCE_SUCCESS
+ else:
+ return "You do not have permission to do this"
else:
- return "You do not have permission to do this"
+ return "I'm not in that channel"
@utils.hook("get.haschannelaccess")
def has_channel_access(self, event):
diff --git a/modules/commands.py b/modules/commands.py
index 7dca06cd..8e3772eb 100644
--- a/modules/commands.py
+++ b/modules/commands.py
@@ -171,7 +171,8 @@ class Module(ModuleManager.BaseModule):
returns = self.events.on("preprocess.command").call_unsafe(
hook=hook, user=event["user"], server=event["server"],
- target=target, is_channel=is_channel, tags=event["tags"])
+ target=target, is_channel=is_channel, tags=event["tags"],
+ args_split=args_split)
hard_fail = False
force_success = False