[somebot] /course-is-meh <reason>
authorSomeone <someone@somenet.org>
Wed, 8 Dec 2021 18:38:38 +0000 (19:38 +0100)
committerSomeone <someone@somenet.org>
Wed, 8 Dec 2021 18:38:38 +0000 (19:38 +0100)
modules/CommandCourseIsMeh.py [new file with mode: 0644]

diff --git a/modules/CommandCourseIsMeh.py b/modules/CommandCourseIsMeh.py
new file mode 100644 (file)
index 0000000..2a8440a
--- /dev/null
@@ -0,0 +1,78 @@
+# Mattermost Bot module.
+#  Copyright (c) 2016-2021 by Someone <someone@somenet.org> (aka. Jan Vales <jan@jvales.net>)
+#  published under MIT-License
+#
+# This command relies on the priviledged DB-Cleaner maint script.
+
+
+from inspect import cleandoc
+
+import logging
+logger = logging.getLogger(__name__)
+
+
+# pylint: disable=wrong-import-position
+from AbstractCommand import AbstractCommand
+class CommandCourseIsMeh(AbstractCommand):
+    TRIGGER = "course-is-meh"
+    CONFIG = {"display_name": "somebot-command", "auto_complete": True,
+              "auto_complete_hint": "[<reason>]",
+             }
+    CONFIG["auto_complete_desc"] = CONFIG["description"] = "Use in a course channel. Increments the 'course is meh atm' counter. The optional reason is sent to fsinf to look into."
+
+
+    def __init__(self, team_id, datadir):
+        super().__init__(team_id)
+        self.datadir = datadir
+        self.course_stats = dict()
+
+
+    def on_POST(self, request, data):
+        msg_text = data['text'].strip()
+        c = self.bot.api.get_channel(data["channel_id"])
+        import pprint
+        pprint.pprint(c)
+
+        if c["name"] in ["town-square", "off-topic"] or c["display_name"][0] == "=" or c["type"] != "O":
+            request.cmd_respond_text_temp("``/"+self.TRIGGER+"`` failed: Command must be used in a course channel.")
+            return
+
+        if len(msg_text) > 5000:
+            request.cmd_respond_text_temp("``/"+self.TRIGGER+"`` failed: reason-text must be smaller than 5000 characters :(\nYour text is: "+str(len(msg_text[1]))+" characters long.")
+            return
+
+        # do actual action
+        self.meh_courses_inc(data["channel_name"])
+        if len(msg_text) > 0:
+            self.bot.api.create_post("cmr1s9d6678e7y94iw3jgwte3c", "``AUTODELETE-DAY`` ``/"+self.TRIGGER+"`` used by ``@"+data["user_name"]+"`` in ``"+data["team_domain"]+"::"+data["channel_name"]+"``\n```\n"+data["text"].strip()+"\n```")
+
+        #self.bot.debug_chan("``/"+self.TRIGGER+" "+data["text"].strip()+"`` used by ``@"+data["user_name"]+"`` in ``"+data["team_domain"]+"::"+data["channel_name"]+"``")
+        request.cmd_respond_text_temp("### ``Done.`` :)")
+
+
+    def on_shutdown(self):
+        self.meh_courses_dumpstats()
+
+    def on_SIGUSR1(self, sigusr1_cnt):
+        self.meh_courses_dumpstats()
+
+
+    def meh_courses_inc(self, course, amount=1):
+        if course in self.course_stats:
+            self.course_stats[course] += amount
+        else:
+            self.course_stats[course] = amount
+
+
+    def meh_courses_dumpstats(self):
+        stats = self.course_stats.copy()
+        self.course_stats = dict()
+        self.bot.dump_stats_json(stats, self.datadir+"course_stats-"+self.TEAM_ID+".json", cleandoc("""
+            This week's ``/course-is-meh`` -stats #mmstats.
+            Use this command in a course channel to increment the counter if the course is currently suboptimal for you. This command produces no output in that channel.
+            It doesnt really matter if its because you forgot your laptop-charger or the course just changed its modalities and you turned negative without any way to become positive again.
+            If you supply a reason it will be forwarded to fsinf to take a look at. (We want to know when you forgot your laptop chargers! XD )
+
+            |course|meh-ness|
+            |---|---:|
+        """))