feature/chat-system #1

Merged
trevor merged 11 commits from feature/chat-system into master 2025-11-17 00:32:48 +00:00
38 changed files with 5887 additions and 1054 deletions
Showing only changes of commit 21de47fe4c - Show all commits

45
main.py
View File

@@ -128,46 +128,17 @@ async def back_to_main_handler(callback: CallbackQuery):
# === ЗАГЛУШКИ ДЛЯ ОСТАЛЬНЫХ CALLBACKS ===
@router.callback_query(F.data.in_([
"user_management", "account_management", "chat_management",
"settings", "stats", "create_lottery"
]))
async def feature_stubs(callback: CallbackQuery):
"""Заглушки для функций, которые пока не реализованы"""
feature_names = {
"user_management": "Управление пользователями",
"account_management": "Управление счетами",
"chat_management": "Управление чатом",
"settings": "Настройки",
"stats": "Статистика",
"create_lottery": "Создание розыгрыша"
}
feature = feature_names.get(callback.data, "Функция")
await callback.answer(f"🚧 {feature} в разработке", show_alert=True)
@router.callback_query(F.data == "start_registration")
async def registration_stub(callback: CallbackQuery):
"""Заглушка для регистрации"""
await callback.answer("🚧 Регистрация в разработке", show_alert=True)
# === ЗАГЛУШКИ НЕ НУЖНЫ - ВСЕ ФУНКЦИИ РЕАЛИЗОВАНЫ В РОУТЕРАХ ===
# Функции обрабатываются в:
# - admin_panel.py: создание розыгрышей, управление пользователями, счетами, чатом, статистика
# - registration_handlers.py: регистрация пользователей
# - admin_account_handlers.py: управление счетами
# - admin_chat_handlers.py: управление чатом
# - chat_handlers.py: пользовательский чат
# === FALLBACK HANDLERS ===
@router.callback_query()
async def unknown_callback(callback: CallbackQuery):
"""Обработчик неизвестных callbacks"""
logger.warning(f"Unknown callback data: {callback.data}")
await callback.answer("❓ Неизвестная команда", show_alert=True)
@router.message()
async def unknown_message(message: Message):
"""Обработчик неизвестных сообщений"""
await message.answer(
"❓ Неизвестная команда. Используйте /start для начала работы."
)
# Обработка неизвестных callback и сообщений происходит в соответствующих роутерах
async def main():

View File

@@ -2875,10 +2875,58 @@ async def cleanup_inactive_users(callback: CallbackQuery):
await callback.answer("❌ Недостаточно прав", show_alert=True)
return
await callback.answer(
" Функция в разработке\n\nУдаление пользователей требует дополнительной логики для сохранения целостности данных.",
show_alert=True
)
from datetime import timedelta
# Удаляем только незарегистрированных пользователей, которые не были активны более 30 дней
cutoff_date = datetime.now() - timedelta(days=30)
async with async_session_maker() as session:
from sqlalchemy import select, delete, and_
# Находим неактивных незарегистрированных пользователей без участий и аккаунтов
result = await session.execute(
select(User)
.where(
and_(
User.is_registered == False,
User.created_at < cutoff_date
)
)
)
inactive_users = result.scalars().all()
# Проверяем, что у них нет связанных данных
deleted_count = 0
for user in inactive_users:
# Проверяем участия
participations = await session.execute(
select(Participation).where(Participation.user_id == user.id)
)
if participations.scalars().first():
continue
# Проверяем счета
accounts = await session.execute(
select(Account).where(Account.user_id == user.id)
)
if accounts.scalars().first():
continue
# Безопасно удаляем
await session.delete(user)
deleted_count += 1
await session.commit()
await callback.message.edit_text(
f"✅ Очистка завершена\n\n"
f"Удалено неактивных пользователей: {deleted_count}\n"
f"Критерий: незарегистрированные, неактивные более 30 дней, без данных",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="🧹 К очистке", callback_data="admin_cleanup")],
[InlineKeyboardButton(text="⚙️ К настройкам", callback_data="admin_settings")]
])
)
@admin_router.callback_query(F.data == "admin_cleanup_old_participations")