From 664cea447cd6a2d983a540a6720ed867ff660173 Mon Sep 17 00:00:00 2001 From: machka pasla Date: Sat, 11 Oct 2025 16:59:44 +0300 Subject: [PATCH] errors when broadcast fix --- bot/handlers/admin/broadcast.py | 8 +++++++- bot/utils/message_queue.py | 12 ++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/bot/handlers/admin/broadcast.py b/bot/handlers/admin/broadcast.py index d395eca..be425c9 100644 --- a/bot/handlers/admin/broadcast.py +++ b/bot/handlers/admin/broadcast.py @@ -337,8 +337,14 @@ async def confirm_broadcast_callback_handler( # Prepare queue stats presentation queue_stats = queue_manager.get_queue_stats() back_keyboard = get_back_to_admin_panel_keyboard(current_lang, i18n) + initial_user_failed = queue_stats.get("user_failed_messages", 0) + initial_group_failed = queue_stats.get("group_failed_messages", 0) def build_queue_status(stats: dict) -> str: + dynamic_failed = max( + 0, stats.get("user_failed_messages", 0) - initial_user_failed + ) + max(0, stats.get("group_failed_messages", 0) - initial_group_failed) + total_failed = failed_count + dynamic_failed return _( "broadcast_queue_result", default=( @@ -351,7 +357,7 @@ async def confirm_broadcast_callback_handler( "ℹ️ Сообщения будут отправлены автоматически с соблюдением лимитов Telegram." ), sent_count=sent_count, - failed_count=failed_count, + failed_count=total_failed, user_queue_size=stats["user_queue_size"], group_queue_size=stats["group_queue_size"], ) diff --git a/bot/utils/message_queue.py b/bot/utils/message_queue.py index 40e3c0b..0f9314c 100644 --- a/bot/utils/message_queue.py +++ b/bot/utils/message_queue.py @@ -26,6 +26,8 @@ class MessageQueue: self.last_send_times: deque[datetime] = deque() self.is_processing = False self.delay_between_messages = 1.0 / messages_per_second + self.total_sent = 0 + self.total_failed = 0 async def add_message(self, message: QueuedMessage) -> None: """Add message to queue""" @@ -50,6 +52,7 @@ class MessageQueue: try: await self._send_message(message) self.last_send_times.append(datetime.now()) + self.total_sent += 1 # Keep only recent send times (last minute) cutoff_time = datetime.now() - timedelta(seconds=60) @@ -57,6 +60,7 @@ class MessageQueue: self.last_send_times.popleft() except Exception as e: + self.total_failed += 1 logging.error(f"Failed to send queued message to {message.chat_id}: {e}") finally: @@ -233,7 +237,11 @@ class MessageQueueManager: "group_queue_processing": self.group_queue.is_processing, "user_queue_processing": self.user_queue.is_processing, "group_recent_sends": len(self.group_queue.last_send_times), - "user_recent_sends": len(self.user_queue.last_send_times) + "user_recent_sends": len(self.user_queue.last_send_times), + "group_failed_messages": self.group_queue.total_failed, + "user_failed_messages": self.user_queue.total_failed, + "group_sent_messages": self.group_queue.total_sent, + "user_sent_messages": self.user_queue.total_sent, } @@ -250,4 +258,4 @@ def init_queue_manager(bot: Bot) -> MessageQueueManager: def get_queue_manager() -> Optional[MessageQueueManager]: """Get global queue manager instance""" - return _queue_manager \ No newline at end of file + return _queue_manager