From bc721e3d553d25e8f5d55e3bde948128d0ca1096 Mon Sep 17 00:00:00 2001 From: Someone Date: Mon, 5 Sep 2022 21:27:01 +0200 Subject: [PATCH] modules/CommandRaumsuche.py --- modules/CommandRaumsuche.py | 168 ------------------------------------ 1 file changed, 168 deletions(-) delete mode 100644 modules/CommandRaumsuche.py diff --git a/modules/CommandRaumsuche.py b/modules/CommandRaumsuche.py deleted file mode 100644 index ce26694..0000000 --- a/modules/CommandRaumsuche.py +++ /dev/null @@ -1,168 +0,0 @@ -# Mattermost APIv4 Bot. -# written 2019 by Ju - -import mwclient -import pprint -import sys -import re - - -# pylint: disable=wrong-import-position -from AbstractCommand import AbstractCommand -class CommandRaumsuche(AbstractCommand): - TRIGGER = "raumsuche" - CONFIG = {"display_name": "somebot-command", "auto_complete": True, - "auto_complete_hint": "Name", - } - USEINFO = CONFIG["auto_complete_desc"] = CONFIG["description"] = "Tries to find the room with given name." - - # maximum results/rooms listed - MAX_RESULTS = 10 - # path to wiki - WIKI_URL = "wiki.fsinf.at" - # link to page with all rooms - WIKI_URL_ROOMS = "https://wiki.fsinf.at/wiki/Kategorie:Raumcode" - # wiki-login (optional) - #MWS_USER = "USER" - #MWS_PASS = "PASSWORD" - # osm - experimental - uncomment to deactivate - OSM_URL = "https://www.openstreetmap.org/search?query=" - # OSWM link with coordinates - uncomment to deactivate - OSM_COORDINATES = "https://www.openstreetmap.org/?" - # feedback to: - FEEDBACK = "\n\nFeedback zu diesem Feature bitte an **[@​ju](https://mattermost.fsinf.at/fsinf-intern/messages/@ju)** =^.^=" - # Help-Text - HELP_TEXT = "Folgende Tipps können dir bei der Suche helfen:\n" - HELP_TEXT += "\n" - HELP_TEXT += "+ die Suche ist nicht case sensitiv\n" - HELP_TEXT += "+ Verwende 'EI 7' statt 'EI7'\n" - HELP_TEXT += "+ sollte ein Raum nicht eingetragen sein, oder der Suchbegriff nicht passen, schau auf [diese Seite](https://wiki.fsinf.at/wiki/Raum:Hauptseite) und trage ihn nach. Das Wiki lebt von eurer Hilfe." - HELP_TEXT += FEEDBACK - - - def __init__(self, team_id, mw_user=None, mw_user_pw=None): - super().__init__(team_id) - self.mw_user = mw_user - self.mw_user_pw = mw_user_pw - - - def on_POST(self, request, data): - msg = "" - - if data["text"].strip() != "" and data["text"].replace("--chan ", "").strip() != "": - if data["text"].startswith("--chan "): - msg = self.roomSearch(data["text"].replace("--chan ", "")) - request.cmd_respond_text_chan(msg) - return True - else: - msg = self.roomSearch(data["text"]) - request.cmd_respond_text_temp(msg) - return True - else: - request.cmd_respond_text_temp("Du hast vergessen einen Raumnamen anzugeben.\n\n" + self.HELP_TEXT) - return True - - - def roomSearch(self, searchTerm): - searchTerm = searchTerm.strip() - if searchTerm == "help" or searchTerm == "?": - return self.HELP_TEXT - - # a try to prevent injections - searchTerm = re.sub("[^\w]+", " ", searchTerm) - searchTerm = searchTerm.replace(" ", " ").strip() - - # space to * for matching "HS 11" to "HS 11" and "HS11" - searchTerm = searchTerm.replace(" ", "*") - query="[[Category:Raumcode]]|[[RoomName::~*" + searchTerm + "*]] OR [[SearchValue::~*" + searchTerm + "*]] OR [[RoomCode::~*" + searchTerm + "*]]|?RoomName|?Address|?RoomCode|?Longitude|?Latitude" - result = "Du hast nach **`" + searchTerm + "`** gesucht." - - # check if service is available, if so execute query - try: - mws = mwclient.Site(self.WIKI_URL, path="/", retry_timeout=120) - except Exception: - return "Der Service ist gerade nicht verfügbar (zB keine Verbindung zum wiki)." - - #use user + pass for wiki connection if it is set - if self.mw_user and self.mw_user_pw: - mws.login(self.mw_user, self.mw_user_pw) - # TODO: wrong credentials behandeln - - - query_result = mws.ask(query) - - # no results - # https://stackoverflow.com/a/21525143 - _exhausted = object() - if next(query_result, _exhausted) == _exhausted: - return result + " Leider konnten keine Ergebnisse gefunden werden.\n\n" + self.HELP_TEXT - - result += " Folgende Räume wurden gefunden:\n" - # get items again, because they get consumed in the isEmpty - query_result = mws.ask(query) - # results present - counter = 0 - for p in query_result: - if counter < self.MAX_RESULTS: -# pprint.pprint(p) - # check if values are present - if len(next(iter(p.values()))["printouts"]["RoomCode"]) > 0: - roomCode = next(iter(p.values()))["printouts"]["RoomCode"][0] - else: - roomCode = "" - if len(next(iter(p.values()))["printouts"]["RoomName"]) > 0: - roomName = next(iter(p.values()))["printouts"]["RoomName"][0] - else: - roomName = "" - if len(next(iter(p.values()))["printouts"]["Address"]) > 0: - address = next(iter(p.values()))["printouts"]["Address"][0] - else: - address = "" - if len(next(iter(p.values()))["printouts"]["Longitude"]) > 0: - longitude = next(iter(p.values()))["printouts"]["Longitude"][0]["fulltext"] - else: - longitude = "" - if len(next(iter(p.values()))["printouts"]["Latitude"]) > 0: - latitude = next(iter(p.values()))["printouts"]["Latitude"][0]["fulltext"] - else: - latitude = "" - - url = next(iter(p.values()))["fullurl"] - - result += "\n+ [" + roomCode + "](" + url + "), **" + roomName + "** findest du hier: " - - # Address - Part - # priority over "OSM_URL": - if "OSM_COORDINATES" in dir(self) and len(latitude) > 0 and len(longitude) > 0: - # mlat={{{latitude}}}&mlon={{{longitude}}}#map=19/{{{latitude}}}/{{{longitude}}} - osm_query = "mlat=" + latitude + "&mlon=" + longitude + "#map=19/" + latitude + "/" + longitude - result += "[" + address + "](" + self.OSM_COORDINATES + osm_query + " \"link to open street maps\")" - # link without coordinates: - elif "OSM_URL" in dir(self): - # case format "1040 Wien, Favoritenstraße 9; durch Gittertor und Hof zu Stiege II; ins 2. OG; vom Lift aus rechts;" - if "wien" in address.split(",")[0].lower(): - osm_query = "wien%20" + address.split(";")[0].split(",")[1] - # case format "Floragasse 7, 2. Stock" - else: - osm_query = "wien%20" + address.split(",")[0] - # transforms space to %20 - osm_query = osm_query.replace(" ", "%20") - # transforms street number "22-25" to "22" - osm_query = re.sub(r"-\d+", r"", osm_query) - - result += "[" + address + "](" + self.OSM_URL + osm_query + ")" - # else print plain address - else: - result += address - counter += 1 - else: - break - - result += "\n\nSollte der Raum nicht dabei sein, kannst du ihn unter [Wiki-Räume](" + self.WIKI_URL_ROOMS + ") nachtragen bzw. einen Suchbegriff hinzufügen." + self.FEEDBACK - return result - - - -if __name__ == "__main__": - a = CommandRaumsuche("asdf") - print(a.roomSearch(sys.argv[1])) -- 2.43.0