From d7c6414e2645506994d2360e34a700aea0178468 Mon Sep 17 00:00:00 2001 From: Kellermann Date: Thu, 2 Jun 2022 11:28:16 +0200 Subject: [PATCH] Changed /me function and fixed bug in daily (could have more than one try when time ran out) --- source/bot.py | 75 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 26 deletions(-) diff --git a/source/bot.py b/source/bot.py index 43fa176..28781ac 100644 --- a/source/bot.py +++ b/source/bot.py @@ -197,25 +197,42 @@ def send_user_info(message): """ user_id = message.from_user.id user = session.query(User).filter(User.telegram_id==user_id).first() # get user from database, only one user per telegram id exists - scores = session.query(Score).filter(User.telegram_id==user_id).all() # get all scores of user - today_score = session.query(Score).filter(Score.date==dt.datetime.now(), Score.telegram_id==user_id).first() # get today's score object for user - today_guess = "not guessed today" + user_scores = session.query(Score).filter(Score.telegram_id==user_id).all() # get today's score object for user + + today_score = None + today_guess = None + + for score in user_scores: + if score.date.date() == dt.datetime.now().date(): # check if today's score is already in database + today_score = score.score + today_guess = score.guess + + if today_guess is None: + today_guess = "No guess today" + else: + today_guess = str(today_guess) + "€" + + if today_score is None: + today_score = "No score today" + + if today_score is not None and today_guess is not None: + all_time_score = sum(score.score for score in user_scores) + else: + all_time_score = "No score yet" - if today_score is not None: - today_guess = str(today_score.guess) # get guess of today's score object of user if user is not None: # if user is registered user_name = user.username - user_score = sum(score.score for score in scores) - user_guess = today_guess user_info = (f"Your user info:\n" f"User ID: {user_id}\n" f"Username: {user_name}\n" - f"Today's guess: {user_guess}\n" - f"Your Score: {user_score}\n") + f"Today's guess: {today_guess}\n" + f"Today's Score: {today_score}\n" + f"All time Score: {all_time_score}") + else: # if user is not registered # User not found - user_info = "User does not exist." + user_info = "User does not exist.\nDo /start to register" bot.reply_to(message, user_info) @@ -492,7 +509,17 @@ def change_name_setter(message): def time_in_range(start, end, current): - """Returns whether current is in the range [start, end]""" # docstring is missing!!!!! + """ Check if current time is in range of start and end + + Args: + start (datetime): start time + end (datetime): end time + current (datetime): current time + + Returns: + bool: True if current time is in range of start and end, False otherwise + + """ return start <= current <= end def find_todays_product_from_db(): @@ -596,6 +623,7 @@ def get_user_guess(message, start_time): """ end_time = time.time() user_id = int(message.from_user.id) + over_time = False #If user guesses to slow (> 20 seconds) try: user_guess = float(message.text.replace( ',', '.')) @@ -604,25 +632,23 @@ def get_user_guess(message, start_time): bot.register_next_step_handler(message, get_user_guess, start_time) return - if get_time_difference(start_time, end_time) > 20: bot.send_message(chat_id=user_id, text="You took too long to guess.\n" "No more tries today.") - return + over_time = True # user guesses to slow + product_for_today=find_todays_product_from_db() - if get_time_difference(start_time, end_time) > 20: - bot.send_message(chat_id=user_id, text="You took too long to guess.\n" - "No more tries today.") - return - - - message_text=f"You guessed {round(user_guess,2)}€" - bot.send_message(chat_id=user_id, text = message_text) + if not over_time: # when answer was in time + message_text=f"You guessed {round(user_guess,2)}€" + bot.send_message(chat_id=user_id, text = message_text) # calculate score for guess - product_for_today=find_todays_product_from_db() - user_score = scoring.eval_score(product_for_today.price, user_guess) + if not over_time: + user_score = scoring.eval_score(product_for_today.price, user_guess) + else: + user_score = 0 + user_guess = 0 score = Score ( telegram_id = user_id, @@ -635,9 +661,6 @@ def get_user_guess(message, start_time): session.commit() - - - @bot.message_handler(commands=['addproduct', 'Addproduct']) def add_product(message): """Add product to database