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")
|