mod bot; mod config; mod wol; use config::Config; use bot::WakeOnLanBot; use anyhow::{Context, Result}; use tracing::info; use matrix_sdk::{self, Client, SyncSettings}; use url::Url; async fn login_and_sync(config: Config) -> Result<()> { let homeserver_url = Url::parse(&config.hs_url).expect("Couldn't parse the homeserver URL"); let mut client = Client::new(homeserver_url).unwrap(); client .login( &config.username, &config.password, None, Some(&"command bot".to_string()), ) .await?; info!("logged in as {}", config.username); client.sync(SyncSettings::default()).await.unwrap(); client .add_event_emitter(Box::new(WakeOnLanBot::new(client.clone(), config.hosts))) .await; let settings = SyncSettings::default().token(client.sync_token().await.unwrap()); client.sync_forever(settings, |_| async {}).await; Ok(()) } #[tokio::main] async fn main() -> Result<()> { let matches = config::setup_clap(); config::setup_logging(matches.occurrences_of("v")); let config = config::read_config(matches.value_of("config").unwrap()).context("Couldn't load config")?; login_and_sync(config).await?; Ok(()) }