-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvariableMappingsHandler.py
75 lines (54 loc) · 2.39 KB
/
variableMappingsHandler.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import re
from datetime import datetime
import helper
class VariableMappingHandler:
def __init__(self, twitchChatBot):
self.tcb = twitchChatBot
self.tcbDB = self.tcb.db
self.variableMappings = {
'${leaderboard}': self.getLeaderboard,
'${userCooldownDiff}': self.getUserCooldownDiff,
'${points}': self.getPoints,
'${userName}': getUserName
}
def getMapping(self, inputStr: str, cmd: dict, args: tuple):
rePattern = '\$\{.*?\}'
patternMatchesSet = set()
for patternMatch in re.findall(rePattern, inputStr):
patternMatchesSet.add(patternMatch)
if len(patternMatchesSet) > 0:
for patternMatch in patternMatchesSet:
inputStr = inputStr.replace(patternMatch, self.variableMappings[patternMatch](cmd, args))
return inputStr
def getLeaderboard(self, cmd: dict, args: tuple) -> str:
try:
defaultAmount = int(args[1])
except IndexError or ValueError:
defaultAmount = 5
query = f'SELECT * FROM twitch.users ORDER BY currency LIMIT {defaultAmount}'
cur = self.tcbDB.execute(query)
ret = cur.fetchall()
leaderboardRank = 1
leaderboardText = ''
for (user_id, username, currency, rank_id, hours, first_join, last_join) in ret:
leaderboardText += f'#{leaderboardRank} - [{helper.ranks[rank_id]}] {username} with {currency} ' \
f'points and {hours} active hours\n'
leaderboardRank += 1
return leaderboardText
def getUserCooldownDiff(self, cmd: dict, args: tuple) -> str:
commandId = cmd['Command ID']
userId = args[0].author.id
query = f"SELECT call_time FROM twitch.called_commands WHERE command_id = {commandId} " \
f"AND user_id = {userId} ORDER BY call_time DESC"
cur = self.tcbDB.execute(query)
ret = cur.fetchall()
diff = datetime.now().timestamp() - ret[0][0].timestamp()
return f'{diff: 0.1f}'
def getPoints(self, cmd: dict, args: tuple) -> str:
userId = args[0].author.id
query = f"SELECT currency FROM twitch.users WHERE user_id = {userId}"
cur = self.tcbDB.execute(query)
ret = cur.fetchall()
return str(int(ret[0][0]))
def getUserName(cmd: dict, args: tuple):
return args[0].author.name