secubot 2.9.0

Yet another Discord bot!
use std::cell::LazyCell;

use regex::Regex;
use serenity::utils::MessageBuilder;
use url_encoded_data::UrlEncodedData;

mod trackers;

use self::trackers::TRACKERS;

pub fn clean_urls(content: &str) -> String {
    static RE: LazyCell<Regex> = LazyCell::new(|| Regex::new(r#"http[s]?://[\S]*"#).unwrap());

    let urls: Vec<_> = RE
        .find_iter(content)
        .map(|mat| mat.as_str().to_string())
        .collect();

    let clean_urls = urls
        .iter()
        .map(|u| {
            let mut url = UrlEncodedData::parse_str(u);
            let pairs = &url.as_string_pairs();
            for (k, _) in pairs.iter() {
                if TRACKERS.contains(k as &str) {
                    url.delete(k);
                }
            }
            let mut response = url.to_final_string();
            if url.is_empty() {
                response.pop();
            }
            response
        })
        .collect();

    format_message(clean_urls)
}

fn format_message(urls: Vec<String>) -> String {
    if !urls.is_empty() {
        let mut msg = MessageBuilder::new();
        msg.push_bold_line("Sanitized URLs");

        for url in urls {
            msg.push_line(format!(" - {}", url));
        }

        return msg.build();
    }
    String::from("")
}