diff --git a/events.py b/events.py index 2219cf2..1859d8e 100644 --- a/events.py +++ b/events.py @@ -11,11 +11,9 @@ from xml.dom.minidom import parse from xml.dom.minidom import parseString from xml.dom.minidom import getDOMImplementation -filename = "" -EVENTS = {} -STREND = {} -threadManager = None -newStrendEvt = threading.Event() +import imodule + + class Manager(threading.Thread): def __init__(self, servers): @@ -44,16 +42,7 @@ class Manager(threading.Thread): if closer is not None and closer.end is not None and closer.end > datetime.now(): timer.cancel() -def launch (servers): - global threadManager - stop() - threadManager = Manager(servers) - threadManager.start() -def stop (): - if threadManager is not None: - threadManager.stop = True - newStrendEvt.set() class Strend: def __init__(self, item): @@ -84,41 +73,61 @@ class Strend: del STREND[self.name] newStrendEvt.set() -def xmlparse(node): - """Parse the given node and add events to the global list.""" - for item in node.getElementsByTagName("strend"): - STREND[item.getAttribute("name")] = Strend(item) - for item in node.getElementsByTagName("event"): - if (item.hasAttribute("year")): - year = int(item.getAttribute("year")) - else: - year = 0 - if (item.hasAttribute("month")): - month = int(item.getAttribute("month")) - else: - month = 0 - if (item.hasAttribute("day")): - day = int(item.getAttribute("day")) - else: - day = 0 - if (item.hasAttribute("hour")): - hour = int(item.getAttribute("hour")) - else: - hour = 0 - if (item.hasAttribute("minute")): - minute = int(item.getAttribute("minute")) - else: - minute = 0 - if (item.hasAttribute("second")): - second = int(item.getAttribute("second")) - else: - second = 0 - if year == month == day == hour == minute == second == 0: - EVENTS[item.getAttribute("name")] = (None, item.getAttribute("before_after"), None) - else: - EVENTS[item.getAttribute("name")] = (datetime(year, month, day, hour, minute, second),item.getAttribute("msg_before"), item.getAttribute("msg_after")) +class Nemodule(imodule.ModuleBase): + filename = "" + events = dict() + strend = dict() + threadManager = None + newStrendEvt = threading.Event() + + def launch (self, servers): + self.stop() + self.threadManager = Manager(servers) + self.threadManager.start() + + def stop (self): + if self.threadManager is not None: + self.threadManager.stop = True + self.newStrendEvt.set() + + + def xmlparse(self, node): + """Parse the given node and add events to the global list.""" + for item in node.getElementsByTagName("strend"): + strend[item.getAttribute("name")] = Strend(item) + + for item in node.getElementsByTagName("event"): + if (item.hasAttribute("year")): + year = int(item.getAttribute("year")) + else: + year = 0 + if (item.hasAttribute("month")): + month = int(item.getAttribute("month")) + else: + month = 0 + if (item.hasAttribute("day")): + day = int(item.getAttribute("day")) + else: + day = 0 + if (item.hasAttribute("hour")): + hour = int(item.getAttribute("hour")) + else: + hour = 0 + if (item.hasAttribute("minute")): + minute = int(item.getAttribute("minute")) + else: + minute = 0 + if (item.hasAttribute("second")): + second = int(item.getAttribute("second")) + else: + second = 0 + + if year == month == day == hour == minute == second == 0: + events[item.getAttribute("name")] = (None, item.getAttribute("before_after"), None) + else: + events[item.getAttribute("name")] = (datetime(year, month, day, hour, minute, second),item.getAttribute("msg_before"), item.getAttribute("msg_after")) def load_module(datas_path): diff --git a/imodule.py b/imodule.py new file mode 100644 index 0000000..00e7bb9 --- /dev/null +++ b/imodule.py @@ -0,0 +1,66 @@ +# coding=utf-8 + +class ModuleException(Exception): + def __init__(self, value): + self.value = value + + def __str__(self): + return repr(self.value) + + +class ModuleState: + def __init__(self, filename): + self.filename = filename + + if not os.access(self.filename, os.R_OK): + with open(self.filename) as f: + for line in f: + print line + + +class ModuleBase: + def __init__(self, datas_path): + self.datas_path = datas_path + + if self.module_name is None: + raise ModuleException("module_name not defined") + + if self.conf is not None: + self.conf = self.datas_path + self.conf + if not os.access(self.conf, os.R_OK): + + + + def print(self, message): + print ("[%s] %s" % (self.module_name, message)) + + + def load(self): + return True + + def save(self): + return True + + + def launch(self, servers): + return True + + def stop(self): + return True + + + def help_tiny(self): + return None + + def help_full(self): + return None + + + def parseanswer(self, msg): + return False + + def parseask(self, msg): + return False + + def parselisten(self, msg): + return False diff --git a/qd.py b/qd.py index 4d95a31..1074f8a 100644 --- a/qd.py +++ b/qd.py @@ -293,7 +293,7 @@ def parselisten (msg): # if msg.channel == "#nemutest" and msg.sender not in DELAYED: if msg.channel != "#nemutest" and msg.sender not in DELAYED: - if re.match("(42|quarante[- ]?deux).{,2}", msg.content.strip().lower()): + if re.match("^(42|quarante[- ]?deux).{,2}$", msg.content.strip().lower()): if msg.time.minute == 10 and msg.time.second == 10 and msg.time.hour == 10: getUser(msg.sender).playTen() getUser(msg.sender).playGreat() @@ -304,7 +304,7 @@ def parselisten (msg): else: getUser(msg.sender).playBad() - if re.match("(23|vingt[ -]?trois).{,2}", msg.content.strip().lower()): + if re.match("^(23|vingt[ -]?trois).{,2}$", msg.content.strip().lower()): if msg.time.minute == 23: if msg.time.second == 0: getUser(msg.sender).playGreat() @@ -312,7 +312,7 @@ def parselisten (msg): else: getUser(msg.sender).playBad() - if re.match("(10){3}.{,2}", msg.content.strip().lower()): + if re.match("^(10){3}.{,2}$", msg.content.strip().lower()): if msg.time.minute == 10 and msg.time.hour == 10: if msg.time.second == 10: getUser(msg.sender).playGreat() @@ -320,13 +320,13 @@ def parselisten (msg): else: getUser(msg.sender).playBad() - if re.match("0?12345.{,2}", msg.content.strip().lower()): + if re.match("^0?12345.{,2}$", msg.content.strip().lower()): if msg.time.hour == 1 and msg.time.minute == 23 and (msg.time.second == 45 or (msg.time.second == 46 and msg.time.microsecond < 330000)): getUser(msg.sender).playSuite() else: getUser(msg.sender).playBad() - if re.match("[1l][e3]{2}[t7] ?time.{,2}", msg.content.strip().lower()): + if re.match("^[1l][e3]{2}[t7] ?time.{,2}$", msg.content.strip().lower()): if msg.time.hour == 13 and msg.time.minute == 37: if msg.time.second == 0: getUser(msg.sender).playGreat() @@ -334,7 +334,7 @@ def parselisten (msg): else: getUser(msg.sender).playBad() - if re.match("(pi|3.14) ?time.{,2}", msg.content.strip().lower()): + if re.match("^(pi|3.14) ?time.{,2}$", msg.content.strip().lower()): if msg.time.hour == 3 and msg.time.minute == 14: if msg.time.second == 15 or msg.time.second == 16: getUser(msg.sender).playGreat() @@ -342,7 +342,7 @@ def parselisten (msg): else: getUser(msg.sender).playBad() - if re.match("(404( ?time)?|time ?not ?found).{,2}", msg.content.strip().lower()): + if re.match("^(404( ?time)?|time ?not ?found).{,2}$", msg.content.strip().lower()): if msg.time.hour == 4 and msg.time.minute == 4: if msg.time.second == 0 or msg.time.second == 4: getUser(msg.sender).playGreat()