diff --git a/handlers/admin/sender/keyboard.py b/handlers/admin/sender/keyboard.py index 0a4991eb..97e92710 100644 --- a/handlers/admin/sender/keyboard.py +++ b/handlers/admin/sender/keyboard.py @@ -1,5 +1,5 @@ from aiogram.filters.callback_data import CallbackData -from aiogram.types import InlineKeyboardMarkup +from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder from ..panel.keyboard import build_admin_back_btn @@ -12,21 +12,35 @@ class AdminSenderCallback(CallbackData, prefix="admin_sender"): def build_sender_kb() -> InlineKeyboardMarkup: builder = InlineKeyboardBuilder() - builder.button(text="👥 Все пользователи", callback_data=AdminSenderCallback(type="all").pack()) - builder.button(text="✅ Пользователи с подпиской", callback_data=AdminSenderCallback(type="subscribed").pack()) - builder.button(text="❌ Пользователи без подписки", callback_data=AdminSenderCallback(type="unsubscribed").pack()) - builder.button(text="📢 Пользователи кластера", callback_data=AdminSenderCallback(type="cluster-select").pack()) + + builder.row(InlineKeyboardButton(text="👥 Все пользователи", callback_data=AdminSenderCallback(type="all").pack())) + builder.row( + InlineKeyboardButton(text="✅ С подпиской", callback_data=AdminSenderCallback(type="subscribed").pack()), + InlineKeyboardButton( + text="❌ Без подписки", callback_data=AdminSenderCallback(type="unsubscribed").pack() + ), + ) + builder.row( + InlineKeyboardButton( + text="📍 Не использовавшие триал", callback_data=AdminSenderCallback(type="untrial").pack() + ) + ) + builder.row( + InlineKeyboardButton(text="📢 Кластер", callback_data=AdminSenderCallback(type="cluster-select").pack()) + ) builder.row(build_admin_back_btn()) - builder.adjust(1) + return builder.as_markup() def build_clusters_kb(clusters: list) -> InlineKeyboardMarkup: builder = InlineKeyboardBuilder() + for cluster in clusters: name = cluster["cluster_name"] builder.button(text=f"🌐 {name}", callback_data=AdminSenderCallback(type="cluster", data=name).pack()) + builder.adjust(2) builder.row(build_admin_back_btn()) - builder.adjust(1) + return builder.as_markup() diff --git a/handlers/admin/sender/sender_handler.py b/handlers/admin/sender/sender_handler.py index 200ae9cd..7891a46e 100644 --- a/handlers/admin/sender/sender_handler.py +++ b/handlers/admin/sender/sender_handler.py @@ -7,7 +7,7 @@ from aiogram.fsm.state import State, StatesGroup from aiogram.types import CallbackQuery, Message from filters.admin import IsAdminFilter -from keyboard import AdminSenderCallback, build_clusters_kb, build_sender_kb +from .keyboard import AdminSenderCallback, build_clusters_kb, build_sender_kb from logger import logger from ..panel.keyboard import AdminPanelCallback, build_admin_back_kb @@ -34,7 +34,7 @@ async def handle_sender(callback_query: CallbackQuery): IsAdminFilter(), ) async def handle_sender_callback_text( - callback_query: CallbackQuery, callback_data: AdminSenderCallback, state: FSMContext + callback_query: CallbackQuery, callback_data: AdminSenderCallback, state: FSMContext ): await callback_query.message.edit_text( text="✍️ Введите текст сообщения для рассылки:", @@ -96,6 +96,8 @@ async def handle_message_input(message: Message, state: FSMContext, session: Any """, int(datetime.utcnow().timestamp() * 1000), ) + elif send_to == "untrial": + tg_ids = await session.fetch("SELECT DISTINCT tg_id FROM connections WHERE trial = 0") elif send_to == "cluster": cluster_name = state_data.get("cluster_name") tg_ids = await session.fetch( @@ -114,10 +116,7 @@ async def handle_message_input(message: Message, state: FSMContext, session: Any total_users = len(tg_ids) success_count = 0 - text = ( - f"📤 Рассылка начата!\n\n" - f"👥 Всего пользователей: {total_users}\n" - ) + text = f"📤 Рассылка начата!\n👥 Количество получателей: {total_users}" await message.answer(text=text) @@ -137,7 +136,7 @@ async def handle_message_input(message: Message, state: FSMContext, session: Any text = ( f"📤 Рассылка завершена!\n\n" - f"👥 Всего пользователей: {total_users}\n" + f"👥 Количество получателей: {total_users}\n" f"✅ Доставлено: {success_count}\n" f"❌ Не доставлено: {total_users - success_count}" )