From e43a8d6ce4c40a7212bf90644f82da109717bdcb Mon Sep 17 00:00:00 2001 From: Fringg Date: Tue, 10 Feb 2026 23:11:48 +0300 Subject: [PATCH] fix: downgrade Telegram timeout errors to warning in monitoring service Add TelegramNetworkError handling before generic Exception catch in all notification methods to prevent timeout errors from generating error reports in chat. Timeouts are transient network issues, not bugs. --- app/services/monitoring_service.py | 56 +++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/app/services/monitoring_service.py b/app/services/monitoring_service.py index a7f2aa6b..4df729fa 100644 --- a/app/services/monitoring_service.py +++ b/app/services/monitoring_service.py @@ -5,7 +5,7 @@ from pathlib import Path from typing import Any from aiogram.enums import ChatMemberStatus -from aiogram.exceptions import TelegramBadRequest, TelegramForbiddenError +from aiogram.exceptions import TelegramBadRequest, TelegramForbiddenError, TelegramNetworkError from sqlalchemy import and_, or_, select from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.orm import selectinload @@ -1286,6 +1286,13 @@ class MonitoringService: exc, ) return False + except TelegramNetworkError as e: + logger.warning( + 'Таймаут отправки уведомления об истечении подписки пользователю %s: %s', + user.telegram_id, + e, + ) + return False except Exception as e: logger.error( 'Ошибка отправки уведомления об истечении подписки пользователю %s: %s', @@ -1335,6 +1342,13 @@ class MonitoringService: exc, ) return False + except TelegramNetworkError as e: + logger.warning( + 'Таймаут отправки уведомления об окончании тестовой подписки пользователю %s: %s', + user.telegram_id, + e, + ) + return False except Exception as e: logger.error( 'Ошибка отправки уведомления об окончании тестовой подписки пользователю %s: %s', @@ -1410,6 +1424,13 @@ class MonitoringService: exc, ) return False + except TelegramNetworkError as e: + logger.warning( + 'Таймаут отправки уведомления об отсутствии подключения пользователю %s: %s', + user.telegram_id, + e, + ) + return False except Exception as e: logger.error( 'Ошибка отправки уведомления об отсутствии подключения пользователю %s: %s', @@ -1473,6 +1494,13 @@ class MonitoringService: exc, ) return False + except TelegramNetworkError as error: + logger.warning( + 'Таймаут отправки уведомления об отписке от канала пользователю %s: %s', + user.telegram_id, + error, + ) + return False except Exception as error: logger.error( 'Ошибка отправки уведомления об отписке от канала пользователю %s: %s', @@ -1537,6 +1565,13 @@ class MonitoringService: exc, ) return False + except TelegramNetworkError as e: + logger.warning( + 'Таймаут отправки напоминания об истекшей подписке пользователю %s: %s', + user.telegram_id, + e, + ) + return False except Exception as e: logger.error( 'Ошибка отправки напоминания об истекшей подписке пользователю %s: %s', @@ -1629,6 +1664,13 @@ class MonitoringService: exc, ) return False + except TelegramNetworkError as e: + logger.warning( + 'Таймаут отправки скидочного уведомления пользователю %s: %s', + user.telegram_id, + e, + ) + return False except Exception as e: logger.error( 'Ошибка отправки скидочного уведомления пользователю %s: %s', @@ -1653,6 +1695,12 @@ class MonitoringService: user.telegram_id, exc, ) + except TelegramNetworkError as e: + logger.warning( + 'Таймаут отправки уведомления об автоплатеже пользователю %s: %s', + user.telegram_id, + e, + ) except Exception as e: logger.error( 'Ошибка отправки уведомления об автоплатеже пользователю %s: %s', @@ -1690,6 +1738,12 @@ class MonitoringService: user.telegram_id, exc, ) + except TelegramNetworkError as e: + logger.warning( + 'Таймаут отправки уведомления о неудачном автоплатеже пользователю %s: %s', + user.telegram_id, + e, + ) except Exception as e: logger.error( 'Ошибка отправки уведомления о неудачном автоплатеже пользователю %s: %s',