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,12 +4,21 @@ 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
def load(): CONTEXT = None
def load(context):
"""Load this module""" """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 global DATAS
if not DATAS.hasNode("aliases"): if not DATAS.hasNode("aliases"):
DATAS.addChild(ModuleState("aliases")) DATAS.addChild(ModuleState("aliases"))
@ -18,6 +27,7 @@ def load():
DATAS.addChild(ModuleState("variables")) DATAS.addChild(ModuleState("variables"))
DATAS.getNode("variables").setIndex("name") 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"
@ -25,49 +35,60 @@ def help_tiny ():
def help_full (): def help_full ():
return "TODO" return "TODO"
def set_variable(name, value):
def parseanswer (msg):
global DATAS
if msg.cmd[0] == "set":
if len (msg.cmd) > 2:
var = ModuleState("variable") var = ModuleState("variable")
var["name"] = msg.cmd[1] var["name"] = name
var["value"] = " ".join(msg.cmd[2:]) var["value"] = value
DATAS.getNode("variables").addChild(var) DATAS.getNode("variables").addChild(var)
def get_variable(name, msg=None):
if name == "sender":
return msg.sender
elif name == "nick":
return msg.nick
elif name == "chan" or name == "channel":
return msg.channel
elif name == "date":
now = datetime.now()
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:
return ""
def cmd_set(msg):
if len (msg.cmd) > 2:
set_variable(msg.cmd[1], " ".join(msg.cmd[2:]))
msg.send_snd("Variable $%s définie." % msg.cmd[1]) msg.send_snd("Variable $%s définie." % msg.cmd[1])
save() save()
return True
else: else:
msg.send_snd("!set prend au minimum deux arguments : le nom de la variable et sa valeur.") msg.send_snd("!set prend au minimum deux arguments : le nom de la variable et sa valeur.")
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(' ')
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:
if res.group(2) == "sender":
cnt[i] = msg.sender
elif res.group(2) == "nick":
cnt[i] = msg.nick
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)