From e30cf0345f0e2983b1c9324285dafd4724c0583f Mon Sep 17 00:00:00 2001 From: Dmitrii Morozov Date: Fri, 21 Jun 2024 21:56:40 +0200 Subject: Fixed stats calculation --- formatter/__init__.py | 2 -- persistence/__init__.py | 16 ++++++++-------- telegram_bot/commands.py | 6 +++--- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/formatter/__init__.py b/formatter/__init__.py index 71ea150..6fce639 100644 --- a/formatter/__init__.py +++ b/formatter/__init__.py @@ -59,7 +59,6 @@ def format_user_stats_difference(old_user_stats: typing.List[UserStats], new_use def __format_stats_difference(old_user_stats: UserStats, new_user_stats: UserStats): return formatting.format_text( formatting.mbold("User: ") + new_user_stats.user_display_name, - formatting.mbold("ID: ") + new_user_stats.user_id, formatting.mbold("Level: ") + "{}{}".format(str(new_user_stats.level), __format_stat_difference(old_user_stats.level, new_user_stats.level)), 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)), @@ -76,7 +75,6 @@ def __format_stat_difference(old_stat_value: int, new_stat_value: int): def __format_stats(user_stats: UserStats): return formatting.format_text( formatting.mbold("User: ") + user_stats.user_display_name, - formatting.mbold("ID: ") + user_stats.user_id, formatting.mbold("Level: ") + str(user_stats.level), formatting.mbold("Matches played: ") + str(user_stats.matches_played), formatting.mbold("Total kills: ") + str(user_stats.kills), diff --git a/persistence/__init__.py b/persistence/__init__.py index 663522e..1c6057c 100644 --- a/persistence/__init__.py +++ b/persistence/__init__.py @@ -1,6 +1,6 @@ import sqlite3, typing from app_types import * -from datetime import date +import datetime class UserRepository: @@ -58,17 +58,17 @@ class StatsRepository: def __initialize(self): cur = self.__get_connection().cursor() - cur.execute("CREATE TABLE IF NOT EXISTS stats(user_id TEXT, stats_date DATE, display_name TEXT, level INT, matches_played INT, kills INT, wins INT)") - cur.execute("CREATE UNIQUE INDEX IF NOT EXISTS user_id_date_idx ON stats(user_id, stats_date)") + 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 UNIQUE INDEX IF NOT EXISTS user_id_date_idx ON stats(user_id, stats_datetime)") - async def put_stats(self, user: User, stats_date: date = date.today()): + async def put_stats(self, user: User, stats_datetime: datetime.datetime = datetime.datetime.now()): stats: UserStats = await user.fetch_stats() connection = self.__get_connection() cur = connection.cursor() - query = "INSERT OR REPLACE INTO stats(user_id, stats_date, display_name, level, matches_played, kills, wins) VALUES('{user_id}', '{stats_date}', '{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) VALUES('{user_id}', '{stats_datetime}', '{display_name}', {level}, {matches_played}, {kills}, {wins})".format( user_id = user.id, - stats_date = stats_date, + stats_datetime = stats_datetime, display_name = user.display_name, level = stats.level, matches_played = stats.matches_played, @@ -77,10 +77,10 @@ class StatsRepository: cur.execute(query) connection.commit() - def get_stats(self, stats_date: date = date.today()) -> typing.List[UserStats]: + def get_stats(self, stats_datetime: datetime.datetime = datetime.datetime.now()) -> typing.List[UserStats]: connection = self.__get_connection() cur = connection.cursor() - query = "SELECT * FROM stats WHERE stats_date IN (SELECT MIN(stats_date) FROM stats WHERE stats_date >= '{stats_date}')".format(stats_date = stats_date) + query = "SELECT * FROM stats WHERE stats_datetime IN (SELECT MIN(stats_datetime) FROM stats WHERE stats_datetime >= '{stats_datetime}')".format(stats_datetime = stats_datetime) cur.execute(query) result = cur.fetchall() return [self.__map_from_db(stats) for stats in result] diff --git a/telegram_bot/commands.py b/telegram_bot/commands.py index a1a2888..108f550 100644 --- a/telegram_bot/commands.py +++ b/telegram_bot/commands.py @@ -1,5 +1,5 @@ import telebot -from datetime import date, datetime +import datetime from telegram_bot import * from formatter import * from persistence import * @@ -82,8 +82,8 @@ class GetStatsCallbackQueryHandler(CallbackQueryHandler): await self.__telegram_bot.reply(message, format_user_stats_list(stats)) async def reply_with_stats_days_difference(self, message, days: int, timeframe_alias: str): - stats_date = date.today() - datetime.timedelta(days) - persisted_stats = self.__stats_repository.get_stats(stats_date) + stats_datetime = datetime.datetime.now() - datetime.timedelta(days = days) + persisted_stats = self.__stats_repository.get_stats(stats_datetime) if len(persisted_stats) > 0: friends = await self.__fortnite_client.get_friends() current_stats = [await friend.fetch_stats() for friend in friends] -- cgit v1.2.3