Files
Home_assistant/telegram-bot/bot/main.py
T
2026-06-13 20:20:56 +00:00

55 lines
1.4 KiB
Python

from __future__ import annotations
import asyncio
import logging
from aiogram import Bot, Dispatcher
from bot.config import load_settings
from bot.handlers import router as root_router
from bot.middleware import InjectMiddleware
from bot.notify_worker import run_notify_worker
from bot.storage import Storage
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(levelname)s %(name)s: %(message)s",
)
logger = logging.getLogger(__name__)
async def main() -> None:
settings = load_settings()
storage = Storage(str(settings.db_path))
await storage.connect()
bot = Bot(token=settings.telegram_bot_token)
dp = Dispatcher()
dp.update.middleware(InjectMiddleware(settings, storage))
dp.include_router(root_router)
worker_task = asyncio.create_task(
run_notify_worker(
bot,
storage,
settings.ha_api_base_url,
settings.poll_interval_sec,
)
)
logger.info("Bot started, HA API: %s", settings.ha_api_base_url)
try:
await dp.start_polling(bot)
finally:
worker_task.cancel()
try:
await worker_task
except asyncio.CancelledError:
pass
await storage.close()
await bot.session.close()
if __name__ == "__main__":
asyncio.run(main())