]> rtime.felk.cvut.cz Git - hubacji1/coffee-getter.git/blob - cbgetter.py
c02c11c838516f1b71fc9a848169852331fb81ae
[hubacji1/coffee-getter.git] / cbgetter.py
1 # -*- coding: utf-8 -*-
2 """Get data from database and publish them."""
3 from json import dumps
4 from random import randint
5 from requests import post
6 from cbconf import Conf
7 from cbdb import Db
8
9 class CoffeebotGetter:
10     """This class connects configuration, database access and publishing."""
11     def __init__(self):
12         self.cfg = Conf()
13         self.db = Db(self.cfg.getCoffeeDbPath())
14         self.msg = ""
15         self.top = []
16         self.topeq = []
17         return None
18
19     def getMsg(self):
20         """Return message."""
21         return self.msg
22
23     def sendMsgToSlack(self):
24         """Send message to Slack Bot."""
25         return post(self.cfg.getCoffeebotURL(), dumps({"text": self.msg}))
26
27     def getHeroComment(self):
28         """Return comment for hero."""
29         hsuff = [
30             ", oops",
31             " - real hero",
32             " because couldn't resist",
33             " - drunken master",
34             ", woohoo",
35             " - unbeatable",
36             " - superultramaxidrinker",
37             " and didn't sleep last week",
38             " in last 604800 seconds",
39             ", no idea how",
40             " and still drinking",
41         ]
42         ri = randint(0, len(hsuff) - 1)
43         return hsuff[ri]
44
45     def getSomeSmile(self):
46         """Return some Slack smile."""
47         smiles = [
48             ":party_parrot:",
49             ":cat2:",
50             ":heavy_check_mark:",
51             ":baby_bottle:",
52             ":+1:",
53             ":aaw_yeah:",
54             ":better:",
55         ]
56         ri = randint(0, len(smiles) - 1)
57         return smiles[ri]
58
59     def computeEqualDrinkers(self):
60         """Compute equally drunken drinkers."""
61         lc = self.top[0][1] + 1
62         for (un, c) in self.top:
63             if c < lc:
64                 self.topeq.append([])
65                 lc = c
66             self.topeq[-1].append((un, c))
67         return
68
69     def loadTopMateDrinkers(self):
70         """Get list of top Mate drinkers, update message."""
71         self.msg = "*Top 5 Club-Mate drinkers*\n"
72         self.top = self.db.getTopMateDrinkers()
73         totl = [c for (un, c) in self.top]
74         tot = sum(totl)
75         isuff = {1: "st", 2: "nd", 3: "rd", 4: "th", 5: "th"}
76         i = 1
77         for (un, c) in self.top[:5]:
78             self.msg += "{}{} is *{}* who drank `{:.2f}` liters".format(
79                 i, isuff[i],
80                 un,
81                 c
82             )
83             if i == 1:
84                 self.msg += self.getHeroComment()
85             self.msg += "\n"
86             i += 1
87         self.msg += "\n"
88         self.msg += "Oh, and together we drank *{:.2f}* liters {}".format(
89             tot,
90             self.getSomeSmile()
91         )
92         return