Exemplo n.º 1
0
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
Exemplo n.º 2
0
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"]))
Exemplo n.º 3
0
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))
Exemplo n.º 4
0
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"]
Exemplo n.º 5
0
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))
Exemplo n.º 6
0
def start_watching(site, offset=0):
    """Launch the event watching given site

    Argument:
    site -- DATAS structure representing a site to watch

    Keyword argument:
    offset -- offset time to delay the launch of the first check
    """

    #o = urlparse(getNormalizedURL(site["url"]), "http")
    #print("Add %s event for site: %s" % (site["type"], o.netloc))

    try:
        evt = ModuleEvent(func=partial(fwatch, url=site["url"]),
                          cmp=site["lastcontent"],
                          offset=offset, interval=site.getInt("time"),
                          call=partial(alert_change, site=site))
        site["_evt_id"] = add_event(evt)
    except IMException:
        logger.exception("Unable to watch %s", site["url"])
Exemplo n.º 7
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))
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
def _newevt(**args):
    context.add_event(ModuleEvent(call=partial(_ticker, **args), interval=42))
Exemplo n.º 10
0
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)