1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#--depends-on commands
from src import ModuleManager, utils
LOWHIGH = {
"low": "v",
"high": "o"
}
@utils.export("channelset", utils.Setting("mode-low",
"Set which channel mode is considered to be 'low' access", example="v"))
@utils.export("channelset", utils.Setting("mode-high",
"Set which channel mode is considered to be 'high' access", example="o"))
class Module(ModuleManager.BaseModule):
def _check_command(self, event, channel, require_mode):
if channel and require_mode:
if require_mode in LOWHIGH:
require_mode = channel.get_setting("mode-%s" % require_mode,
LOWHIGH[require_mode])
elif require_mode == "admin":
previous = None
for mode, _ in event["server"].prefix_modes:
if mode == "o":
require_mode = previous or mone
break
previous = mode
elif require_mode == "highest":
require_mode = event["server"].prefix_modes[0][0]
if not channel.mode_or_above(event["user"], require_mode):
return (utils.consts.PERMISSION_ERROR,
"You do not have permission to do this")
else:
return utils.consts.PERMISSION_FORCE_SUCCESS, None
@utils.hook("preprocess.command")
def preprocess_command(self, event):
require_mode = event["hook"].get_kwarg("require_mode")
if not require_mode == None:
channel = event["kwargs"].get("channel",
event["target"] if event["is_channel"] else None)
return self._check_command(event, channel, require_mode)
@utils.hook("check.command.channel-mode")
def check_command(self, event):
target = event["target"]
mode = event["request_args"][0]
if len(event["request_args"]) > 1:
target = event["request_args"][0]
mode = event["request_args"][1]
return self._check_command(event, target, mode)
|