-
Notifications
You must be signed in to change notification settings - Fork 0
/
db_driver.py
83 lines (66 loc) · 3.23 KB
/
db_driver.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
76
77
78
79
80
81
82
83
import sqlite3
from decouple import config
def get_translations() -> list:
con = sqlite3.connect("glossary.db")
cur = con.cursor()
res = cur.execute("SELECT en, uk FROM v1")
return res.fetchall()
def add_pending_translation(id: int, chat_id: int, o: str, t: str) -> None:
con = sqlite3.connect("glossary.db")
cur = con.cursor()
res = cur.execute(f'INSERT INTO poll_v1 VALUES ({id}, {chat_id}, "{o}", "{t}", "", "")')
con.commit()
def check_pending_translation(poll_id: int) -> bool:
con = sqlite3.connect("glossary.db")
cur = con.cursor()
res = cur.execute(f"SELECT * FROM poll_v1 WHERE id={poll_id}")
return res.fetchone() is None
def get_pending_translation(poll_id: int) -> tuple:
con = sqlite3.connect("glossary.db")
cur = con.cursor()
res = cur.execute(f"SELECT * FROM poll_v1 WHERE id={poll_id}")
return res.fetchone()
def voice(poll_answer):
con = sqlite3.connect("glossary.db")
cur = con.cursor()
res = cur.execute(f"SELECT positive_votes, negative_votes FROM poll_v1 WHERE id={poll_answer.poll_id}")
row = res.fetchone()
votes = list(row)
new_votes = votes
if (str(poll_answer.user.id) in votes[0].split(',')):
if ((len(poll_answer.option_ids) == 1 and poll_answer.option_ids[0] != 0) or len(poll_answer.option_ids) == 0):
temp_votes = votes[0].split(',')
temp_votes = list(filter(None, temp_votes))
temp_votes.remove(str(poll_answer.user.id))
new_votes[0] = ','.join(map(str, list(dict.fromkeys(temp_votes))))
if (str(poll_answer.user.id) in votes[1].split(',')):
if ((len(poll_answer.option_ids) == 1 and poll_answer.option_ids[0] != 1) or len(poll_answer.option_ids) == 0):
temp_votes = votes[1].split(',')
temp_votes = list(filter(None, temp_votes))
temp_votes.remove(str(poll_answer.user.id))
new_votes[1] = ','.join(map(str, list(dict.fromkeys(temp_votes))))
if (str(poll_answer.user.id) not in new_votes[0].split(',') or str(poll_answer.user.id) not in new_votes[1].split(',')):
if (len(poll_answer.option_ids) == 1):
temp_votes = votes[poll_answer.option_ids[0]].split(',')
temp_votes = list(filter(None, temp_votes))
temp_votes.append(str(poll_answer.user.id))
new_votes[poll_answer.option_ids[0]] = ','.join(map(str, list(dict.fromkeys(temp_votes))))
cur.execute(f'UPDATE poll_v1 SET positive_votes = "{new_votes[0]}", negative_votes = "{new_votes[1]}" WHERE id={poll_answer.poll_id}')
con.commit()
second = cur.execute(f"SELECT positive_votes, negative_votes FROM poll_v1 WHERE id={poll_answer.poll_id}")
diff = second.fetchone()
if ((len(list(filter(None, diff[0].split(',')))) - len(list(filter(None, diff[1].split(','))))) > (int(config('VOICES_COUNT')) - 1)):
req = cur.execute(f"SELECT chat_id, original, translation FROM poll_v1 WHERE id={poll_answer.poll_id}")
translation = req.fetchone()
cur.execute(f'INSERT INTO v1 VALUES (NULL, "{translation[1]}", "{translation[2]}")')
con.commit()
cur.execute(f'DELETE FROM poll_v1 WHERE id={poll_answer.poll_id};')
con.commit()
return {
'id': translation[0],
'text': translation[1]
}
return {
'id': 0,
'text': ''
}