import asyncio import logging from aiogram import Bot, Dispatcher from aiogram.client.default import DefaultBotProperties from aiogram.enums import ParseMode from config.settings import settings from bot.handlers import start, vocabulary, tasks, settings as settings_handler, words, import_text, practice, reminder, level_test from database.db import init_db from services.reminder_service import init_reminder_service async def main(): """Главная функция запуска бота""" # Настройка логирования logging.basicConfig( level=logging.INFO if settings.debug else logging.WARNING, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) # Инициализация бота и диспетчера bot = Bot( token=settings.bot_token, default=DefaultBotProperties(parse_mode=ParseMode.HTML) ) dp = Dispatcher() # Регистрация роутеров dp.include_router(start.router) dp.include_router(level_test.router) dp.include_router(vocabulary.router) dp.include_router(tasks.router) dp.include_router(settings_handler.router) dp.include_router(words.router) dp.include_router(import_text.router) dp.include_router(practice.router) dp.include_router(reminder.router) # Инициализация базы данных await init_db() # Инициализация и запуск сервиса напоминаний reminder_service = init_reminder_service(bot) reminder_service.start() # Запуск бота logging.info("Бот запущен") try: await dp.start_polling(bot) finally: # Остановка планировщика при завершении reminder_service.shutdown() if __name__ == '__main__': asyncio.run(main())