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}"
)