diff --git a/Cargo.lock b/Cargo.lock index b1ef1d2..dc0cfec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -173,6 +173,7 @@ version = "0.1.0" dependencies = [ "anyhow", "irc", + "serde", "serenity", "tokio", "toml", diff --git a/Cargo.toml b/Cargo.toml index f8ea640..bd28cc6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ edition = "2021" anyhow = "1.0.52" irc = "0.15" toml = "0.5" +serde = "1.0" [dependencies.tokio] version = "1.15.0" diff --git a/src/main.rs b/src/main.rs index b343847..4f1c565 100644 --- a/src/main.rs +++ b/src/main.rs @@ -20,7 +20,19 @@ use irc::{ proto::Command, }; -use toml::Value; +use serde::Deserialize; + +#[derive(Deserialize)] +struct DircordConfig { + token: String, + webhook: Option, + nickname: Option, + server: String, + port: Option, + channels: Vec, + mode: Option, + tls: Option, +} struct Handler; @@ -85,34 +97,25 @@ impl TypeMapKey for SenderKey { #[tokio::main] async fn main() -> anyhow::Result<()> { - let filename = env::args().nth(1).expect("No filename was provided!"); + let filename = env::args().nth(1).unwrap_or(String::from("config.toml")); let mut data = String::new(); File::open(filename)?.read_to_string(&mut data)?; - let value = data.parse::()?; + let conf: DircordConfig = toml::from_str(&data)?; - let token = value["token"] - .as_str() - .expect("No token provided!") - .to_string(); - let webhook = value - .get("webhook") - .map(|v| v.as_str().map(|s| s.to_string())) - .flatten(); - - let mut discord_client = DiscordClient::builder(&token) + let mut discord_client = DiscordClient::builder(&conf.token) .event_handler(Handler) .await?; let channel_id = ChannelId(831255708875751477); let config = Config { - nickname: Some("dircord".to_string()), - server: Some("192.168.1.28".to_owned()), - port: Some(6667), - channels: vec!["#no-normies".to_string()], - use_tls: Some(false), - umodes: Some("+B".to_string()), + nickname: conf.nickname, + server: Some(conf.server), + port: conf.port, + channels: conf.channels, + use_tls: conf.tls, + umodes: conf.mode, ..Config::default() }; @@ -134,7 +137,7 @@ async fn main() -> anyhow::Result<()> { data.insert::(irc_client.sender()); } - let webhook = parse_webhook_url(http.clone(), webhook) + let webhook = parse_webhook_url(http.clone(), conf.webhook) .await .expect("Invalid webhook URL");