[whois] New module from nbr23 bot
This commit is contained in:
parent
500e3a6e01
commit
4be9f78104
1 changed files with 101 additions and 0 deletions
101
modules/whois.py
Normal file
101
modules/whois.py
Normal file
|
@ -0,0 +1,101 @@
|
|||
# coding=utf-8
|
||||
|
||||
import re
|
||||
|
||||
from nemubot import context
|
||||
from nemubot.exception import IRCException
|
||||
from nemubot.hooks import hook
|
||||
from nemubot.tools.xmlparser.node import ModuleState
|
||||
|
||||
nemubotversion = 3.4
|
||||
|
||||
from more import Response
|
||||
|
||||
PASSWD_FILE = None
|
||||
|
||||
def load(context):
|
||||
global PASSWD_FILE
|
||||
if not context.config or not context.config.hasAttribute("passwd"):
|
||||
print("No passwd file given")
|
||||
return None
|
||||
PASSWD_FILE = context.config["passwd"]
|
||||
|
||||
if not context.data.hasNode("aliases"):
|
||||
context.data.addChild(ModuleState("aliases"))
|
||||
context.data.getNode("aliases").setIndex("from", "alias")
|
||||
|
||||
if not context.data.hasNode("pics"):
|
||||
context.data.addChild(ModuleState("pics"))
|
||||
context.data.getNode("pics").setIndex("login", "pict")
|
||||
|
||||
import nemubot.hooks
|
||||
context.add_hook("cmd_hook",
|
||||
nemubot.hooks.Message(cmd_whois, "whois"))
|
||||
|
||||
class Login:
|
||||
|
||||
def __init__(self, line):
|
||||
s = line.split(":")
|
||||
self.login = s[0]
|
||||
self.uid = s[2]
|
||||
self.gid = s[3]
|
||||
self.cn = s[4]
|
||||
self.home = s[5]
|
||||
|
||||
def get_promo(self):
|
||||
return self.home.split("/")[2].replace("_", " ")
|
||||
|
||||
def get_photo(self):
|
||||
if self.login in context.data.getNode("pics").index:
|
||||
return context.data.getNode("pics").index[self.login]["url"]
|
||||
else:
|
||||
return "https://static.acu.epita.fr/photos/%s" % self.login
|
||||
|
||||
|
||||
def found_login(login):
|
||||
if login in context.data.getNode("aliases").index:
|
||||
login = context.data.getNode("aliases").index[login]["to"]
|
||||
|
||||
login_ = login + ":"
|
||||
lsize = len(login_)
|
||||
|
||||
with open(PASSWD_FILE, encoding="iso-8859-15") as f:
|
||||
for l in f.readlines():
|
||||
if l[:lsize] == login_:
|
||||
return Login(l.strip())
|
||||
return None
|
||||
|
||||
def cmd_whois(msg):
|
||||
if len(msg.args) < 1:
|
||||
raise IRCException("Provide a name")
|
||||
|
||||
res = Response(channel=msg.channel, count=" (%d more logins)")
|
||||
for srch in msg.args:
|
||||
l = found_login(srch)
|
||||
if l is not None:
|
||||
pic = l.get_photo()
|
||||
res.append_message("%s is %s (%s %s): %s%s" % (srch, l.cn.capitalize(), l.login, l.uid, l.get_promo(), " and looks like %s" % pic if pic is not None else ""))
|
||||
else:
|
||||
res.append_message("Unknown %s :(" % srch)
|
||||
return res
|
||||
|
||||
@hook("ask_default")
|
||||
def parseask(msg):
|
||||
res = re.match(r"^(\S+)\s*('s|suis|est|is|was|were)\s+([a-zA-Z0-9_-]{3,8})$", msg.text, re.I)
|
||||
if res is not None:
|
||||
nick = res.group(1)
|
||||
login = res.group(3)
|
||||
if nick == "my" or nick == "I" or nick == "i" or nick == "je" or nick == "mon" or nick == "ma":
|
||||
nick = msg.nick
|
||||
if nick in context.data.getNode("aliases").index:
|
||||
context.data.getNode("aliases").index[nick]["to"] = login
|
||||
else:
|
||||
ms = ModuleState("alias")
|
||||
ms.setAttribute("from", nick)
|
||||
ms.setAttribute("to", login)
|
||||
context.data.getNode("aliases").addChild(ms)
|
||||
context.save()
|
||||
return Response("ok, c'est noté, %s est %s"
|
||||
% (nick, login),
|
||||
channel=msg.channel,
|
||||
nick=msg.nick)
|
Loading…
Add table
Add a link
Reference in a new issue