Add bot disable flow

This commit is contained in:
Jack Kingsman
2026-03-03 15:57:37 -08:00
parent e8538c55ea
commit eb78285b8f
13 changed files with 1226 additions and 66 deletions
+5
View File
@@ -19,6 +19,8 @@ from typing import Any
from fastapi import HTTPException
from app.config import settings as server_settings
logger = logging.getLogger(__name__)
# Limit concurrent bot executions to prevent resource exhaustion
@@ -288,6 +290,9 @@ async def run_bot_for_message(
path: Hex-encoded routing path
is_outgoing: Whether this is our own outgoing message
"""
if server_settings.disable_bots:
return
# Early check if any bots are enabled (will re-check after sleep)
from app.repository import AppSettingsRepository
+1
View File
@@ -16,6 +16,7 @@ class Settings(BaseSettings):
ble_pin: str = ""
log_level: Literal["DEBUG", "INFO", "WARNING", "ERROR"] = "INFO"
database_path: str = "data/meshcore.db"
disable_bots: bool = False
@model_validator(mode="after")
def validate_transport_exclusivity(self) -> "Settings":
+2
View File
@@ -18,6 +18,7 @@ class HealthResponse(BaseModel):
oldest_undecrypted_timestamp: int | None
mqtt_status: str | None = None
community_mqtt_status: str | None = None
bots_disabled: bool = False
async def build_health_data(radio_connected: bool, connection_info: str | None) -> dict:
@@ -67,6 +68,7 @@ async def build_health_data(radio_connected: bool, connection_info: str | None)
"oldest_undecrypted_timestamp": oldest_ts,
"mqtt_status": mqtt_status,
"community_mqtt_status": community_mqtt_status,
"bots_disabled": settings.disable_bots,
}
+5
View File
@@ -6,6 +6,7 @@ from typing import Literal
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel, Field
from app.config import settings as server_settings
from app.models import AppSettings, BotConfig
from app.repository import AppSettingsRepository
@@ -181,6 +182,10 @@ async def update_settings(update: AppSettingsUpdate) -> AppSettings:
kwargs["advert_interval"] = interval
if update.bots is not None:
if server_settings.disable_bots:
raise HTTPException(
status_code=403, detail="Bot system disabled by server configuration"
)
validate_all_bots(update.bots)
logger.info("Updating bots (count=%d)", len(update.bots))
kwargs["bots"] = update.bots