diff --git a/tcl.py b/tcl.py
index 4e828b4..1be2d1c 100644
--- a/tcl.py
+++ b/tcl.py
@@ -7,6 +7,8 @@ import aiohttp
import asyncio
import json
import base64
+import difflib
+
class Config(BaseProxyConfig):
def do_update(self, helper: ConfigUpdateHelper) -> None:
@@ -23,6 +25,8 @@ class Tcl(Plugin):
@command.argument("pattern", pass_raw=True, required=True)
async def tclInfos(self, evt: MessageEvent, pattern: str) -> None:
await evt.mark_read()
+ strToEncode = self.config["mail"] + ':' + self.config["password"]
+ base64string = base64.b64encode(strToEncode.encode('utf-8'))
if not pattern:
await evt.respond(
"""
@@ -40,8 +44,6 @@ class Tcl(Plugin):
"""
)
url = 'https://download.data.grandlyon.com/ws/rdata/tcl_sytral.tclalertetrafic_2/all.json?maxfeatures=200&start=1'
- strToEncode = self.config["mail"] + ':' + self.config["password"]
- base64string = base64.b64encode(strToEncode.encode('utf-8'))
resp = await self.http.get(url, headers={'Authorization' : 'Basic ' + base64string.decode('utf-8')})
ans = await resp.text()
try:
@@ -66,6 +68,76 @@ class Tcl(Plugin):
await evt.respond("
Pas d'alerte sur cette ligne
", allow_html=True)
except KeyError:
await evt.respond("Erreur d'analyse JSON ")
+ elif pattern.__contains__("horaires"):
+ chunks = pattern.split(None, 1)
+ if len(chunks) != 2:
+ await evt.respond(
+ """
+ !tcl horaires arrêt -> Retourne les horaires à l'arrêt
+ """
+ )
+ return
+ with open("/home/tfa/maubot/tcl/tcl_sytral.tclarret.json") as file:
+ objet = json.load(file)
+ values = objet["values"]
+ arrets = []
+ for value in values:
+ arrets.append(value["nom"].lower())
+ arret = difflib.get_close_matches(chunks[1].lower(),arrets,n=1,cutoff=0.8)
+ if len(arret) == 0:
+ await evt.respond("Arrêt non trouvé")
+ return
+ Ids =[]
+ nomArret = ""
+ for value in values:
+ if value["nom"].lower() == arret[0]:
+ nomArret = value["nom"]
+ Ids.append(value["id"])
+
+
+ url = 'https://download.data.grandlyon.com/ws/rdata/tcl_sytral.tclpassagearret/all.json?maxfeatures=2000&start=1'
+ respText = "Prochains départs " + nomArret + " :
"
+ self.log.info(respText)
+ while len(url) > 0:
+ resp = await self.http.get(url, headers={'Authorization' : 'Basic ' + base64string.decode('utf-8')})
+ ans = await resp.text()
+ try:
+ resp.raise_for_status()
+ except aiohttp.ClientError as Error:
+ await evt.respond(str(Error))
+ return
+ objet = json.loads(ans)
+ try:
+ url = objet["next"]
+ except KeyError:
+ url = ""
+ values = objet["values"]
+
+ for value in values:
+ if value["id"] in Ids:
+ if value["type"] == "E": #Filtré sur les estimés et non théoriques
+ if value["coursetheorique"].split('-')[0] == "301A" :
+ transport = "A"
+ elif value["coursetheorique"].split('-')[0] == "303" :
+ transport = "C"
+ elif value["coursetheorique"].split('-')[0] == "325" :
+ transport = "F1"
+ elif value["coursetheorique"].split('-')[0] == "326" :
+ transport = "F2"
+ elif value["coursetheorique"].split('-')[0] == "304" :
+ transport = "D"
+ elif value["coursetheorique"].split('-')[0] == "302A" :
+ transport = "B"
+ else:
+ transport = value["coursetheorique"].split('-')[0][:-1]
+ respText += "- Ligne " + transport + " - direction " \
+ + value["direction"] + " : " + value["delaipassage"] + "
"
+ self.log.info(respText)
+
+ respText += "
"
+ await evt.respond(respText, allow_html=True)
+
+
@classmethod
def get_config_class(cls) -> Type[BaseProxyConfig]:
return Config