From 990367ef6ef2caf967f72cd97b3bf2fe9f68cd5a Mon Sep 17 00:00:00 2001 From: Dmitrii Morozov Date: Wed, 31 Jul 2024 18:14:05 +0200 Subject: Added time played stats --- app_types/__init__.py | 3 +++ formatter/__init__.py | 20 ++++++++++++++++++++ persistence/__init__.py | 8 +++++--- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/app_types/__init__.py b/app_types/__init__.py index a4cf271..436dc59 100644 --- a/app_types/__init__.py +++ b/app_types/__init__.py @@ -18,6 +18,7 @@ class UserStats: matches_played: int kills: int wins: int + minutesplayed: int class User: @@ -52,11 +53,13 @@ class User: user_stats.matches_played = self.get_stats_value(combined_stats, 'matchesplayed') user_stats.kills = self.get_stats_value(combined_stats, 'kills') user_stats.wins = self.get_stats_value(combined_stats, 'wins') + user_stats.minutesplayed = self.get_stats_value(combined_stats, 'minutesplayed') except: user_stats.level = 0 user_stats.matches_played = 0 user_stats.kills = 0 user_stats.wins = 0 + user_stats.minutesplayed = 0 return user_stats def get_stats_value(self, combined_stats: dict, key: str): diff --git a/formatter/__init__.py b/formatter/__init__.py index 6fce639..a6e1905 100644 --- a/formatter/__init__.py +++ b/formatter/__init__.py @@ -63,6 +63,7 @@ def __format_stats_difference(old_user_stats: UserStats, new_user_stats: UserSta formatting.mbold("Matches played: ") + "{}{}".format(str(new_user_stats.matches_played), __format_stat_difference(old_user_stats.matches_played, new_user_stats.matches_played)), formatting.mbold("Total kills: ") + "{}{}".format(str(new_user_stats.kills), __format_stat_difference(old_user_stats.kills, new_user_stats.kills)), formatting.mbold("Wins: ") + "{}{}".format(str(new_user_stats.wins), __format_stat_difference(old_user_stats.wins, new_user_stats.wins)), + formatting.mbold("Time played: ") + "{}{}".format(__format_minutes(new_user_stats.minutesplayed), __format_minutes_difference(old_user_stats.minutesplayed, new_user_stats.minutesplayed)), separator='\n') def __format_stat_difference(old_stat_value: int, new_stat_value: int): @@ -72,6 +73,13 @@ def __format_stat_difference(old_stat_value: int, new_stat_value: int): else: return "" +def __format_minutes_difference(old_minutes: int, new_minutes: int): + if old_minutes != new_minutes: + difference = max(0, new_minutes - old_minutes) + return " \(\+ {}\)".format(__format_minutes(difference)) + else: + return "" + def __format_stats(user_stats: UserStats): return formatting.format_text( formatting.mbold("User: ") + user_stats.user_display_name, @@ -79,8 +87,20 @@ def __format_stats(user_stats: UserStats): formatting.mbold("Matches played: ") + str(user_stats.matches_played), formatting.mbold("Total kills: ") + str(user_stats.kills), formatting.mbold("Wins: ") + str(user_stats.wins), + formatting.mbold("Time played: ") + __format_minutes(user_stats.minutesplayed), separator='\n') +def __format_minutes(total_minutes: int): + hours = total_minutes // 60 + minutes = total_minutes % 60 + hours_postfix = 's' + minutes_postfix = 's' + if hours % 10 == 1: + hours_postfix = '' + if minutes % 10 == 1: + minutes_postfix = '' + return "{} hour{} {} minute{}".format(hours, hours_postfix, minutes, minutes_postfix) + def format_friend_online(display_name: str, party_size: int): if party_size == 1: text = 'is playing Fortnite\!' diff --git a/persistence/__init__.py b/persistence/__init__.py index be040eb..348ae59 100644 --- a/persistence/__init__.py +++ b/persistence/__init__.py @@ -58,7 +58,7 @@ class StatsRepository: def __initialize(self): cur = self.__get_connection().cursor() - cur.execute("CREATE TABLE IF NOT EXISTS stats(user_id TEXT, stats_datetime DATETIME, display_name TEXT, level INT, matches_played INT, kills INT, wins INT)") + cur.execute("CREATE TABLE IF NOT EXISTS stats(user_id TEXT, stats_datetime DATETIME, display_name TEXT, level INT, matches_played INT, kills INT, wins INT, minutes_played INT)") cur.execute("CREATE UNIQUE INDEX IF NOT EXISTS user_id_date_idx ON stats(user_id, stats_datetime)") async def put_stats(self, user: User, stats_datetime: datetime.datetime): @@ -66,14 +66,15 @@ class StatsRepository: connection = self.__get_connection() cur = connection.cursor() - query = "INSERT OR REPLACE INTO stats(user_id, stats_datetime, display_name, level, matches_played, kills, wins) VALUES('{user_id}', '{stats_datetime}', '{display_name}', {level}, {matches_played}, {kills}, {wins})".format( + query = "INSERT OR REPLACE INTO stats(user_id, stats_datetime, display_name, level, matches_played, kills, wins, minutes_played) VALUES('{user_id}', '{stats_datetime}', '{display_name}', {level}, {matches_played}, {kills}, {wins}, {minutes_played})".format( user_id = user.id, stats_datetime = stats_datetime, display_name = user.display_name, level = stats.level, matches_played = stats.matches_played, kills = stats.kills, - wins = stats.wins) + wins = stats.wins, + minutes_played = stats.minutesplayed) cur.execute(query) connection.commit() @@ -93,6 +94,7 @@ class StatsRepository: user_stats.matches_played = int(record[4]) user_stats.kills = int(record[5]) user_stats.wins = int(record[6]) + user_stats.minutesplayed = int(record[7]) return user_stats class PresenceRepository: -- cgit v1.2.3