aboutsummaryrefslogtreecommitdiff
path: root/src/core_modules/check_mode.py
blob: 9e509890cd050cf1dd990af1c13f85b36f8d52d8 (about) (plain) (blame)
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
#--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 event["is_channel"] and require_mode:
            if require_mode.lower() in LOWHIGH:
                require_mode = event["target"].get_setting(
                    "mode-%s" % require_mode.lower(),
                    LOWHIGH[require_mode.lower()])
            elif require_mode.lower() == "admin":
                previous = None
                for mode, _ in event["server"].prefix_modes:
                    if mode == "o":
                        return previous or mone
                    previous = mode

            if not event["target"].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:
            return self._check_command(event, event["target"], 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)