#!/usr/bin/env python3 import logging import asyncio import sys import os from pathlib import Path # Добавляем путь к проекту BASE_DIR = Path(__file__).resolve().parent sys.path.insert(0, str(BASE_DIR)) from aiogram import Bot, Dispatcher from aiogram.enums import ParseMode from aiogram.fsm.storage.memory import MemoryStorage from config import BOT_TOKEN, ADMIN_USER_ID from database.db import init_db # Импортируем роутеры from handlers.voice import voice_router from handlers import ( admin_router, users_router, verification_router, chat_monitor_router, security_router, apartments_router, antimat_router, phones_router, polls_router, antispam_router, ratelimit_router, schedule_router, ads_router, payments_router, multicount_router, topics_router, toxicity_router, profile_history_router, achievements_router, thanks_router, events_router, initiative_group_router ) from handlers.mutual_aid import router as mutual_aid_router from services.scheduler import Scheduler # Настройка логирования logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('logs/bot.log', encoding='utf-8'), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) async def on_startup(bot: Bot): await init_db() scheduler = Scheduler(bot) scheduler.start() try: await bot.send_message(ADMIN_USER_ID, '✅ LKM37 CORE v4.3 АКТИВИРОВАН') except: pass async def main(): from bot_instance import get_bot bot = get_bot() dp = Dispatcher(storage=MemoryStorage()) # КРИТИЧЕСКИ ВАЖНО: voice_router должен быть САМЫМ ПЕРВЫМ dp.include_router(voice_router) # Регистрация остальных dp.include_router(admin_router) dp.include_router(users_router) other_routers = [ verification_router, chat_monitor_router, security_router, apartments_router, antimat_router, phones_router, polls_router, antispam_router, ratelimit_router, schedule_router, ads_router, payments_router, multicount_router, topics_router, toxicity_router, profile_history_router, achievements_router, thanks_router, events_router, initiative_group_router, mutual_aid_router ] for r in other_routers: dp.include_router(r) from handlers.smart_broadcast import router as smart_broadcast_router from handlers.digest import router as digest_router dp.include_router(smart_broadcast_router) dp.include_router(digest_router) dp.startup.register(on_startup) logger.info('🤖 Бот запускается...') await dp.start_polling(bot) if __name__ == '__main__': try: asyncio.run(main()) except KeyboardInterrupt: logger.info('🛑 Остановка пользователем.') except Exception as e: logger.error(f'Критическая ошибка: {e}', exc_info=True)