def load(context): #Define the index context.data.setIndex("name") for evt in context.data.index.keys(): if context.data.index[evt].hasAttribute("end"): event = ModuleEvent(call=fini, call_data=dict(strend=context.data.index[evt])) event._end = context.data.index[evt].getDate("end") idt = context.add_event(event) if idt is not None: context.data.index[evt]["_id"] = idt
def start_countdown(msg): """!start /something/: launch a timer""" if len(msg.args) < 1: raise IMException("indique le nom d'un événement à chronométrer") if msg.args[0] in context.data.index: raise IMException("%s existe déjà." % msg.args[0]) strnd = ModuleState("strend") strnd["server"] = msg.server strnd["channel"] = msg.channel strnd["proprio"] = msg.nick strnd["start"] = msg.date strnd["name"] = msg.args[0] context.data.addChild(strnd) evt = ModuleEvent(call=fini, call_data=dict(strend=strnd)) if len(msg.args) > 1: result1 = re.findall("([0-9]+)([smhdjwyaSMHDJWYA])?", msg.args[1]) result2 = re.match("(.*[^0-9])?([0-3]?[0-9])/([0-1]?[0-9])/((19|20)?[01239][0-9])", msg.args[1]) result3 = re.match("(.*[^0-9])?([0-2]?[0-9]):([0-5]?[0-9])(:([0-5]?[0-9]))?", msg.args[1]) if result2 is not None or result3 is not None: try: now = msg.date if result3 is None or result3.group(5) is None: sec = 0 else: sec = int(result3.group(5)) if result3 is None or result3.group(3) is None: minu = 0 else: minu = int(result3.group(3)) if result3 is None or result3.group(2) is None: hou = 0 else: hou = int(result3.group(2)) if result2 is None or result2.group(4) is None: yea = now.year else: yea = int(result2.group(4)) if result2 is not None and result3 is not None: strnd["end"] = datetime(yea, int(result2.group(3)), int(result2.group(2)), hou, minu, sec, timezone.utc) elif result2 is not None: strnd["end"] = datetime(int(result2.group(4)), int(result2.group(3)), int(result2.group(2)), 0, 0, 0, timezone.utc) elif result3 is not None: if hou * 3600 + minu * 60 + sec > now.hour * 3600 + now.minute * 60 + now.second: strnd["end"] = datetime(now.year, now.month, now.day, hou, minu, sec, timezone.utc) else: strnd["end"] = datetime(now.year, now.month, now.day + 1, hou, minu, sec, timezone.utc) evt._end = strnd.getDate("end") strnd["_id"] = context.add_event(evt) except: context.data.delChild(strnd) raise IMException("Mauvais format de date pour l'événement %s. Il n'a pas été créé." % msg.args[0]) elif result1 is not None and len(result1) > 0: strnd["end"] = msg.date for (t, g) in result1: if g is None or g == "" or g == "m" or g == "M": strnd["end"] += timedelta(minutes=int(t)) elif g == "h" or g == "H": strnd["end"] += timedelta(hours=int(t)) elif g == "d" or g == "D" or g == "j" or g == "J": strnd["end"] += timedelta(days=int(t)) elif g == "w" or g == "W": strnd["end"] += timedelta(days=int(t)*7) elif g == "y" or g == "Y" or g == "a" or g == "A": strnd["end"] += timedelta(days=int(t)*365) else: strnd["end"] += timedelta(seconds=int(t)) evt._end = strnd.getDate("end") eid = context.add_event(evt) if eid is not None: strnd["_id"] = eid context.save() if "end" in strnd: return Response("%s commencé le %s et se terminera le %s." % (msg.args[0], msg.date.strftime("%A %d %B %Y à %H:%M:%S"), strnd.getDate("end").strftime("%A %d %B %Y à %H:%M:%S")), nick=msg.frm) else: return Response("%s commencé le %s"% (msg.args[0], msg.date.strftime("%A %d %B %Y à %H:%M:%S")), nick=msg.frm)