initial commit

This commit is contained in:
2025-12-25 15:25:46 +03:00
commit 58827ac124
20 changed files with 1854 additions and 0 deletions

63
main.py Normal file
View File

@@ -0,0 +1,63 @@
import asyncio
import logging
from aiogram import Bot, Dispatcher
from aiogram.fsm.storage.memory import MemoryStorage
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode
from config import BOT_TOKEN
from handlers import auth, books, favorites
from middlewares.auth import DatabaseMiddleware
# Настройка логирования
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
async def main():
"""Главная функция запуска бота"""
logger.info("Запуск бота...")
# Инициализация бота и диспетчера
bot = Bot(
token=BOT_TOKEN,
default=DefaultBotProperties(parse_mode=ParseMode.HTML)
)
dp = Dispatcher(storage=MemoryStorage())
# Регистрация middleware
# DatabaseMiddleware предоставляет сессию БД для всех хендлеров
dp.message.middleware(DatabaseMiddleware())
dp.callback_query.middleware(DatabaseMiddleware())
# Регистрация роутеров
# Порядок важен: auth должен быть первым, так как обрабатывает /start
dp.include_router(auth.router)
dp.include_router(books.router)
dp.include_router(favorites.router)
# Удаление вебхука и очистка pending updates
await bot.delete_webhook(drop_pending_updates=True)
logger.info("Бот успешно запущен и готов к работе!")
# Запуск polling
try:
await dp.start_polling(bot)
except Exception as e:
logger.error(f"Ошибка при работе бота: {e}")
finally:
await bot.session.close()
logger.info("Бот остановлен")
if __name__ == '__main__':
try:
asyncio.run(main())
except KeyboardInterrupt:
logger.info("Бот остановлен пользователем")
except Exception as e:
logger.error(f"Критическая ошибка: {e}")