actions/wichDock.js (view raw)
1const requestTPG = require("../tpgRequest");
2
3const TRAMS = {
4 PALE: "15",
5 NATI: "15",
6 PRBE: "14",
7 CRGE: "18",
8 GRVI: "14",
9};
10
11const getFirstTram = dataTPG => {
12 const tramNum = TRAMS[dataTPG.data.stop.stopCode];
13 const firstTram = dataTPG.data.departures.find(
14 tram => tram.line.lineCode === tramNum && tram.waitingTimeMillis > 0
15 );
16 return firstTram;
17};
18
19const formatData = dataTPG => {
20 if (!dataTPG)
21 return "Désolé, je n'arrive pas à récupérer les infos du prochain tram\nNous avons quelques soucis avec l'arrêt *Palettes* actuellement.";
22 const stopCode = dataTPG.data.stop.stopCode;
23 const step =
24 dataTPG.data.steps[0].stop.stopCode === stopCode
25 ? dataTPG.data.steps[0]
26 : dataTPG.data.steps[dataTPG.data.steps.length - 1];
27 if (step.stop.stopCode !== stopCode)
28 return "Le tram ne fera que passer à l'arrêt";
29 if (!step.arrivalTime)
30 return "Désolé, je n'arrive pas à récupérer les infos du prochain tram pour le moment.";
31 const physicalStopCode = step.physicalStop.physicalStopCode;
32 const quai = physicalStopCode.replace(stopCode, "").replace("0", "");
33 const waitingTime = step.arrivalTime.replace("00", "0");
34 const content = `Le prochain tram *${TRAMS[stopCode]}* sera sur le quai n° *${
35 quai
36 }* dans *${waitingTime} min*`;
37 return content;
38};
39
40module.exports = (request, response) => {
41 const dialogflow = request.content.dialogflow;
42 if (!dialogflow.parameters.stopName)
43 return response.sendText("Pour quel arrêt ?");
44 const stopCode = dialogflow.parameters.stopName;
45 return requestTPG("GetNextDepartures", { stopCode })
46 .then(dataTPG => {
47 const firstTram = getFirstTram(dataTPG);
48 return requestTPG("GetThermometerPhysicalStops", {
49 departureCode: firstTram.departureCode,
50 });
51 })
52 .then(dataTPG => {
53 const content = formatData(dataTPG);
54 return response.sendText(content);
55 })
56 .catch(error => {
57 console.log({ error });
58 response.sendText(
59 `Désolé, Je ne parviens pas à reconnaître un nom d'arrêt TPG avec plusieurs quais.
60Les arrêts possibles sont *Palettes*, *Carouge*, *Nations*, *P+R Bernex* et *Meyrin Gravière*`
61 );
62 });
63};