aboutsummaryrefslogtreecommitdiff
path: root/modules/hostmask_tracking.py
blob: 694509e401af138b8b6eed7973f8be67832d5905 (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
from src import ModuleManager, utils

class Module(ModuleManager.BaseModule):
    _name = "Hostmasks"

    @utils.hook("new.user")
    def new_user(self, event):
        userhost = event["user"].userhost()
        if not userhost == None:
            known_hostmasks = event["user"].get_setting("known-hostmasks", [])
            if not userhost in known_hostmasks:
                known_hostmasks.append(userhost)
                event["user"].set_setting("known-hostmasks", known_hostmasks)

    @utils.hook("received.command.maskfind")
    @utils.kwarg("min_args", 1)
    @utils.kwarg("private_only", True)
    @utils.kwarg("help", "Find all nicknames that used a given hostmask")
    @utils.kwarg("usage", "<hostmask>")
    @utils.kwarg("permission", "maskfind")
    def maskfind(self, event):
        all_userhosts = event["server"].get_all_user_settings("known-hostmasks")
        nicknames = set([])
        hostmask_str = event["args_split"][0]
        hostmask = utils.irc.hostmask_parse(hostmask_str)

        searched = 0
        for nickname, userhosts in all_userhosts:
            searched += len(userhosts)
            for userhost in userhosts:
                if hostmask.match(userhost):
                    nicknames.add(nickname)

        if nicknames:
            event["stdout"].write("%s (%d/%d): %s" %
                (hostmask_str, len(nicknames), searched,
                ", ".join(sorted(nicknames))))
        else:
            event["stderr"].write("Hostmask not found")