Implement untrial type for sender

This commit is contained in:
hteppl
2025-03-26 01:59:52 +03:00
parent 11236ac64e
commit 372933e230
2 changed files with 27 additions and 14 deletions
+21 -7
View File
@@ -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()
+6 -7
View File
@@ -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"📤 <b>Рассылка начата!</b>\n\n"
f"👥 <b>Всего пользователей:</b> {total_users}\n"
)
text = f"📤 <b>Рассылка начата!</b>\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"📤 <b>Рассылка завершена!</b>\n\n"
f"👥 <b>Всего пользователей:</b> {total_users}\n"
f"👥 <b>Количество получателей:</b> {total_users}\n"
f"✅ <b>Доставлено:</b> {success_count}\n"
f"❌ <b>Не доставлено:</b> {total_users - success_count}"
)