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):
"""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": ":coffin:",
+ "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]
ri = randint(0, len(smiles) - 1)
return smiles[ri]
+ def computeEqualDrinkers(self):
+ """Compute equally drunken drinkers."""
+ 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)
- 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
- )
+ 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"
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