use color_eyre::Result; use tracing::info; use tracing_subscriber::EnvFilter; use phoebe::service::Service; #[tokio::main] async fn main() -> Result<()> { color_eyre::install()?; tracing_subscriber::fmt() .with_target(true) .with_env_filter(EnvFilter::from_default_env()) .init(); let (tx, _) = tokio::sync::broadcast::channel(512); let db = phoebe::open_core_db().await?; let services: Vec> = vec![Box::new( phoebe_discord::setup(db.clone(), tx.clone()).await?, )]; let handles = services.into_iter().map(|mut srv| { let mut rx = tx.subscribe(); tokio::spawn(async move { info!("Handling events for {}…", srv.get_service_tag()); while let Ok(event) = rx.recv().await { srv.handle_chat_event(&event).await; } }) }); let _ = futures::future::join_all(handles).await; Ok(()) }