Add service command to nr
This commit is contained in:
parent
b92abaf20d
commit
08894b26b5
1 changed files with 45 additions and 0 deletions
|
@ -12,6 +12,10 @@ class Module(object):
|
||||||
).hook(self.arrivals, min_args=1,
|
).hook(self.arrivals, min_args=1,
|
||||||
help="Get train information for a station (Powered by NRE)",
|
help="Get train information for a station (Powered by NRE)",
|
||||||
usage="<crs_id>")
|
usage="<crs_id>")
|
||||||
|
bot.events.on("received").on("command").on("nrservice"
|
||||||
|
).hook(self.service, min_args=1,
|
||||||
|
help="Get train service information for a Darwin ID (Powered by NRE)",
|
||||||
|
usage="<service_id>")
|
||||||
|
|
||||||
def time_compare(self, one, two):
|
def time_compare(self, one, two):
|
||||||
return (one.hour - two.hour) * 60 + (one.minute - two.minute)
|
return (one.hour - two.hour) * 60 + (one.minute - two.minute)
|
||||||
|
@ -71,3 +75,44 @@ class Module(object):
|
||||||
|
|
||||||
event["stdout"].write("%s (%s): %s" % (query["locationName"], crs,
|
event["stdout"].write("%s (%s): %s" % (query["locationName"], crs,
|
||||||
trains_string))
|
trains_string))
|
||||||
|
|
||||||
|
def service(self, event):
|
||||||
|
token = self.bot.config["nre-api-key"]
|
||||||
|
service_id = event["args_split"][0]
|
||||||
|
|
||||||
|
client = Client(URL)
|
||||||
|
|
||||||
|
header_token = client.factory.create('ns2:AccessToken')
|
||||||
|
header_token.TokenValue = token
|
||||||
|
client.set_options(soapheaders=header_token)
|
||||||
|
query = client.service.GetServiceDetails(service_id)
|
||||||
|
|
||||||
|
stations = [{
|
||||||
|
"name": query["locationName"], "crs": query["crs"],
|
||||||
|
"scheduled": query["std"],
|
||||||
|
"time": query["etd"] if "etd" in query else query["atd"],
|
||||||
|
"length": query["length"],
|
||||||
|
"called": "atd" in query
|
||||||
|
}]
|
||||||
|
for station in query["subsequentCallingPoints"][0][0][0]:
|
||||||
|
stations.append(
|
||||||
|
{"name": station["locationName"],
|
||||||
|
"crs": station["crs"],
|
||||||
|
"scheduled": station["st"],
|
||||||
|
"time": station["et"] if "et" in station else station["at"],
|
||||||
|
"length": station["length"],
|
||||||
|
"called": "at" in station
|
||||||
|
})
|
||||||
|
|
||||||
|
for station in stations:
|
||||||
|
if station["time"] == "On time": station["time"] = station["scheduled"]
|
||||||
|
|
||||||
|
format = "(%s/%s at %s)" if station["called"] else "%s/%s, %s"
|
||||||
|
station["summary"] = format % (station["crs"], station["name"], station["time"])
|
||||||
|
|
||||||
|
done_count = len([s for s in stations if s["called"]])
|
||||||
|
total_count = len(stations)
|
||||||
|
|
||||||
|
event["stdout"].write("%s car %s train (%s/%s): %s" % (query["length"],
|
||||||
|
query["operator"], done_count, total_count,
|
||||||
|
"-> ".join([s["summary"] for s in stations])))
|
||||||
|
|
Loading…
Reference in a new issue