From da3af83b3a95cab3376156fb334b6af2e57f0841 Mon Sep 17 00:00:00 2001 From: DaShMore Date: Fri, 14 Nov 2025 14:28:18 +0300 Subject: [PATCH] mailig skip blocked users --- app/bot/dialogs/flows/mailing/handlers.py | 35 ++++++++++++++++------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/app/bot/dialogs/flows/mailing/handlers.py b/app/bot/dialogs/flows/mailing/handlers.py index 4606e12..3639ace 100644 --- a/app/bot/dialogs/flows/mailing/handlers.py +++ b/app/bot/dialogs/flows/mailing/handlers.py @@ -26,29 +26,44 @@ async def choose_recipients( await manager.next() + + async def confirm_mailing( callback: CallbackQuery, button: Button, manager: DialogManager, ): print(manager.dialog_data["recipients"]) + users = list(await get_users( manager.middleware_data["session"], exclude_admins=manager.dialog_data["recipients"] == "send_users", )) - await asyncio.gather( - *[ - callback.bot.copy_message( + message = manager.dialog_data["message"] + source_chat_id = message.chat.id + source_message_id = message.message_id + + success_count = 0 + + # Создаём задачу с обработкой ошибок для каждого пользователя + async def send_to_user(user): + nonlocal success_count + try: + await callback.bot.copy_message( chat_id=user.tg_id, - from_chat_id=manager.dialog_data["message"].chat.id, - message_id=manager.dialog_data["message"].message_id, + from_chat_id=source_chat_id, + message_id=source_message_id, ) - for user in users - ] - ) + success_count += 1 + except Exception: + pass + + + await asyncio.gather(*[send_to_user(user) for user in users]) + await callback.bot.send_message( chat_id=callback.from_user.id, - text=f"Разослано сообщений: {len(users)}", + text=f"Рассылка завершена.\nУспешно отправлено: {success_count} из {len(users)}", ) - await manager.done() + await manager.done() \ No newline at end of file