initial commit
This commit is contained in:
63
main.py
Normal file
63
main.py
Normal 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}")
|
||||
|
||||
Reference in New Issue
Block a user