Convert alias module to V3.2

This commit is contained in:
Némunaire 2012-08-23 01:54:52 +02:00
parent 926abd8806
commit a1c170f88a

View file

@ -4,70 +4,91 @@ import re
import sys import sys
from datetime import datetime from datetime import datetime
nemubotversion = 3.0 nemubotversion = 3.2
from module_state import ModuleState from xmlparser.node import ModuleState
CONTEXT = None
def load(context):
"""Load this module"""
global CONTEXT
CONTEXT = context
from hooks import Hook
context.hooks.add_hook(context.hooks.cmd_hook, Hook(cmd_set, "set"))
context.hooks.add_hook(context.hooks.all_pre, Hook(treat_variables))
global DATAS
if not DATAS.hasNode("aliases"):
DATAS.addChild(ModuleState("aliases"))
DATAS.getNode("aliases").setIndex("alias")
if not DATAS.hasNode("variables"):
DATAS.addChild(ModuleState("variables"))
DATAS.getNode("variables").setIndex("name")
def load():
"""Load this module"""
global DATAS
if not DATAS.hasNode("aliases"):
DATAS.addChild(ModuleState("aliases"))
DATAS.getNode("aliases").setIndex("alias")
if not DATAS.hasNode("variables"):
DATAS.addChild(ModuleState("variables"))
DATAS.getNode("variables").setIndex("name")
def help_tiny (): def help_tiny ():
"""Line inserted in the response to the command !help""" """Line inserted in the response to the command !help"""
return "alias module" return "alias module"
def help_full (): def help_full ():
return "TODO" return "TODO"
def set_variable(name, value):
var = ModuleState("variable")
var["name"] = name
var["value"] = value
DATAS.getNode("variables").addChild(var)
def parseanswer (msg): def get_variable(name, msg=None):
global DATAS if name == "sender":
if msg.cmd[0] == "set": return msg.sender
if len (msg.cmd) > 2: elif name == "nick":
var = ModuleState("variable") return msg.nick
var["name"] = msg.cmd[1] elif name == "chan" or name == "channel":
var["value"] = " ".join(msg.cmd[2:]) return msg.channel
DATAS.getNode("variables").addChild(var) elif name == "date":
msg.send_snd("Variable $%s définie." % msg.cmd[1]) now = datetime.now()
save() return ("%d/%d/%d %d:%d:%d"%(now.day, now.month, now.year, now.hour,
now.minute, now.second))
elif name in DATAS.getNode("variables").index:
return DATAS.getNode("variables").index[name]["value"]
else: else:
msg.send_snd("!set prend au minimum deux arguments : le nom de la variable et sa valeur.") return ""
return True
elif msg.cmd[0] in DATAS.getNode("aliases").index:
msg.content = msg.content.replace("!" + msg.cmd[0], DATAS.getNode("aliases").index[msg.cmd[0]]["origin"], 1)
cnt = msg.content.split(' ') def cmd_set(msg):
for i in range(0,len(cnt)): if len (msg.cmd) > 2:
res = re.match("^([^a-zA-Z0-9]*)\\$([a-zA-Z0-9]+)(.*)$", cnt[i]) set_variable(msg.cmd[1], " ".join(msg.cmd[2:]))
if res is not None: msg.send_snd("Variable $%s définie." % msg.cmd[1])
if res.group(2) == "sender": save()
cnt[i] = msg.sender return True
elif res.group(2) == "nick": else:
cnt[i] = msg.nick msg.send_snd("!set prend au minimum deux arguments : le nom de la variable et sa valeur.")
elif res.group(2) == "chan" or res.group(2) == "channel":
cnt[i] = msg.channel
elif res.group(2) == "date":
now = datetime.now()
cnt[i] = ("%d/%d/%d %d:%d:%d"%(now.day, now.month, now.year, now.hour, now.minute, now.second))
elif res.group(2) in DATAS.getNode("variables").index:
cnt[i] = DATAS.getNode("variables").index[res.group(2)]["value"]
else:
cnt[i] = ""
cnt[i] = res.group(1) + cnt[i] + res.group(3)
msg.content = " ".join(cnt)
msg.reparsemsg()
return True
else:
return False return False
def parseask (msg): def treat_variables(msg):
if msg.cmd[0] != "set" and re.match(".*(set|cr[ée]{2}|nouvel(le)?) alias.*", msg.content) is None:
cnt = msg.content.split(' ')
for i in range(0, len(cnt)):
res = re.match("^([^a-zA-Z0-9]*)\\$([a-zA-Z0-9]+)(.*)$", cnt[i])
if res is not None:
cnt[i] = res.group(1) + get_variable(res.group(2), msg) + res.group(3)
msg.content = " ".join(cnt)
return True
return False
def parseanswer(msg):
if msg.cmd[0] in DATAS.getNode("aliases").index:
msg.content = msg.content.replace("!" + msg.cmd[0], DATAS.getNode("aliases").index[msg.cmd[0]]["origin"], 1)
msg.reparsemsg()
return True
return False
def parseask(msg):
global ALIAS global ALIAS
if re.match(".*(set|cr[ée]{2}|nouvel(le)?) alias.*", msg.content) is not None: if re.match(".*(set|cr[ée]{2}|nouvel(le)?) alias.*", msg.content) is not None:
result = re.match(".*alias !?([^ ]+) (pour|=|:) (.+)$", msg.content) result = re.match(".*alias !?([^ ]+) (pour|=|:) (.+)$", msg.content)