diff --git a/modules/velib.py b/modules/velib.py index 19ee264..ca9915f 100644 --- a/modules/velib.py +++ b/modules/velib.py @@ -4,14 +4,20 @@ import http.client import re from xml.dom.minidom import parseString -from module_state import ModuleState +from event import ModuleEvent +from xmlparser.node import ModuleState -nemubotversion = 3.0 +nemubotversion = 3.2 -def load(): +def load(context): global DATAS DATAS.setIndex("name", "station") + evt = ModuleEvent(station_available, "42706", + (lambda a, b: a != b), None, 60, + station_status) + context.events.append(evt) + evt.run() def help_tiny (): """Line inserted in the response to the command !help""" @@ -35,8 +41,8 @@ def getPage (s, p): conn.close() return (res.status, data) - -def station_status(msg, station): +def station_status(station): + """Gets available and free status of a given station""" (st, page) = getPage(CONF.getNode("server")["ip"], CONF.getNode("server")["url"] + station) if st == http.client.OK: response = parseString(page) @@ -50,25 +56,43 @@ def station_status(msg, station): free = int(free[0].childNodes[0].nodeValue) else: free = 0 - msg.send_chn("%s: à la station %s : %d vélib et %d points d'attache disponibles." % (msg.nick, station, available, free)) + return (available, free) else: - msg.send_chn("%s: station %s inconnue." % (msg.nick, station)) + return (None, None) -def parseanswer(msg): - global DATAS - if msg.cmd[0] == "velib": - if len(msg.cmd) > 5: - msg.send_chn("%s: Demande-moi moins de stations à la fois." % msg.nick) - elif len(msg.cmd) > 1: - for station in msg.cmd[1:]: - if re.match("^[0-9]{4,5}$", station): - station_status(msg, station) - elif station in DATAS.index: - station_status(msg, DATAS.index[station]["number"]) - else: - msg.send_chn("%s: numéro de station invalide." % (msg.nick)) +def station_available(station): + """Gets available velib at a given velib station""" + (a, f) = station_status(station) + return a + +def station_free(station): + """Gets free slots at a given velib station""" + (a, f) = station_status(station) + return f + + +def print_station_status(msg, station): + """Send message with information about the given station""" + (available, free) = station_status(station) + if available is not None and free is not None: + msg.send_chn("%s: à la station %s : %d vélib et %d points d'attache disponibles." % (msg.nick, station, available, free)) else: - msg.send_chn("%s: Pour quelle station ?" % msg.nick) - return True - else: + msg.send_chn("%s: station %s inconnue." % (msg.nick, station)) + +def ask_stations(data, msg): + """Hook entry from !velib""" + global DATAS + if len(msg.cmd) > 5: + msg.send_chn("%s: Demande-moi moins de stations à la fois." % msg.nick) + elif len(msg.cmd) > 1: + for station in msg.cmd[1:]: + if re.match("^[0-9]{4,5}$", station): + print_station_status(msg, station) + elif station in DATAS.index: + print_station_status(msg, DATAS.index[station]["number"]) + else: + msg.send_chn("%s: numéro de station invalide." % (msg.nick)) + return True + else: + msg.send_chn("%s: Pour quelle station ?" % msg.nick) return False diff --git a/modules/velib.xml b/modules/velib.xml index dc9ca99..112fa7f 100644 --- a/modules/velib.xml +++ b/modules/velib.xml @@ -1,4 +1,5 @@ - \ No newline at end of file + +