phoebe/phoebe-main/src/main.rs

37 lines
964 B
Rust

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<Box<dyn Service + Send + Sync>> = 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(())
}