def parseask(msg): res = re.match( r"^(\S+)\s*('s|suis|est|is|was|were)?\s+(birthday|geburtstag|née? |nee? le|born on).*$", msg.message, re.I) if res is not None: try: extDate = extractDate(msg.message) if extDate is None or extDate.year > datetime.now().year: return Response("la date de naissance ne paraît pas valide...", msg.channel, msg.frm) else: nick = res.group(1) if nick == "my" or nick == "I" or nick == "i" or nick == "je" or nick == "mon" or nick == "ma": nick = msg.frm if nick.lower() in context.data.index: context.data.index[nick.lower()]["born"] = extDate else: ms = ModuleState("birthday") ms.setAttribute("name", nick.lower()) ms.setAttribute("born", extDate) context.data.addChild(ms) context.save() return Response( "ok, c'est noté, %s est né le %s" % (nick, extDate.strftime("%A %d %B %Y à %H:%M")), msg.channel, msg.frm) except: raise IMException("la date de naissance ne paraît pas valide.")
def parseask(msg): if msg.message.find("Free") >= 0 and ( msg.message.find("API") >= 0 or msg.message.find("api") >= 0) and ( msg.message.find("SMS") >= 0 or msg.message.find("sms") >= 0): resuser = apiuser_ask.search(msg.message) reskey = apikey_ask.search(msg.message) if resuser is not None and reskey is not None: apiuser = resuser.group("user") apikey = reskey.group("key") test = send_sms( "nemubot", apiuser, apikey, "Vous avez enregistré vos codes d'authentification dans nemubot, félicitation !" ) if test is not None: return Response( "je n'ai pas pu enregistrer tes identifiants : %s" % test, msg.channel, msg.frm) if msg.frm in context.data.index: context.data.index[msg.frm]["user"] = apiuser context.data.index[msg.frm]["key"] = apikey else: ms = ModuleState("phone") ms.setAttribute("name", msg.frm) ms.setAttribute("user", apiuser) ms.setAttribute("key", apikey) ms.setAttribute("lastuse", 0) context.data.addChild(ms) context.save() return Response( "ok, c'est noté. Je t'ai envoyé un SMS pour tester ;)", msg.channel, msg.frm)
def cmd_watch(msg): # Get current state node = None for n in context.data.getChilds(): if n["server"] == msg.server and n["channel"] == msg.channel: node = n break if len(msg.args): if msg.args[0] == "stop" and node is not None: context.data.delChild(node) context.save() raise IMException( "This channel will not anymore receives world cup events.") elif msg.args[0] == "start" and node is None: start_watch(msg) else: raise IMException("Use only start or stop as first argument") else: if node is None: start_watch(msg) else: context.data.delChild(node) context.save() raise IMException( "This channel will not anymore receives world cup events.")
def cmd_watch(msg): # Get current state node = None for n in context.data.getChilds(): if n["server"] == msg.server and n["channel"] == msg.channel: node = n break if len(msg.args): if msg.args[0] == "stop" and node is not None: context.data.delChild(node) context.save() raise IMException("This channel will not anymore receives world cup events.") elif msg.args[0] == "start" and node is None: start_watch(msg) else: raise IMException("Use only start or stop as first argument") else: if node is None: start_watch(msg) else: context.data.delChild(node) context.save() raise IMException("This channel will not anymore receives world cup events.")
def parseask(msg): res = re.match(r"^(\S+)\s*('s|suis|est|is|was|were)?\s+(birthday|geburtstag|née? |nee? le|born on).*$", msg.message, re.I) if res is not None: try: extDate = extractDate(msg.message) if extDate is None or extDate.year > datetime.now().year: return Response("la date de naissance ne paraît pas valide...", msg.channel, msg.frm) else: nick = res.group(1) if nick == "my" or nick == "I" or nick == "i" or nick == "je" or nick == "mon" or nick == "ma": nick = msg.frm if nick.lower() in context.data.index: context.data.index[nick.lower()]["born"] = extDate else: ms = ModuleState("birthday") ms.setAttribute("name", nick.lower()) ms.setAttribute("born", extDate) context.data.addChild(ms) context.save() return Response("ok, c'est noté, %s est né le %s" % (nick, extDate.strftime("%A %d %B %Y à %H:%M")), msg.channel, msg.frm) except: raise IMException("la date de naissance ne paraît pas valide.")
def parseask(msg): if msg.message.find("Free") >= 0 and ( msg.message.find("API") >= 0 or msg.message.find("api") >= 0) and ( msg.message.find("SMS") >= 0 or msg.message.find("sms") >= 0): resuser = apiuser_ask.search(msg.message) reskey = apikey_ask.search(msg.message) if resuser is not None and reskey is not None: apiuser = resuser.group("user") apikey = reskey.group("key") test = send_sms("nemubot", apiuser, apikey, "Vous avez enregistré vos codes d'authentification dans nemubot, félicitation !") if test is not None: return Response("je n'ai pas pu enregistrer tes identifiants : %s" % test, msg.channel, msg.frm) if msg.frm in context.data.index: context.data.index[msg.frm]["user"] = apiuser context.data.index[msg.frm]["key"] = apikey else: ms = ModuleState("phone") ms.setAttribute("name", msg.frm) ms.setAttribute("user", apiuser) ms.setAttribute("key", apikey) ms.setAttribute("lastuse", 0) context.data.addChild(ms) context.save() return Response("ok, c'est noté. Je t'ai envoyé un SMS pour tester ;)", msg.channel, msg.frm)
def fini(name, evt): context.send_response( evt._server, Response("%s arrivé à échéance." % name, channel=evt._channel, nick=evt.creator)) evt._evt = None del context.data[name] context.save()
def start_watch(msg): w = ModuleState("watch") w["server"] = msg.server w["channel"] = msg.channel w["proprio"] = msg.frm w["start"] = datetime.now(timezone.utc) context.data.addChild(w) context.save() raise IMException("This channel is now watching world cup events!")
def add_score(nick, t): if nick not in context.data.index: st = ModuleState("score") st["name"] = nick context.data.addChild(st) if context.data.index[nick].hasAttribute(t): context.data.index[nick][t] = context.data.index[nick].getInt(t) + 1 else: context.data.index[nick][t] = 1 context.save()
def parseask(msg): name = re.match("^.*!([^ \"'@!]+).*$", msg.text) if name is None: raise IMException("il faut que tu attribues une commande à l'événement.") if name.group(1) in context.data.index: raise IMException("un événement portant ce nom existe déjà.") texts = re.match("^[^\"]*(avant|après|apres|before|after)?[^\"]*\"([^\"]+)\"[^\"]*((avant|après|apres|before|after)?.*\"([^\"]+)\".*)?$", msg.text, re.I) if texts is not None and texts.group(3) is not None: extDate = extractDate(msg.text) if extDate is None or extDate == "": raise IMException("la date de l'événement est invalide !") if texts.group(1) is not None and (texts.group(1) == "après" or texts.group(1) == "apres" or texts.group(1) == "after"): msg_after = texts.group(2) msg_before = texts.group(5) if (texts.group(4) is not None and (texts.group(4) == "après" or texts.group(4) == "apres" or texts.group(4) == "after")) or texts.group(1) is None: msg_before = texts.group(2) msg_after = texts.group(5) if msg_before.find("%s") == -1 or msg_after.find("%s") == -1: raise IMException("Pour que l'événement soit valide, ajouter %s à" " l'endroit où vous voulez que soit ajouté le" " compte à rebours.") evt = ModuleState("event") evt["server"] = msg.server evt["channel"] = msg.channel evt["proprio"] = msg.nick evt["name"] = name.group(1) evt["start"] = extDate evt["msg_after"] = msg_after evt["msg_before"] = msg_before context.data.addChild(evt) context.save() return Response("Nouvel événement !%s ajouté avec succès." % name.group(1), channel=msg.channel) elif texts is not None and texts.group(2) is not None: evt = ModuleState("event") evt["server"] = msg.server evt["channel"] = msg.channel evt["proprio"] = msg.nick evt["name"] = name.group(1) evt["msg_before"] = texts.group (2) context.data.addChild(evt) context.save() return Response("Nouvelle commande !%s ajoutée avec succès." % name.group(1), channel=msg.channel) else: raise IMException("Veuillez indiquez les messages d'attente et d'après événement entre guillemets.")
def create_alias(alias, origin, channel=None, creator=None): """Create or erase an existing alias """ anode = ModuleState("alias") anode["alias"] = alias anode["origin"] = origin if channel is not None: anode["creator"] = channel if creator is not None: anode["creator"] = creator context.data.getNode("aliases").addChild(anode) context.save()
def set_variable(name, value, creator): """Define or erase a variable. Arguments: name -- The variable identifier value -- Variable value creator -- User who has created this variable """ var = ModuleState("variable") var["name"] = name var["value"] = value var["creator"] = creator context.data.getNode("variables").addChild(var) context.save()
def end_countdown(msg): if len(msg.args) < 1: raise IMException("quel événement terminer ?") if msg.args[0] in context.data: if context.data[msg.args[0]].creator == msg.frm or (msg.cmd == "forceend" and msg.frm_owner): duration = countdown(msg.date - context.data[msg.args[0]].start) del context.data[msg.args[0]] context.save() return Response("%s a duré %s." % (msg.args[0], duration), channel=msg.channel, nick=msg.frm) else: raise IMException("Vous ne pouvez pas terminer le compteur %s, créé par %s." % (msg.args[0], context.data[msg.args[0]].creator)) else: return Response("%s n'est pas un compteur connu."% (msg.args[0]), channel=msg.channel, nick=msg.frm)
def end_countdown(msg): if len(msg.args) < 1: raise IMException("quel événement terminer ?") if msg.args[0] in context.data.index: if context.data.index[msg.args[0]]["proprio"] == msg.nick or (msg.cmd == "forceend" and msg.frm_owner): duration = countdown(msg.date - context.data.index[msg.args[0]].getDate("start")) context.del_event(context.data.index[msg.args[0]]["_id"]) context.data.delChild(context.data.index[msg.args[0]]) context.save() return Response("%s a duré %s." % (msg.args[0], duration), channel=msg.channel, nick=msg.nick) else: raise IMException("Vous ne pouvez pas terminer le compteur %s, créé par %s." % (msg.args[0], context.data.index[msg.args[0]]["proprio"])) else: return Response("%s n'est pas un compteur connu."% (msg.args[0]), channel=msg.channel, nick=msg.nick)
def parseask(msg): res = re.match(r"^(\S+)\s*('s|suis|est|is|was|were)\s+([a-zA-Z0-9_-]{3,8})$", msg.text, re.I) if res is not None: nick = res.group(1) login = res.group(3) if nick == "my" or nick == "I" or nick == "i" or nick == "je" or nick == "mon" or nick == "ma": nick = msg.nick if nick in context.data.getNode("aliases").index: context.data.getNode("aliases").index[nick]["to"] = login else: ms = ModuleState("alias") ms.setAttribute("from", nick) ms.setAttribute("to", login) context.data.getNode("aliases").addChild(ms) context.save() return Response("ok, c'est noté, %s est %s" % (nick, login), channel=msg.channel, nick=msg.nick)
def parseask(msg): res = gps_ask.match(msg.message) if res is not None: city_name = res.group("city").lower() gps_lat = res.group("lat").replace(",", ".") gps_long = res.group("long").replace(",", ".") if city_name in context.data.index: context.data.index[city_name]["lat"] = gps_lat context.data.index[city_name]["long"] = gps_long else: ms = ModuleState("city") ms.setAttribute("name", city_name) ms.setAttribute("lat", gps_lat) ms.setAttribute("long", gps_long) context.data.addChild(ms) context.save() return Response("ok, j'ai bien noté les coordonnées de %s" % res.group("city"), msg.channel, msg.frm)
def parseask(msg): res = gps_ask.match(msg.message) if res is not None: city_name = res.group("city").lower() gps_lat = res.group("lat").replace(",", ".") gps_long = res.group("long").replace(",", ".") if city_name in context.data.index: context.data.index[city_name]["lat"] = gps_lat context.data.index[city_name]["long"] = gps_long else: ms = ModuleState("city") ms.setAttribute("name", city_name) ms.setAttribute("lat", gps_lat) ms.setAttribute("long", gps_long) context.data.addChild(ms) context.save() return Response( "ok, j'ai bien noté les coordonnées de %s" % res.group("city"), msg.channel, msg.frm)
def parseask(msg): res = re.match( r"^(\S+)\s*('s|suis|est|is|was|were)\s+([a-zA-Z0-9_-]{3,8})$", msg.message, re.I) if res is not None: nick = res.group(1) login = res.group(3) if nick == "my" or nick == "I" or nick == "i" or nick == "je" or nick == "mon" or nick == "ma": nick = msg.frm if nick in context.data.getNode("aliases").index: context.data.getNode("aliases").index[nick]["to"] = login else: ms = ModuleState("alias") ms.setAttribute("from", nick) ms.setAttribute("to", login) context.data.getNode("aliases").addChild(ms) context.save() return Response("ok, c'est noté, %s est %s" % (nick, login), channel=msg.channel, nick=msg.frm)
def end_countdown(msg): if len(msg.args) < 1: raise IMException("quel événement terminer ?") if msg.args[0] in context.data: if context.data[msg.args[0]].creator == msg.frm or ( msg.cmd == "forceend" and msg.frm_owner): duration = countdown(msg.date - context.data[msg.args[0]].start) del context.data[msg.args[0]] context.save() return Response("%s a duré %s." % (msg.args[0], duration), channel=msg.channel, nick=msg.frm) else: raise IMException( "Vous ne pouvez pas terminer le compteur %s, créé par %s." % (msg.args[0], context.data[msg.args[0]].creator)) else: return Response("%s n'est pas un compteur connu." % (msg.args[0]), channel=msg.channel, nick=msg.frm)
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: raise IMException("%s existe déjà." % msg.args[0]) evt = Event(server=msg.server, channel=msg.channel, creator=msg.frm, start_time=msg.date) 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: evt.end = datetime(yea, int(result2.group(3)), int(result2.group(2)), hou, minu, sec, timezone.utc) elif result2 is not None: evt.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: evt.end = datetime(now.year, now.month, now.day, hou, minu, sec, timezone.utc) else: evt.end = datetime(now.year, now.month, now.day + 1, hou, minu, sec, timezone.utc) except: 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: evt.end = msg.date for (t, g) in result1: if g is None or g == "" or g == "m" or g == "M": evt.end += timedelta(minutes=int(t)) elif g == "h" or g == "H": evt.end += timedelta(hours=int(t)) elif g == "d" or g == "D" or g == "j" or g == "J": evt.end += timedelta(days=int(t)) elif g == "w" or g == "W": evt.end += timedelta(days=int(t)*7) elif g == "y" or g == "Y" or g == "a" or g == "A": evt.end += timedelta(days=int(t)*365) else: evt.end += timedelta(seconds=int(t)) else: raise IMException("Mauvais format de date pour l'événement %s. Il n'a pas été créé." % msg.args[0]) context.data[msg.args[0]] = evt context.save() if evt.end is not None: context.add_event(ModuleEvent(partial(fini, msg.args[0], evt), offset=evt.end - datetime.now(timezone.utc), interval=0)) return Response("%s commencé le %s et se terminera le %s." % (msg.args[0], msg.date.strftime("%A %d %B %Y à %H:%M:%S"), evt.end.strftime("%A %d %B %Y à %H:%M:%S")), channel=msg.channel) else: return Response("%s commencé le %s"% (msg.args[0], msg.date.strftime("%A %d %B %Y à %H:%M:%S")), channel=msg.channel)
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: raise IMException("%s existe déjà." % msg.args[0]) evt = Event(server=msg.server, channel=msg.channel, creator=msg.frm, start_time=msg.date) 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: evt.end = datetime(yea, int(result2.group(3)), int(result2.group(2)), hou, minu, sec, timezone.utc) elif result2 is not None: evt.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: evt.end = datetime(now.year, now.month, now.day, hou, minu, sec, timezone.utc) else: evt.end = datetime(now.year, now.month, now.day + 1, hou, minu, sec, timezone.utc) except: 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: evt.end = msg.date for (t, g) in result1: if g is None or g == "" or g == "m" or g == "M": evt.end += timedelta(minutes=int(t)) elif g == "h" or g == "H": evt.end += timedelta(hours=int(t)) elif g == "d" or g == "D" or g == "j" or g == "J": evt.end += timedelta(days=int(t)) elif g == "w" or g == "W": evt.end += timedelta(days=int(t) * 7) elif g == "y" or g == "Y" or g == "a" or g == "A": evt.end += timedelta(days=int(t) * 365) else: evt.end += timedelta(seconds=int(t)) else: raise IMException( "Mauvais format de date pour l'événement %s. Il n'a pas été créé." % msg.args[0]) context.data[msg.args[0]] = evt context.save() if evt.end is not None: context.add_event( ModuleEvent(partial(fini, msg.args[0], evt), offset=evt.end - datetime.now(timezone.utc), interval=0)) return Response( "%s commencé le %s et se terminera le %s." % (msg.args[0], msg.date.strftime("%A %d %B %Y à %H:%M:%S"), evt.end.strftime("%A %d %B %Y à %H:%M:%S")), channel=msg.channel) else: return Response( "%s commencé le %s" % (msg.args[0], msg.date.strftime("%A %d %B %Y à %H:%M:%S")), channel=msg.channel)
def parseask(msg): name = re.match("^.*!([^ \"'@!]+).*$", msg.message) if name is None: raise IMException( "il faut que tu attribues une commande à l'événement.") if name.group(1) in context.data: raise IMException("un événement portant ce nom existe déjà.") texts = re.match( "^[^\"]*(avant|après|apres|before|after)?[^\"]*\"([^\"]+)\"[^\"]*((avant|après|apres|before|after)?.*\"([^\"]+)\".*)?$", msg.message, re.I) if texts is not None and texts.group(3) is not None: extDate = extractDate(msg.message) if extDate is None or extDate == "": raise IMException("la date de l'événement est invalide !") if texts.group(1) is not None and (texts.group(1) == "après" or texts.group(1) == "apres" or texts.group(1) == "after"): msg_after = texts.group(2) msg_before = texts.group(5) if (texts.group(4) is not None and (texts.group(4) == "après" or texts.group(4) == "apres" or texts.group(4) == "after")) or texts.group(1) is None: msg_before = texts.group(2) msg_after = texts.group(5) if msg_before.find("%s") == -1 or msg_after.find("%s") == -1: raise IMException("Pour que l'événement soit valide, ajouter %s à" " l'endroit où vous voulez que soit ajouté le" " compte à rebours.") evt = ModuleState("event") evt["server"] = msg.server evt["channel"] = msg.channel evt["proprio"] = msg.frm evt["name"] = name.group(1) evt["start"] = extDate evt["msg_after"] = msg_after evt["msg_before"] = msg_before context.data.addChild(evt) context.save() return Response("Nouvel événement !%s ajouté avec succès." % name.group(1), channel=msg.channel) elif texts is not None and texts.group(2) is not None: evt = ModuleState("event") evt["server"] = msg.server evt["channel"] = msg.channel evt["proprio"] = msg.frm evt["name"] = name.group(1) evt["msg_before"] = texts.group(2) context.data.addChild(evt) context.save() return Response("Nouvelle commande !%s ajoutée avec succès." % name.group(1), channel=msg.channel) else: raise IMException( "Veuillez indiquez les messages d'attente et d'après événement entre guillemets." )
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)
def fini(d, strend): context.send_response(strend["server"], Response("%s arrivé à échéance." % strend["name"], channel=strend["channel"], nick=strend["proprio"])) context.data.delChild(context.data.index[strend["name"]]) context.save()
def fini(name, evt): context.send_response(evt._server, Response("%s arrivé à échéance." % name, channel=evt._channel, nick=evt.creator)) evt._evt = None del context.data[name] context.save()