Files
2026-07-09 23:34:34 +03:00

96 lines
1.8 KiB
Python

import asyncio
import logging
from schedule import refresh_cache
from aiogram import Bot, Dispatcher
from aiogram.enums import ParseMode
from aiogram.client.default import DefaultBotProperties
from aiogram.fsm.storage.memory import MemoryStorage
from config import BOT_TOKEN
from api import api
from handlers.support import router as support_router
from handlers.start import router as start_router
from handlers.group import router as group_router
from handlers.admin import router as admin_router
from logger import logger
from database import (
init_db,
clear_old_cache
)
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s | %(levelname)s | %(name)s | %(message)s"
)
bot = Bot(
token=BOT_TOKEN,
default=DefaultBotProperties(
parse_mode=ParseMode.HTML
)
)
dp = Dispatcher(
storage=MemoryStorage()
)
dp.include_router(start_router)
dp.include_router(group_router)
dp.include_router(support_router)
dp.include_router(admin_router)
#стартует бот
async def on_startup():
await init_db()
deleted = await clear_old_cache()
logger.info("База данных инициализирована")
logger.info(
f"Удалено {deleted} записей кэша"
)
asyncio.create_task(
refresh_cache()
)
logger.info(
"Фоновое обновление кэша запущено"
)
async def on_shutdown():
await api.close()
await bot.session.close()
logger.info("Бот остановлен")
async def main():
await on_startup()
try:
logger.info("Бот запущен")
await dp.start_polling(bot)
finally:
await on_shutdown()
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
logger.info("Остановка...")