announcement-bot/src/main.rs

45 lines
1.4 KiB
Rust
Raw Normal View History

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();
}