]> rtime.felk.cvut.cz Git - hubacji1/coffee-getter.git/blobdiff - cbgetter.py
Show stats for 3 and more drinkers
[hubacji1/coffee-getter.git] / cbgetter.py
index 41237d8a13ef93e4022d78c7e457efb9946f5ba3..a08a2268de61e8eb5aaf5d065b1c1e9f745abdd6 100644 (file)
@@ -12,6 +12,9 @@ class CoffeebotGetter:
         self.cfg = Conf()
         self.db = Db(self.cfg.getCoffeeDbPath())
         self.msg = ""
+        self.top = []
+        self.topeq = []
+        self.isuff = {1: "st", 2: "nd", 3: "rd", 4: "th", 5: "th"}
         return None
 
     def getMsg(self):
@@ -22,23 +25,223 @@ class CoffeebotGetter:
         """Send message to Slack Bot."""
         return post(self.cfg.getCoffeebotURL(), dumps({"text": self.msg}))
 
+    def get_drink_smile(self, drink):
+        """Return Slack smile for ``drink``.
+
+        Keyword arguments:
+        drink -- Drink of smile.
+        """
+        smiles = {
+            "tea": ":tea:",
+            "espresso": ":coffee:",
+            "espresso lungo": ":owl:",
+            "cappuccino": ":flara:",
+            "latte macchiato": ":baby_bottle:",
+            "Club-Mate 0,5 l": ":club-mate:",
+            "Club-Mate 0,33 l": ":club-mate_cola:",
+        }
+        return smiles[drink]
+
     def getHeroComment(self):
         """Return comment for hero."""
         hsuff = [
-            " - yes",
-            " - no",
-            " - maybe",
-            #", oops",
-            #" - real hero",
-            #" because couldn't resist",
-            #" - drunken master",
-            #", woohoo",
-            #" - unbeatable",
-            #" - superultramaxidrinker",
-            #" and didn't sleep last week",
-            #" in last 604800 seconds",
-            #", no idea how",
-            #" and still drinking",
+            ", oops",
+            " - real hero",
+            " because couldn't resist",
+            " - drunken master",
+            ", woohoo",
+            " - unbeatable",
+            " - superultramaxidrinker",
+            " and didn't sleep last week",
+            " in last 604800 seconds",
+            ", no idea how",
+            " and still drinking",
         ]
         ri = randint(0, len(hsuff) - 1)
         return hsuff[ri]
+
+    def getSomeSmile(self):
+        """Return some Slack smile."""
+        smiles = [
+            ":party_parrot:",
+            ":cat2:",
+            ":heavy_check_mark:",
+            ":baby_bottle:",
+            ":+1:",
+            ":aaw_yeah:",
+            ":better:",
+        ]
+        ri = randint(0, len(smiles) - 1)
+        return smiles[ri]
+
+    def computeEqualDrinkers(self):
+        """Compute equally drunken drinkers."""
+        self.topeq = []
+        if len(self.top) <= 0:
+            return
+        lc = self.top[0][1] + 1
+        for (un, c) in self.top:
+            if c < lc:
+                self.topeq.append([])
+                lc = c
+            self.topeq[-1].append((un, c))
+        return
+
+    def load_top_drinks(self):
+        """Get list of top drinks, update message."""
+        self.msg = "*Top drinks*\n"
+        self.top = self.db.get_top_drinks()
+        self.computeEqualDrinkers()
+        i = 1
+        for drinks in self.topeq[:3]:
+            c = drinks[0][1]
+            d = [un for (un, c) in drinks]
+            self.msg += "{}{}".format(i, self.isuff[i])
+            if len(d) > 1:
+                self.msg += " are "
+            else:
+                self.msg += " is "
+            for un in d:
+                if un is d[0]:
+                    self.msg += "{}".format(self.get_drink_smile(un))
+                elif un is d[-1]:
+                    self.msg += "" if len(d) == 2 else ","
+                    self.msg += " and {}".format(self.get_drink_smile(un))
+                else:
+                    self.msg += ", *{}*".format(self.get_drink_smile(un))
+            if len(d) > 1:
+                self.msg += " with each of "
+            else:
+                self.msg += " with "
+            self.msg += "`{}` drunk".format(c)
+            self.msg += "\n"
+            i += 1
+
+    def loadTopMateDrinkers(self):
+        """Get list of top Mate drinkers, update message."""
+        self.msg = "*Top 5 Club-Mate drinkers*\n"
+        self.top = self.db.getTopMateDrinkers()
+        self.computeEqualDrinkers()
+        totl = [c for (un, c) in self.top]
+        tot = sum(totl)
+        i = 1
+        for drinkers in self.topeq[:5]:
+            c = drinkers[0][1]
+            d = [un for (un, c) in drinkers]
+            self.msg += "{}{}".format(i, self.isuff[i])
+            if len(d) > 1:
+                self.msg += " are "
+            else:
+                self.msg += " is "
+            for un in d:
+                if un is d[0]:
+                    self.msg += "*{}*".format(un)
+                elif un is d[-1]:
+                    self.msg += "" if len(d) == 2 else ","
+                    self.msg += " and *{}*".format(un)
+                else:
+                    self.msg += ", *{}*".format(un)
+            if len(d) > 1:
+                self.msg += " of whom each drank "
+            else:
+                self.msg += " who drank "
+            self.msg += "`{:.2f}` liters".format(c)
+            if i == 1:
+                self.msg += self.getHeroComment()
+            self.msg += "\n"
+            i += 1
+        self.msg += "\n"
+        self.msg += "Oh, and together we drank *{:.2f}* liters {}".format(
+            tot,
+            self.getSomeSmile()
+        )
+        return
+
+    def load_top_tea_drinkers(self):
+        """Get list of top tea drinkers, update message."""
+        self.msg = "*Top 5 tea drinkers*\n"
+        self.top = self.db.get_top_tea_drinkers()
+        self.computeEqualDrinkers()
+        tot = sum([c for (un, c) in self.top])
+        i = 1
+        for drinkers in self.topeq[:5]:
+            c = drinkers[0][1]
+            d = [un for (un, c) in drinkers]
+            self.msg += "{}{}".format(i, self.isuff[i])
+            if len(d) > 1:
+                self.msg += " are "
+            else:
+                self.msg += " is "
+            for un in d:
+                if un is d[0]:
+                    self.msg += "*{}*".format(un)
+                elif un is d[-1]:
+                    self.msg += "" if len(d) == 2 else ","
+                    self.msg += " and *{}*".format(un)
+                else:
+                    self.msg += ", *{}*".format(un)
+            if len(d) > 1:
+                self.msg += " of whom each drank "
+            else:
+                self.msg += " who drank "
+            if c > 1:
+                self.msg += "`{}` teas".format(c)
+            else:
+                self.msg += "`{}` tea".format(c)
+            self.msg += "\n"
+            i += 1
+        self.msg += "\n"
+        self.msg += "Oh, and together we drank *{}* teas {}".format(
+            tot,
+            self.getSomeSmile()
+        )
+
+    def loadDrunkSum(self, *args, **kwargs):
+        """Get list of drunken ``flavor`` from ``dtf`` to ``dtt``, update msg.
+
+        Keyword arguments:
+        flavor -- The flavor of beverage.
+        dtf -- Date and time *from*.
+        dtt -- Date and time *to*.
+        """
+        self.top = self.db.getDrunkSum(*args, **kwargs)
+        if args:
+            flavor = args[0]
+            dtf = args[1]
+            dtt = args[2]
+        elif kwargs:
+            flavor = kwargs["flavor"]
+            dtf = kwargs["dtf"]
+            dtt = kwargs["dtt"]
+        self.msg = "{} drunk from {} to {}:\n".format(flavor, dtf, dtt)
+        for (un, cnt) in self.top:
+            self.msg += "{}: {}\n".format(un, cnt)
+        self.msg += "---"
+        return
+
+    def loadDrunkList(self, *args, **kwargs):
+        """Get list of drunken ``flavor`` from ``dtf`` to ``dtt``, update msg.
+
+        Keyword arguments:
+        flavor -- The flavor of beverage.
+        dtf -- Date and time *from*.
+        dtt -- Date and time *to*.
+        """
+        self.top = self.db.getDrunkSum(*args, **kwargs)
+        d = self.db.getDrunkList(*args, **kwargs)
+        if args:
+            flavor = args[0]
+            dtf = args[1]
+            dtt = args[2]
+        elif kwargs:
+            flavor = kwargs["flavor"]
+            dtf = kwargs["dtf"]
+            dtt = kwargs["dtt"]
+        self.msg = "{} drunk from {} to {}:\n".format(flavor, dtf, dtt)
+        for (un, l) in d.items():
+            self.msg += "{}: ".format(un)
+            for cnt in l[:-1]:
+                self.msg += "{}, ".format(cnt)
+            self.msg += "{}\n".format(l[-1])
+        self.msg += "---"
+        return