From: Jiri Vlasak Date: Thu, 21 Mar 2019 06:17:37 +0000 (+0100) Subject: Add top mate drinkers getter X-Git-Tag: v0.1.0~1^2~5 X-Git-Url: https://rtime.felk.cvut.cz/gitweb/hubacji1/coffee-getter.git/commitdiff_plain/9166c14dd36e8ed285d0d4595ce5ad327ad0ee67 Add top mate drinkers getter --- diff --git a/cbdb.py b/cbdb.py index 8bbc11c..5eda3d5 100644 --- a/cbdb.py +++ b/cbdb.py @@ -18,3 +18,37 @@ class Db: def __del__(self): if self.con: self.con.close() + + def getTopMateDrinkers(self): + """Return list of pairs of name, count for Mate drinkers.""" + users = {} + que = """ + SELECT count(*), users.name FROM coffees + INNER JOIN users ON coffees.id = users.id + WHERE flavor = 'Club-Mate 0,5 l' + AND coffees.time BETWEEN + datetime('now', 'localtime', '-7 days') AND + datetime('now', 'localtime') + GROUP BY coffees.id + """ + for (cnt, un) in self.cur.execute(que): + users[un] = cnt * 0.5 + que = """ + SELECT count(*), users.name FROM coffees + INNER JOIN users ON coffees.id = users.id + WHERE flavor = 'Club-Mate 0,33 l' + AND coffees.time BETWEEN + datetime('now', 'localtime', '-7 days') AND + datetime('now', 'localtime') + GROUP BY coffees.id + """ + for (cnt, un) in self.cur.execute(que): + if un in users: + users[un] += cnt * 0.33 + else: + users[un] = cnt * 0.33 + top = [] + for (un, cnt) in users.items(): + top.append((un, cnt)) + top.sort(key=lambda x: x[1], reverse=True) + return top diff --git a/cbgetter.py b/cbgetter.py index 727caca..d4fb60d 100644 --- a/cbgetter.py +++ b/cbgetter.py @@ -12,6 +12,7 @@ class CoffeebotGetter: self.cfg = Conf() self.db = Db(self.cfg.getCoffeeDbPath()) self.msg = "" + self.top = [] return None def getMsg(self): @@ -56,3 +57,28 @@ class CoffeebotGetter: ] ri = randint(0, len(smiles) - 1) return smiles[ri] + + def loadTopMateDrinkers(self): + """Get list of top Mate drinkers, update message.""" + self.msg = "*Top 5 Club-Mate drinkers*\n" + self.top = self.db.getTopMateDrinkers() + totl = [c for (un, c) in self.top] + tot = sum(totl) + isuff = {1: "st", 2: "nd", 3: "rd", 4: "th", 5: "th"} + i = 1 + for (un, c) in self.top[:5]: + self.msg += "{}{} is *{}* who drank `{:.2f}` liters".format( + i, isuff[i], + un, + 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