]> git.somenet.org - pub/jan/mattermost-bot.git/blob - modules/CommandTissJoin.py
modules/CommandTissJoin.py
[pub/jan/mattermost-bot.git] / modules / CommandTissJoin.py
1 # Mattermost Bot module.
2 #  Copyright (c) 2016-2022 by Someone <someone@somenet.org> (aka. Jan Vales <jan@jvales.net>)
3 #  published under MIT-License
4
5 import re
6
7
8 REX_linesplit = re.compile(r"\xa0|\t|\s{4}")
9
10
11 # pylint: disable=wrong-import-position
12 from AbstractCommand import AbstractCommand
13 class CommandTissJoin(AbstractCommand):
14     TRIGGER = "tissjoin"
15     CONFIG = {"display_name": "somebot-command", "auto_complete": True,
16               "auto_complete_hint": "<as-is-copy/paste of one TISS-LVA-Cockpit table>",
17              }
18     USEINFO = CONFIG["auto_complete_desc"] = CONFIG["description"] = "Parses input and tries to join every LVA-channel. There is no undo."
19
20
21     def on_POST(self, request, data):
22         result = ""
23         lines = data["text"].splitlines()
24         for line in lines:
25             lva_line = REX_linesplit.split(line)
26             if len(lva_line) < 2:
27                 continue
28
29             lvaname = lva_line[0].strip().replace("&", " ").replace("-", " ").replace("|", " ").replace(",", " ").strip()
30             lvaname = re.sub(r"\d\d\d\.\d\d\d\s*\w\w\s*$", " ", lvaname).strip()
31             if len(lvaname) < 5:
32                 continue
33
34             if lvaname.startswith("Titel   Std") or lvaname.startswith("Summe   "):
35                 continue
36
37             result += "\n+ ``"+lvaname+"``"
38
39             # max 60 char length
40             channel_results = self.bot.api.search_channel(self.TEAM_ID, lvaname[:60]) # max 60 char length
41
42             if not channel_results:
43                 result += "\n   + :stop_sign: could not find suitable channel"
44
45             elif len(channel_results) == 1:
46                 channel = channel_results[0]
47                 result += "\n   + :white_check_mark: found channel: ~"+channel["name"]+"\n   + trying to join..."
48                 # no useful result
49                 self.bot.api.add_user_to_channel(channel["id"], data["user_id"])
50
51             else:
52                 result += "\n   + :warning: multiple channels found. Join the correct channel(s) by clicking on their name. If they are not clickable, click on ``More...`` to download the full channel-list. Close the window once it opens."
53                 for channel in channel_results:
54                     result += "\n     + [~"+channel["name"]+"](https://mattermost.fsinf.at/w-inf-tuwien/channels/"+channel["name"]+")\n"
55
56
57         if result == "":
58             request.cmd_respond_text_temp("### ``TISS-Join results``\nFailed to detect any courses. :(")
59
60         request.cmd_respond_text_temp("### ``TISS-Join results``"+result)