45 lines
1.4 KiB
Rust
45 lines
1.4 KiB
Rust
|
use discord_webhook_rs::Webhook;
|
||
|
use regex::Regex;
|
||
|
use std::env;
|
||
|
use time::macros::format_description;
|
||
|
use time::{Date, OffsetDateTime};
|
||
|
|
||
|
fn main() {
|
||
|
dotenvy::dotenv().expect("Need a .env file");
|
||
|
|
||
|
let doc_url = env::var("DOC_URL").expect("Missing DOC_URL in .env");
|
||
|
let webhook = env::var("WEBHOOK_URL").expect("Missing WEBHOOK_URL in .env");
|
||
|
|
||
|
let body = reqwest::blocking::get(doc_url + "/export?gid=0&format=txt")
|
||
|
.unwrap()
|
||
|
.text()
|
||
|
.expect("Google doc download failed!");
|
||
|
|
||
|
let announcement_matcher = Regex::new(r"(\w+day,? \w+ \d+) *((?:.|\n)+?)\n\w+day").unwrap();
|
||
|
|
||
|
let last_announcement = announcement_matcher.captures_iter(&body).next().unwrap();
|
||
|
|
||
|
let date = last_announcement.get(1).unwrap().as_str().replace(",", "");
|
||
|
|
||
|
let announcements = last_announcement
|
||
|
.get(2)
|
||
|
.unwrap()
|
||
|
.as_str()
|
||
|
.trim()
|
||
|
.replace("\n\n", "\n");
|
||
|
|
||
|
let description = &format_description!("[weekday] [month repr:long] [day] [year]");
|
||
|
let parsed_date = Date::parse(&format!("{} 2025", date), description).unwrap();
|
||
|
println!("Date: {:}", parsed_date);
|
||
|
|
||
|
if OffsetDateTime::now_utc().date() != parsed_date {
|
||
|
println!("Last date is not today!");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
Webhook::new(webhook)
|
||
|
.content(&format!("## {}:\n{}", date, announcements))
|
||
|
.send()
|
||
|
.unwrap();
|
||
|
}
|