diff --git a/alias.py b/alias.py deleted file mode 100644 index ea5db10..0000000 --- a/alias.py +++ /dev/null @@ -1,113 +0,0 @@ -# coding=utf-8 - -import re -import sys -from datetime import datetime -from xml.dom.minidom import parse -from xml.dom.minidom import parseString -from xml.dom.minidom import getDOMImplementation - -filename = "" -ALIAS = {} -variables = {} - -def load_module(datas_path): - """Load this module""" - global ALIAS, filename - SCORES = dict () - filename = datas_path + "/alias.xml" - - sys.stdout.write ("Loading aliaslist ... ") - dom = parse(filename) - for item in dom.documentElement.getElementsByTagName("alias"): - ALIAS[item.getAttribute("alias")] = item.getAttribute("origin") - for item in dom.documentElement.getElementsByTagName("variable"): - variables[item.getAttribute("name")] = item.getAttribute("value") - print ("done (%d aliases and %d vars)" % (len(ALIAS), len (variables))) - -def save_module(): - """Save the aliases""" - global ALIAS, variables, filename - sys.stdout.write ("Saving aliases ... ") - - impl = getDOMImplementation() - newdoc = impl.createDocument(None, 'aliaslist', None) - top = newdoc.documentElement - - for name in ALIAS.keys(): - item = parseString ('' % (name, ALIAS[name])).documentElement - top.appendChild(item); - - for name in variables.keys(): - item = parseString ('' % (name, variables[name])).documentElement - top.appendChild(item); - - with open(filename, "w") as f: - newdoc.writexml (f) - print ("done") - - -def help_tiny (): - """Line inserted in the response to the command !help""" - return "alias module" - -def help_full (): - return "TODO" - - -def parseanswer (msg): - global ALIAS, variables - if msg.cmd[0] == "set": - if len (msg.cmd) > 2: - variables[msg.cmd[1]] = " ".join(msg.cmd[2:]) - msg.send_snd("Variable $%s définie." % msg.cmd[1]) - else: - msg.send_snd("!set prend au minimum deux arguments : le nom de la variable et sa valeur.") - return True - elif msg.cmd[0] in ALIAS: - msg.content = msg.content.replace("!" + msg.cmd[0], ALIAS[msg.cmd[0]], 1) - - cnt = msg.content.split(' ') - for i in range(0,len(cnt)): - if len (cnt[i]) and cnt[i][0] == '$': - if cnt[i][1] == '$' and len(cnt[i]) == 2: - cnt[i] = "$" - elif cnt[i] == "$sender": - cnt[i] = msg.sender - elif cnt[i] == "$chan" or cnt[i] == "$channel": - cnt[i] = msg.channel - elif cnt[i] == "$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 cnt[i] == "$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 cnt[i] == "$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 cnt[i][1:] in variables: - cnt[i] = variables[cnt[i][1:]] - else: - cnt[i] = "" - msg.content = " ".join(cnt) - msg.reparsemsg() - return True - else: - return False - - -def parseask (msg): - global ALIAS - if re.match(".*(set|cr[ée]{2}|nouvel(le)?) alias.*", msg.content) is not None: - result = re.match(".*alias !?([a-zA-Z0-9_-]+) (pour|=|:) (.+)$", msg.content) - if result.group(1) in ALIAS or result.group(3).find("alias") >= 0: - msg.send_snd("Cet alias est déjà défini.") - else: - ALIAS[result.group(1)] = result.group(3) - msg.send_snd("Nouvel alias %s défini avec succès." % result.group(1)) - return True - return False - - -def parselisten (msg): - return False diff --git a/modules/alias/__init__.py b/modules/alias/__init__.py new file mode 100644 index 0000000..65b1b71 --- /dev/null +++ b/modules/alias/__init__.py @@ -0,0 +1,83 @@ +# coding=utf-8 + +import re +import sys +from datetime import datetime + +nemubotversion = 3.0 + +from module_state import ModuleState + +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 (): + """Line inserted in the response to the command !help""" + return "alias module" + +def help_full (): + return "TODO" + + +def parseanswer (msg): + global DATAS + if msg.cmd[0] == "set": + if len (msg.cmd) > 2: + var = ModuleState("variable") + var["name"] = msg.cmd[1] + var["value"] = " ".join(msg.cmd[2:]) + DATAS.getNode("variables").addChild(var) + msg.send_snd("Variable $%s définie." % msg.cmd[1]) + save() + else: + 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) == "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 + + +def parseask (msg): + global ALIAS + if re.match(".*(set|cr[ée]{2}|nouvel(le)?) alias.*", msg.content) is not None: + result = re.match(".*alias !?([a-zA-Z0-9_-]+) (pour|=|:) (.+)$", msg.content) + if result.group(1) in DATAS.getNode("aliases").index or result.group(3).find("alias") >= 0: + msg.send_snd("Cet alias est déjà défini.") + else: + alias = ModuleState("alias") + alias["alias"] = result.group(1) + alias["origin"] = result.group(3) + alias["creator"] = msg.sender + DATAS.getNode("aliases").addChild(alias) + msg.send_snd("Nouvel alias %s défini avec succès." % result.group(1)) + save() + return True + return False