diff --git a/README.md b/README.md index effa214..3896fdb 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,10 @@ ### Variables - `ARCADE_SHOP_URL` - Shop URL to fetch - `NTFY_URL` - URL for ntfy +- `SLACK_GROUP_ID` - ID of the Slack group to ping ## Tech Stack - **Cloudflare Workers** for running the monitor on the edge. - **Rust** for the monitor's code. I love its type safety, as well as libraries such as `serde`. _Fun fact: the monitor was originally written in TypeScript, but it turned out to be so buggy I just rewrote it in Rust. The new version took less time to write, has tests (unlike the TypeScript version), and has better formatted messages._ - ---- diff --git a/src/format.rs b/src/format.rs index 869fe59..776f734 100644 --- a/src/format.rs +++ b/src/format.rs @@ -104,7 +104,7 @@ pub fn format_deleted_item(item: &ShopItem) -> String { } } -pub fn get_slack_body(diffs: &Vec) -> serde_json::Value { +pub fn get_slack_body(diffs: &Vec, slack_group_id: String) -> serde_json::Value { let mut blocks_vec = vec![]; blocks_vec.push(json!({ "type": "header", @@ -131,7 +131,10 @@ pub fn get_slack_body(diffs: &Vec) -> serde_json::Value { "elements": [ { "type": "mrkdwn", - "text": format!("Arcade Monitor v{}", env!("CARGO_PKG_VERSION").to_string()) // Will never panic, variable is always set by Cargo + "text": format!( + " Arcade Monitor v{version}", + version = env!("CARGO_PKG_VERSION").to_string() + ) // Will never panic, variable is always set by Cargo } ] })); @@ -147,9 +150,14 @@ mod slack_tests { use pretty_assertions::assert_eq; use serde_json::json; + const SLACK_GROUP_ID: &str = "ABCDEFG"; + #[test] fn slack_body_is_correct() { - let body = get_slack_body(&vec!["Test 1".into(), "Test 2".into(), "Test 3".into()]); + let body = get_slack_body( + &vec!["Test 1".into(), "Test 2".into(), "Test 3".into()], + SLACK_GROUP_ID.into(), + ); assert_eq!( body, json!({ @@ -197,7 +205,7 @@ mod slack_tests { "elements": [ { "type": "mrkdwn", - "text": format!("Arcade Monitor v{}", env!("CARGO_PKG_VERSION")) + "text": format!(" Arcade Monitor v{}", env!("CARGO_PKG_VERSION")) } ] } diff --git a/src/lib.rs b/src/lib.rs index cde6217..800a7e3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -36,6 +36,8 @@ async fn run_scrape(env: Env) -> Result { let slack_webhook_url = env.secret("SLACK_WEBHOOK_URL")?.to_string(); let ntfy_url = env.var("NTFY_URL")?.to_string(); let ntfy_auth_token = env.secret("NTFY_AUTH_TOKEN")?.to_string(); + let slack_group_id = env.var("SLACK_GROUP_ID")?.to_string(); + let client = Client::new(); let kv = env.kv("SHOP_ITEMS")?; @@ -60,7 +62,7 @@ async fn run_scrape(env: Env) -> Result { let changes = result.join("\n\n"); // slack webhook - let slack_body = format::get_slack_body(&result); + let slack_body = format::get_slack_body(&result, slack_group_id); client .post(&slack_webhook_url) .body(slack_body.to_string())