Update stats, fix some text input flows to working with delete middleware
This commit is contained in:
@@ -168,7 +168,7 @@ async def handle_delete_coupon(
|
||||
if result:
|
||||
await show_coupon_list(callback_query, session)
|
||||
else:
|
||||
await callback_query.message.answer(
|
||||
await callback_query.message.edit_text(
|
||||
text=f"❌ Купон с кодом <b>{coupon_code}</b> не найден.",
|
||||
)
|
||||
await show_coupon_list(callback_query, session)
|
||||
|
||||
@@ -19,7 +19,7 @@ router = Router()
|
||||
)
|
||||
async def user_stats_menu(callback_query: CallbackQuery, session: Any):
|
||||
try:
|
||||
total_users = await session.fetchval("SELECT COUNT(*) FROM connections")
|
||||
total_users = await session.fetchval("SELECT COUNT(*) FROM users")
|
||||
total_keys = await session.fetchval("SELECT COUNT(*) FROM keys")
|
||||
total_referrals = await session.fetchval("SELECT COUNT(*) FROM referrals")
|
||||
|
||||
@@ -36,6 +36,20 @@ async def user_stats_menu(callback_query: CallbackQuery, session: Any):
|
||||
"SELECT COALESCE(SUM(amount), 0) FROM payments"
|
||||
)
|
||||
|
||||
registrations_today = await session.fetchval(
|
||||
"SELECT COUNT(*) FROM users WHERE created_at >= CURRENT_DATE"
|
||||
)
|
||||
registrations_week = await session.fetchval(
|
||||
"SELECT COUNT(*) FROM users WHERE created_at >= date_trunc('week', CURRENT_DATE)"
|
||||
)
|
||||
registrations_month = await session.fetchval(
|
||||
"SELECT COUNT(*) FROM users WHERE created_at >= date_trunc('month', CURRENT_DATE)"
|
||||
)
|
||||
|
||||
users_updated_today = await session.fetchval(
|
||||
"SELECT COUNT(*) FROM users WHERE updated_at >= CURRENT_DATE"
|
||||
)
|
||||
|
||||
active_keys = await session.fetchval(
|
||||
"SELECT COUNT(*) FROM keys WHERE expiry_time > $1",
|
||||
int(datetime.utcnow().timestamp() * 1000),
|
||||
@@ -45,8 +59,14 @@ async def user_stats_menu(callback_query: CallbackQuery, session: Any):
|
||||
stats_message = (
|
||||
f"📊 <b>Подробная статистика проекта:</b>\n\n"
|
||||
f"👥 Пользователи:\n"
|
||||
f" 🌐 Зарегистрировано: <b>{total_users}</b>\n"
|
||||
f" 🤝 Привлеченных рефералов: <b>{total_referrals}</b>\n\n"
|
||||
f" 📅 За день: <b>{registrations_today}</b>\n"
|
||||
f" 📆 За неделю: <b>{registrations_week}</b>\n"
|
||||
f" 📆 За месяц: <b>{registrations_month}</b>\n"
|
||||
f" 🌐 За все время: <b>{total_users}</b>\n\n"
|
||||
f"🌟 Активные пользователи:\n"
|
||||
f" 🌟 Активных сегодня: <b>{users_updated_today}</b>\n\n"
|
||||
f"👥 Рефералы:\n"
|
||||
f" 🤝 Всего привлечено: <b>{total_referrals}</b>\n\n"
|
||||
f"🔑 Ключи:\n"
|
||||
f" 🌈 Всего сгенерировано: <b>{total_keys}</b>\n"
|
||||
f" ✅ Действующих: <b>{active_keys}</b>\n"
|
||||
@@ -58,11 +78,9 @@ async def user_stats_menu(callback_query: CallbackQuery, session: Any):
|
||||
f" 🏦 За все время: <b>{total_payments_all_time} ₽</b>\n"
|
||||
)
|
||||
|
||||
kb = build_stats_kb()
|
||||
|
||||
await callback_query.message.edit_text(
|
||||
text=stats_message,
|
||||
reply_markup=kb
|
||||
reply_markup=build_stats_kb()
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"Error in user_stats_menu: {e}")
|
||||
|
||||
@@ -82,7 +82,7 @@ async def handle_user_data_input(
|
||||
kb = build_admin_back_kb()
|
||||
|
||||
if not message.text:
|
||||
await message.reply(
|
||||
await message.answer(
|
||||
text="🚫 Пожалуйста, отправьте текстовое сообщение.",
|
||||
reply_markup=kb
|
||||
)
|
||||
@@ -101,7 +101,7 @@ async def handle_user_data_input(
|
||||
)
|
||||
|
||||
if not user:
|
||||
await message.reply(
|
||||
await message.answer(
|
||||
text="🚫 Пользователь с указанным Username не найден!",
|
||||
reply_markup=kb,
|
||||
)
|
||||
@@ -124,7 +124,7 @@ async def handle_key_name_input(
|
||||
kb = build_admin_back_kb()
|
||||
|
||||
if not message.text:
|
||||
await message.reply(
|
||||
await message.answer(
|
||||
text="🚫 Пожалуйста, отправьте текстовое сообщение.",
|
||||
reply_markup=kb
|
||||
)
|
||||
@@ -134,7 +134,7 @@ async def handle_key_name_input(
|
||||
key_details = await get_key_details(key_name, session)
|
||||
|
||||
if not key_details:
|
||||
await message.edit_text(
|
||||
await message.answer(
|
||||
text="🚫 Пользователь с указанным именем ключа не найден.",
|
||||
reply_markup=kb
|
||||
)
|
||||
@@ -239,7 +239,7 @@ async def handle_new_balance_input(
|
||||
tg_id = user_data.get("tg_id")
|
||||
|
||||
if not message.text.isdigit() or int(message.text) < 0:
|
||||
await message.edit_text(
|
||||
await message.answer(
|
||||
text="❌ Пожалуйста, введите корректную сумму для изменения баланса.",
|
||||
reply_markup=build_editor_kb(tg_id),
|
||||
)
|
||||
@@ -253,8 +253,8 @@ async def handle_new_balance_input(
|
||||
tg_id,
|
||||
)
|
||||
|
||||
await message.edit_text(
|
||||
text=f"✅ Баланс успешно изменен на <b>{new_balance}</b>.",
|
||||
await message.answer(
|
||||
text=f"✅ Баланс успешно изменен на <b>{new_balance}</b>",
|
||||
reply_markup=build_admin_back_kb()
|
||||
)
|
||||
await state.clear()
|
||||
|
||||
+2
-21
@@ -18,13 +18,6 @@ pass_callbacks = [
|
||||
AdminUserEditorCallback,
|
||||
]
|
||||
|
||||
pass_states = [
|
||||
"UserEditorState",
|
||||
"AdminServersEditor",
|
||||
"AdminSender",
|
||||
"AdminCouponsState"
|
||||
]
|
||||
|
||||
|
||||
class DeleteMessageMiddleware(BaseMiddleware):
|
||||
async def __call__(
|
||||
@@ -35,9 +28,8 @@ class DeleteMessageMiddleware(BaseMiddleware):
|
||||
) -> Any:
|
||||
if isinstance(event, Message):
|
||||
if (
|
||||
not event.text or
|
||||
not event.text.startswith("/start") or
|
||||
not self._check_user_state(event)
|
||||
not event.text
|
||||
or not event.text.startswith("/start")
|
||||
):
|
||||
try:
|
||||
await event.bot.delete_message(
|
||||
@@ -55,17 +47,6 @@ class DeleteMessageMiddleware(BaseMiddleware):
|
||||
|
||||
return await handler(event, data)
|
||||
|
||||
@staticmethod
|
||||
async def _check_user_state(event: CallbackQuery) -> bool:
|
||||
from bot import dp
|
||||
context = dp.fsm.get_context(
|
||||
bot=event.bot,
|
||||
user_id=event.from_user.id,
|
||||
chat_id=event.chat.id
|
||||
)
|
||||
state = await context.get_state()
|
||||
return state.split(":")[0] in pass_states
|
||||
|
||||
@staticmethod
|
||||
async def _check_callbacks(event: CallbackQuery) -> bool:
|
||||
for callback in pass_callbacks:
|
||||
|
||||
Reference in New Issue
Block a user