Skip to content

Commit 541dadf

Browse files
committed
Merge pull request #50 from d-Rickyy-b/static_typing
Static typing
2 parents f8527bf + d99b046 commit 541dadf

File tree

8 files changed

+104
-67
lines changed

8 files changed

+104
-67
lines changed

database/db_wrapper.py

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# -*- coding: utf-8 -*-
22
import os
33
import sqlite3
4+
from time import time
45

56
__author__ = 'Rico'
67

@@ -23,7 +24,7 @@ def __init__(self):
2324
self.connection.text_factory = lambda x: str(x, 'utf-8', "ignore")
2425
self.cursor = self.connection.cursor()
2526

26-
def create_database(self, database_path):
27+
def create_database(self, database_path: str) -> None:
2728
# Create database file and add admin and users table to the database
2829
open(database_path, 'a').close()
2930

@@ -51,57 +52,64 @@ def create_database(self, database_path):
5152
connection.commit()
5253
connection.close()
5354

54-
def get_user(self, user_id):
55+
def get_user(self, user_id: int) -> tuple:
5556
self.cursor.execute("SELECT * FROM users WHERE userID=?;", [str(user_id)])
5657

5758
result = self.cursor.fetchone()
5859
if len(result) > 0:
5960
return result
6061
else:
61-
return []
62+
return ()
6263

63-
def get_played_games(self, user_id):
64+
def get_recent_players(self):
65+
oneDayInSecs = 60 * 60 * 24
66+
currentTime = int(time())
67+
self.cursor.execute("SELECT userID FROM users WHERE lastPlayed>=?;", [currentTime - oneDayInSecs])
68+
69+
return self.cursor.fetchall()
70+
71+
def get_played_games(self, user_id: int) -> int:
6472
self.cursor.execute("SELECT gamesPlayed FROM users WHERE userID=?;", [str(user_id)])
6573

6674
result = self.cursor.fetchone()
6775
if len(result) > 0:
68-
return result[0]
76+
return int(result[0])
6977
else:
7078
return 0
7179

72-
def get_all_users(self):
80+
def get_all_users(self) -> list:
7381
self.cursor.execute("SELECT rowid, * FROM users;")
7482
return self.cursor.fetchall()
7583

76-
def get_admins(self):
84+
def get_admins(self) -> list:
7785
self.cursor.execute("SELECT userID from admins;")
7886
admins = self.cursor.fetchall()
7987
admin_list = []
8088
for admin in admins:
8189
admin_list.append(admin[0])
8290
return admin_list
8391

84-
def get_lang_id(self, user_id):
92+
def get_lang_id(self, user_id: int) -> str:
8593
self.cursor.execute("SELECT languageID FROM users WHERE userID=?;", [str(user_id)])
8694
result = self.cursor.fetchone()
8795
if result:
8896
return result[0]
8997
else:
9098
return "en"
9199

92-
def add_user(self, user_id, lang_id, first_name, last_name, username):
100+
def add_user(self, user_id: int, lang_id: str, first_name: str, last_name: str, username: str) -> None:
93101
try:
94-
self.cursor.execute("INSERT INTO users VALUES (?, ?, ?, ?, ?, 0, 0, 0, 0);", (str(user_id), str(lang_id), str(first_name), str(last_name), str(username)))
102+
self.cursor.execute("INSERT INTO users VALUES (?, ?, ?, ?, ?, 0, 0, 0, 0);", (str(user_id), lang_id, first_name, last_name, username))
95103
self.connection.commit()
96104
except sqlite3.IntegrityError:
97105
pass
98106

99-
def insert(self, column_name, value, user_id):
100-
self.cursor.execute("UPDATE users SET " + str(column_name) + "= ? WHERE userID = ?;",
101-
[str(value), str(user_id)])
107+
def insert(self, column_name: str, value: str, user_id: int) -> None:
108+
self.cursor.execute("UPDATE users SET " + column_name + "= ? WHERE userID = ?;",
109+
[value, str(user_id)])
102110
self.connection.commit()
103111

104-
def is_user_saved(self, user_id):
112+
def is_user_saved(self, user_id: int) -> bool:
105113
self.cursor.execute("SELECT rowid, * FROM users WHERE userID=?;", [str(user_id)])
106114

107115
result = self.cursor.fetchall()
@@ -110,7 +118,7 @@ def is_user_saved(self, user_id):
110118
else:
111119
return False
112120

113-
def user_data_changed(self, user_id, first_name, last_name, username):
121+
def user_data_changed(self, user_id: int, first_name: str, last_name: str, username: str) -> bool:
114122
self.cursor.execute("SELECT * FROM users WHERE userID=?;", [str(user_id)])
115123

116124
result = self.cursor.fetchone()
@@ -123,15 +131,15 @@ def user_data_changed(self, user_id, first_name, last_name, username):
123131
else:
124132
return True
125133

126-
def update_user_data(self, user_id, first_name, last_name, username):
127-
self.cursor.execute("UPDATE users SET first_name=?, last_name=?, username=? WHERE userID=?;", (str(first_name), str(last_name), str(username), str(user_id)))
134+
def update_user_data(self, user_id: int, first_name: str, last_name: str, username: str) -> None:
135+
self.cursor.execute("UPDATE users SET first_name=?, last_name=?, username=? WHERE userID=?;", (first_name, last_name, username, str(user_id)))
128136
self.connection.commit()
129137

130-
def reset_stats(self, user_id):
138+
def reset_stats(self, user_id: int) -> None:
131139
self.cursor.execute("UPDATE users SET gamesPlayed='0', gamesWon='0', gamesTie='0', lastPlayed='0' WHERE userID=?;", [str(user_id)])
132140
self.connection.commit()
133141

134-
def close_conn(self):
142+
def close_conn(self) -> None:
135143
self.connection.close()
136144

137145
instance = None
@@ -141,7 +149,7 @@ def __init__(self):
141149
DBwrapper.instance = DBwrapper.__DBwrapper()
142150

143151
@staticmethod
144-
def get_instance():
152+
def get_instance() -> __DBwrapper:
145153
if not DBwrapper.instance:
146154
DBwrapper.instance = DBwrapper.__DBwrapper()
147155

database/statistics.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ def set_game_won(user_id):
1919

2020
def add_game_played(user_id):
2121
db = DBwrapper.get_instance()
22-
games_played = int(db.get_played_games(user_id))
22+
games_played = db.get_played_games(user_id)
2323
games_played = games_played + 1
2424
logger.debug("Add game played for userID: " + str(user_id))
2525
db.insert("gamesPlayed", str(games_played), user_id)
26-
db.insert("lastPlayed", int(time()), user_id)
26+
db.insert("lastPlayed", str(int(time())), user_id)
2727

2828

2929
def get_stats(percentage):

game/blackJack.py

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,8 @@ def add_player(self, user_id, first_name, message_id, silent=False):
2626
if not self.game_running:
2727
if self.get_index_by_user_id(user_id) is None and len(self.players) < self.MAX_PLAYERS:
2828
self.logger.debug("Adding user '" + first_name + "' to players.")
29-
player = Player(user_id, first_name, self.deck)
29+
player = Player(user_id, first_name, self.deck, join_id=message_id)
3030
self.players.append(player)
31-
self.join_message_ids.append(message_id)
3231

3332
if silent is False:
3433
# When the parameter 'silent' is not set, a message will be sent.
@@ -39,25 +38,26 @@ def add_player(self, user_id, first_name, message_id, silent=False):
3938

4039
def get_index_by_user_id(self, user_id):
4140
for index, user in enumerate(self.players):
42-
if user.get_userid() == user_id:
41+
if user.user_id == user_id:
4342
return index
4443

4544
return None
4645

4746
def get_user_by_user_id(self, user_id):
4847
for user in self.players:
49-
if user.get_userid() == user_id:
48+
if user.user_id == user_id:
5049
return user
5150
return None
5251

5352
def next_player(self):
5453
if self.game_running:
5554
if self.current_player is not None and self.current_player < (len(self.players) - 1):
55+
user = self.players[self.current_player]
5656
self.logger.debug("Next Player!")
5757
self.current_player += 1
5858
self.send_message(self.chat_id, translate("overview", self.lang_id) + "\n\n" + self.get_player_overview(show_points=True) + "\n" +
5959
translate("nextPlayer", self.lang_id).format(self.players[self.current_player].get_first_name()),
60-
message_id=self.join_message_ids[self.current_player], reply_markup=self.keyboard_running, game_id=self.__game_id)
60+
message_id=user.join_id, reply_markup=self.keyboard_running, game_id=self.__game_id)
6161

6262
self.give_player_one()
6363
else:
@@ -88,7 +88,7 @@ def give_player_one(self):
8888
else:
8989
self.send_message(self.chat_id, str(translate("yourCardsAre", self.lang_id).format(
9090
user.first_name, cards_string, str(user.cardvalue))), reply_markup=self.keyboard_running,
91-
message_id=self.join_message_ids[self.current_player], game_id=self.__game_id)
91+
message_id=user.join_id, game_id=self.__game_id)
9292
else:
9393
card = self.deck.pick_one_card()
9494
cardvalue = self.deck.get_card_value(card)
@@ -155,26 +155,26 @@ def dealers_turn(self):
155155
self.send_message(self.chat_id, output_text, parse_mode="Markdown", reply_markup=self.keyboard_running)
156156
self.evaluation()
157157

158-
def start_game(self, message_id=None):
158+
def start_game(self, message_id: int = None) -> None:
159159
if not self.game_running:
160160
if ((self.game_type == self.GROUP_CHAT or self.game_type == self.MULTIPLAYER_GAME) and len(self.players) > 1) or self.game_type == self.PRIVATE_CHAT:
161-
self.game_running = True
161+
self.game_running = True
162162

163-
for player in self.players:
164-
add_game_played(player.user_id)
163+
for player in self.players:
164+
add_game_played(player.user_id)
165165

166-
if self.game_type == self.GROUP_CHAT or self.game_type == self.MULTIPLAYER_GAME:
167-
self.send_message(self.chat_id, translate("gameBegins", self.lang_id) + "\n" + translate("gameBegins2", self.lang_id) + "\n\n" + self.get_player_overview(), game_id=self.__game_id)
166+
if self.game_type == self.GROUP_CHAT or self.game_type == self.MULTIPLAYER_GAME:
167+
self.send_message(self.chat_id, translate("gameBegins", self.lang_id) + "\n" + translate("gameBegins2", self.lang_id) + "\n\n" + self.get_player_overview(), game_id=self.__game_id)
168168

169-
self.dealers_turn()
170-
self.give_player_one()
169+
self.dealers_turn()
170+
self.give_player_one()
171171
else:
172172
self.send_message(self.chat_id, translate("notEnoughPlayers", self.lang_id), message_id=message_id, game_id=self.__game_id)
173173
else:
174-
#TODO Game already running
174+
# TODO Game already running
175175
pass
176176

177-
def evaluation(self):
177+
def evaluation(self) -> None:
178178
list_21 = []
179179
list_busted = []
180180
list_lower_21 = []
@@ -202,24 +202,24 @@ def evaluation(self):
202202

203203
if self.dealer.get_cardvalue() > 21:
204204
for user in list_21:
205-
set_game_won(user.get_userid())
205+
set_game_won(user.user_id)
206206
for user in list_lower_21:
207-
set_game_won(user.get_userid())
207+
set_game_won(user.user_id)
208208
# Alle mit 21 > Punkte >= 0 haben Einsatz x 1,5 gewonnen.
209209
# Alle mit 21 haben Einsatz mal 2 gewonnen
210210
# Alle mit 21 und Kartenanzahl = 2 haben Einsatz mal 3 gewonnen
211211
elif self.dealer.get_cardvalue() == 21: # todo differentiate between blackjack and 21
212212
for user in list_21:
213213
if user.get_first_name() != translate("dealerName", self.lang_id):
214-
set_game_won(user.get_userid())
214+
set_game_won(user.user_id)
215215
# Alle mit 21 > Punkte >= 0 haben verloren . || Alle mit 21 haben Einsatz gewonnen || Alle mit 21 und Kartenanzahl = 2 haben Einsatz mal 2 gewonnen
216216
# todo if dealer got Blackjack: || Everyone with BlackJack won their bet back. || Everone else lost
217217
elif self.dealer.get_cardvalue() < 21:
218218
for user in list_21:
219-
set_game_won(user.get_userid())
219+
set_game_won(user.user_id)
220220
for user in list_lower_21:
221221
if user.get_cardvalue() > self.dealer.get_cardvalue():
222-
set_game_won(user.get_userid())
222+
set_game_won(user.user_id)
223223
# print(str(user.get_userid()) + " you've got " + )
224224
# Alle mit Dealer > Punkte haben verloren.
225225
# Alle mit Dealer = Punkte erhalten Einsatz
@@ -243,7 +243,7 @@ def evaluation(self):
243243
self.send_message(self.chat_id, final_message, game_id=self.__game_id)
244244
self.game_handler.gl_remove(self.chat_id)
245245

246-
def get_player_overview(self, show_points=False, text="", i=0, dealer=False):
246+
def get_player_overview(self, show_points: bool = False, text: str = "", i=0, dealer: bool = False) -> str:
247247
if self.game_running:
248248
for user in self.players:
249249
if i == self.current_player:
@@ -297,14 +297,13 @@ def analyze_message(self, update):
297297
if user_id == self.players[0].user_id:
298298
self.game_handler.gl_remove(self.chat_id)
299299

300-
def get_game_id(self):
300+
def get_game_id(self) -> int:
301301
return self.__game_id
302302

303303
# When game is being initialized
304304
def __init__(self, chat_id, user_id, lang_id, first_name, game_handler, message_id, send_message, multiplayer=None, game_id=None):
305305
# declare variables and set initial values
306306
self.players = []
307-
self.join_message_ids = []
308307
self.chat_id = chat_id
309308
self.__game_id = game_id
310309
self.lang_id = lang_id

game/dealer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
class Dealer(Player):
77
credits = 0
88

9-
def __init__(self, first_name, deck):
9+
def __init__(self, first_name, deck, join_id=None):
1010
user_id = -1
11-
super(Dealer, self).__init__(user_id, first_name, deck)
11+
super(Dealer, self).__init__(user_id, first_name, deck, join_id)

game/deck.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,28 +9,27 @@ class CardDeck(object):
99
symbols = ["♥", "♦", "♣", "♠"]
1010
valueInt = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
1111

12-
@staticmethod
13-
def create_deck():
12+
def create_deck(self) -> list:
1413
from random import shuffle
1514
deck = list(range(1, 52))
1615
shuffle(deck)
1716
return deck[:]
1817

19-
def pick_one_card(self):
18+
def pick_one_card(self) -> int:
2019
card = self.deck[0]
2120
self.deck.pop(0)
2221
return card
2322

24-
def get_card_name(self, card):
23+
def get_card_name(self, card: int) -> str:
2524
symbol = self.symbols[card // 13]
2625
value = self.value_str[card % 13]
2726
card_name = "|" + symbol + " " + value + "|"
2827
return card_name
2928

30-
def get_card_value(self, card):
29+
def get_card_value(self, card: int) -> int:
3130
return self.valueInt[card % 13]
3231

33-
def __init__(self, lang_id):
32+
def __init__(self, lang_id: str) -> None:
3433
self.deck = self.create_deck()
3534
self.value_str = [translate("ace", lang_id), "2", "3", "4", "5", "6", "7", "8", "9", "10",
3635
translate("jack", lang_id), translate("queen", lang_id), translate("king", lang_id)]

game/player.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,21 @@ def get_first_name(self):
4747
def get_cardvalue(self):
4848
return self.cardvalue
4949

50-
def get_userid(self):
51-
return self.user_id
50+
@property
51+
def user_id(self):
52+
return self.__user_id
53+
54+
@property
55+
def join_id(self):
56+
return self.__join_id
5257

5358
def get_lang_id(self):
5459
return self.lang_id
5560

56-
def __init__(self, user_id, first_name, deck, lang_id="en"):
57-
self.user_id = user_id
61+
def __init__(self, user_id, first_name, deck, join_id, lang_id="en"):
62+
self.__user_id = user_id
5863
self.first_name = first_name
64+
self.__join_id = join_id
5965
self.lang_id = lang_id
6066
self.deck = deck
6167
self.number_of_cards = 0

lang/language.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414

1515
# translate returns the translation for a specific string
16-
def translate(string, language):
16+
def translate(string: str, language: str) -> str:
1717
if language in translations and string in translations[language]:
1818
return translations[language][string]
1919
elif language == "br":

0 commit comments

Comments
 (0)