def current_match_new_action(matches): def cmp(om, nm): return len(nm) and ( len(om) == 0 or len(nm[0]["home_team_events"]) != len(om[0]["home_team_events"]) or len(nm[0]["away_team_events"]) != len(om[0]["away_team_events"])) context.add_event( ModuleEvent(func=partial( lambda url: json.loads(urlopen(url).read().decode()), API_URL % "matches/current?by_date=DESC"), cmp=partial(cmp, matches), call=current_match_new_action, interval=30)) for match in matches: if is_valid(match): events = sort_events(match["home_team"], match["away_team"], match["home_team_events"], match["away_team_events"]) msg = "Match %s vs. %s ; score %s - %s" % ( match["home_team"]["country"], match["away_team"]["country"], match["home_team"]["goals"], match["away_team"]["goals"]) if len(events) > 0: msg += " ; à la " + txt_event(events[0]) for n in context.data.getChilds(): context.send_response(n["server"], Response(msg, channel=n["channel"]))
def load(context): context.add_event( ModuleEvent(func=partial( lambda url: urlopen(url, timeout=10).read().decode(), API_URL % "matches/current?by_date=DESC"), call=current_match_new_action, interval=30))
def current_match_new_action(matches, osef): def cmp(om, nm): return len(nm) and (len(om) == 0 or len(nm[0]["home_team_events"]) != len(om[0]["home_team_events"]) or len(nm[0]["away_team_events"]) != len(om[0]["away_team_events"])) context.add_event(ModuleEvent(func=lambda url: json.loads(urlopen(url).read().decode()), func_data=API_URL % "matches/current?by_date=DESC", cmp=cmp, call=current_match_new_action, interval=30)) for match in matches: if is_valid(match): events = sort_events(match["home_team"], match["away_team"], match["home_team_events"], match["away_team_events"]) msg = "Match %s vs. %s ; score %s - %s" % (match["home_team"]["country"], match["away_team"]["country"], match["home_team"]["goals"], match["away_team"]["goals"]) if len(events) > 0: msg += " ; à la " + txt_event(events[0]) for n in context.data.getChilds(): context.send_response(n["server"], Response(msg, channel=n["channel"]))
def _ticker(to_server, to_channel, **kwargs): global last_seen context.add_event( ModuleEvent(call=partial(_ticker, to_server, to_channel, **kwargs), interval=42)) last = getJSON("https://ohsnap.p0m.fr/api/images/last") if last["hash"] != last_seen: if last_seen is not None: context.send_response( to_server, Response( "Nouveau snap de {author} : https://ohsnap.p0m.fr/{hash}". format(**last), channel=to_channel)) last_seen = last["hash"]
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 load(context): context.set_knodes({ "dict": DictNode, "event": Event, }) if context.data is None: context.set_default(DictNode()) # Relaunch all timers for kevt in context.data: if context.data[kevt].end: context.data[kevt]._evt = context.add_event(ModuleEvent(partial(fini, kevt, context.data[kevt]), offset=context.data[kevt].end - datetime.now(timezone.utc), interval=0))
def load(context): if not context.config or not context.config.hasNode("sayon"): print("You can append in your configuration some balise to " "automaticaly wish an happy new year on some channels like:\n" "<sayon hostid=\"[email protected]:6667\" " "channel=\"#nemutest\" />") def bonneannee(): txt = "Bonne année %d !" % yrn print(txt) if context.config and context.config.hasNode("sayon"): for sayon in context.config.getNodes("sayon"): if "hostid" not in sayon or "channel" not in sayon: print("Error: missing hostif or channel") continue srv = sayon["hostid"] chan = sayon["channel"] context.send_response(srv, Response(txt, chan)) d = datetime(yrn, 1, 1, 0, 0, 0, 0, timezone.utc) - datetime.now(timezone.utc) context.add_event(ModuleEvent(interval=0, offset=d.total_seconds(), call=bonneannee))
def load(context): context.set_knodes({ "dict": DictNode, "event": Event, }) if context.data is None: context.set_default(DictNode()) # Relaunch all timers for kevt in context.data: if context.data[kevt].end: context.data[kevt]._evt = context.add_event( ModuleEvent(partial(fini, kevt, context.data[kevt]), offset=context.data[kevt].end - datetime.now(timezone.utc), interval=0))
def load(context): context.add_event(ModuleEvent(func=lambda url: urlopen(url, timeout=10).read().decode(), func_data=API_URL % "matches/current?by_date=DESC", call=current_match_new_action, interval=30))
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 _newevt(**args): context.add_event(ModuleEvent(call=partial(_ticker, **args), interval=42))
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 _newevt(**args): context.add_event(ModuleEvent(call=partial(_fini, **args), interval=42))
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)