huskies: merge 566_story_gateway_ui_bot_configuration_page

This commit is contained in:
dave
2026-04-14 18:53:41 +00:00
parent 8936abd8cd
commit 52b21c22b1
3 changed files with 382 additions and 17 deletions
+9 -4
View File
@@ -58,6 +58,10 @@ use tokio::sync::{Mutex as TokioMutex, RwLock, broadcast, mpsc, watch};
/// announce the shutdown to all configured rooms before the process exits.
///
/// Must be called from within a Tokio runtime context (e.g., from `main`).
///
/// Returns an [`tokio::task::AbortHandle`] if the bot was actually spawned (Matrix/Discord
/// transports), or `None` if the config is absent, disabled, or uses a webhook-based
/// transport (Slack/WhatsApp) that does not require a persistent background task.
pub fn spawn_bot(
project_root: &Path,
watcher_tx: broadcast::Sender<WatcherEvent>,
@@ -66,12 +70,12 @@ pub fn spawn_bot(
shutdown_rx: watch::Receiver<Option<ShutdownReason>>,
gateway_active_project: Option<Arc<RwLock<String>>>,
gateway_projects: Vec<String>,
) {
) -> Option<tokio::task::AbortHandle> {
let config = match BotConfig::load(project_root) {
Some(c) => c,
None => {
crate::slog!("[matrix-bot] bot.toml absent or disabled; Matrix integration skipped");
return;
return None;
}
};
@@ -81,7 +85,7 @@ pub fn spawn_bot(
"[bot] transport={} — skipping Matrix bot; webhooks handle this transport",
config.transport
);
return;
return None;
}
crate::slog!(
@@ -93,7 +97,7 @@ pub fn spawn_bot(
let root = project_root.to_path_buf();
let watcher_rx = watcher_tx.subscribe();
let watcher_rx_auto = watcher_tx.subscribe();
tokio::spawn(async move {
let handle = tokio::spawn(async move {
if let Err(e) = bot::run_bot(
config,
root,
@@ -110,4 +114,5 @@ pub fn spawn_bot(
crate::slog!("[matrix-bot] Fatal error: {e}");
}
});
Some(handle.abort_handle())
}