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