Files
new_lottery_bot/main_simple.py
Andrey K. Choi 4a741715f5
Some checks reported errors
continuous-integration/drone/push Build encountered an error
feat: Полный рефакторинг с модульной архитектурой
- Исправлены критические ошибки callback обработки
- Реализована модульная архитектура с применением SOLID принципов
- Добавлена система dependency injection
- Создана новая структура: interfaces, repositories, components, controllers
- Исправлены проблемы с базой данных (добавлены отсутствующие столбцы)
- Заменены заглушки на полную функциональность управления розыгрышами
- Добавлены отчеты о проделанной работе и документация

Архитектура готова для production и легко масштабируется
2025-11-17 05:34:08 +09:00

97 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
Минимальная рабочая версия main.py для лотерейного бота
"""
from aiogram import Bot, Dispatcher
from aiogram.types import BotCommand
from aiogram.fsm.storage.memory import MemoryStorage
import asyncio
import logging
import signal
import sys
from src.core.config import BOT_TOKEN, ADMIN_IDS
from src.core.database import async_session_maker, init_db
# Настройка логирования
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Инициализация бота
bot = Bot(token=BOT_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(storage=storage)
async def set_commands():
"""Установка команд бота"""
commands = [
BotCommand(command="start", description="🚀 Запустить бота"),
BotCommand(command="help", description="❓ Помощь"),
]
await bot.set_my_commands(commands)
async def main():
"""Главная функция"""
try:
logger.info("🔄 Инициализация базы данных...")
await init_db()
logger.info("🔄 Установка команд...")
await set_commands()
# Импортируем и подключаем роутеры
logger.info("🔄 Подключение роутеров...")
try:
from src.handlers.registration_handlers import router as registration_router
dp.include_router(registration_router)
logger.info("✅ Registration router подключен")
except Exception as e:
logger.error(f"❌ Ошибка подключения registration router: {e}")
try:
from src.handlers.admin_panel import admin_router
dp.include_router(admin_router)
logger.info("✅ Admin router подключен")
except Exception as e:
logger.error(f"❌ Ошибка подключения admin router: {e}")
try:
from src.handlers.account_handlers import account_router
dp.include_router(account_router)
logger.info("✅ Account router подключен")
except Exception as e:
logger.error(f"❌ Ошибка подключения account router: {e}")
# Обработка сигналов для graceful shutdown
def signal_handler():
logger.info("Получен сигнал завершения, остановка бота...")
# Настройка обработчиков сигналов
if sys.platform != "win32":
for sig in (signal.SIGTERM, signal.SIGINT):
asyncio.get_event_loop().add_signal_handler(sig, signal_handler)
# Получаем информацию о боте
bot_info = await bot.get_me()
logger.info(f"🚀 Бот запущен: @{bot_info.username} ({bot_info.first_name})")
# Запуск бота
await dp.start_polling(bot)
except Exception as e:
logger.error(f"Критическая ошибка: {e}")
import traceback
traceback.print_exc()
finally:
logger.info("Завершение работы")
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
logger.info("Бот остановлен пользователем")
except Exception as e:
logger.error(f"Критическая ошибка: {e}")
finally:
logger.info("Завершение работы")