37 lines
964 B
Rust
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(())
|
|
}
|