diff --git a/LichessClientTG_bot/bot.py b/LichessClientTG_bot/bot.py index 8b5870d..7119894 100644 --- a/LichessClientTG_bot/bot.py +++ b/LichessClientTG_bot/bot.py @@ -1153,8 +1153,8 @@ class LichessBot: """Periodic check for gamer activity""" task_key = f"{gamer['id']}_{user_id}" - # Запоминаем время начала отслеживания - start_time = datetime.now() + # Запоминаем время начала отслеживания (текущее время минус период, чтобы сразу проверить последний период) + start_time = datetime.now() - timedelta(minutes=period_minutes) self.period_start_times[task_key] = start_time logger.info(f"Started periodic monitoring for {gamer['username']} with {period_minutes} minute intervals") @@ -1190,15 +1190,17 @@ class LichessBot: # Ждем заданное количество минут await asyncio.sleep(period_minutes * 60) - # Получаем время начала периода + # Получаем время начала периода (время последней проверки или время старта задачи) period_start = self.period_start_times.get(task_key, start_time) now = datetime.now() - # Рассчитываем timestamps в миллисекундах - since_timestamp = int(period_start.timestamp() * 1000) + # Рассчитываем период: от (текущее время - период) до текущего времени + # Это гарантирует, что мы проверяем последний час активности + since_time = now - timedelta(minutes=period_minutes) + since_timestamp = int(since_time.timestamp() * 1000) until_timestamp = int(now.timestamp() * 1000) - logger.info(f"Checking period for {gamer['username']}: {period_start} to {now}") + logger.info(f"Checking period for {gamer['username']}: {since_time} to {now} (last {period_minutes} minutes)") logger.info(f"Unix timestamps: since={since_timestamp}, until={until_timestamp}") # Делаем запросы к API с обработкой ошибок @@ -1265,7 +1267,7 @@ class LichessBot: text=notification ) logger.info(f"✅ Sent periodic notification for {gamer['username']} to user {user_id}") - # Обновляем время начала только после успешной отправки уведомления + # Обновляем время начала на текущее время после успешной отправки уведомления self.period_start_times[task_key] = now # Increment periodic notification counter self.counters.increment('periodic_notification') @@ -1284,10 +1286,10 @@ class LichessBot: logger.error(f"Traceback: {traceback.format_exc()}") # Обновляем время начала даже при ошибке форматирования self.period_start_times[task_key] = now - else: - logger.debug(f"⏭️ No activity found for {gamer['username']} in the last {period_minutes} minutes") - # Обновляем время начала даже если нет активности, чтобы не зацикливаться - self.period_start_times[task_key] = now + else: + logger.debug(f"⏭️ No activity found for {gamer['username']} in the last {period_minutes} minutes") + # Обновляем время начала на текущее время даже если нет активности + self.period_start_times[task_key] = now except asyncio.CancelledError: logger.info(f"Periodic check cancelled for {gamer['username']}")