MeshDD-Bot/main.py
ppfeiffer a6c09b19eb refactor: Replace env-based config and version.py with config.yaml
Move all configuration to config.yaml with live-reload (file watcher).
Version is now managed in config.yaml instead of version.py.
Remove pre-commit hook for automatic version bumping.
Pin meshtastic dependency to >=2.7.7.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 13:11:09 +01:00

66 lines
1.6 KiB
Python

import asyncio
import logging
import signal
import threading
from meshbot import config
from meshbot.database import Database
from meshbot.bot import MeshBot
from meshbot.webserver import WebServer, WebSocketManager
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
)
logger = logging.getLogger(__name__)
async def main():
logger.info("Starting %s v%s", config.get("bot.name"), config.get("version"))
# Database
db = Database(config.get("database.path", "meshdd.db"))
await db.connect()
# WebSocket Manager
ws_manager = WebSocketManager()
# Bot
loop = asyncio.get_event_loop()
bot = MeshBot(db, loop)
bot.ws_manager = ws_manager
# Webserver
webserver = WebServer(db, ws_manager)
runner = await webserver.start(config.get("web.host", "0.0.0.0"), config.get("web.port", 8080))
# Connect Meshtastic in a thread (blocking call)
connect_thread = threading.Thread(target=bot.connect, daemon=True)
connect_thread.start()
# Watch config for changes
asyncio.create_task(config.watch())
# Wait for shutdown
stop_event = asyncio.Event()
def _signal_handler():
logger.info("Shutdown signal received")
stop_event.set()
for sig in (signal.SIGINT, signal.SIGTERM):
loop.add_signal_handler(sig, _signal_handler)
try:
await stop_event.wait()
finally:
logger.info("Shutting down...")
bot.disconnect()
await runner.cleanup()
await db.close()
logger.info("Shutdown complete")
if __name__ == "__main__":
asyncio.run(main())