refraction/src/handlers/event/analyze_logs/providers/paste_gg.rs
2024-04-26 20:53:13 -04:00

37 lines
1,013 B
Rust

use crate::api::{paste_gg, HttpClient};
use std::sync::OnceLock;
use eyre::{OptionExt, Result};
use log::trace;
use poise::serenity_prelude::Message;
use regex::Regex;
pub struct PasteGG;
impl super::LogProvider for PasteGG {
async fn find_match(&self, message: &Message) -> Option<String> {
static REGEX: OnceLock<Regex> = OnceLock::new();
let regex = REGEX.get_or_init(|| Regex::new(r"https://paste.gg/p/\w+/(\w+)").unwrap());
trace!("Checking if message {} is a paste.gg paste", message.id);
super::get_first_capture(regex, &message.content)
}
async fn fetch(&self, http: &HttpClient, content: &str) -> Result<String> {
let files = paste_gg::files_from(http, content).await?;
let result = files
.result
.ok_or_eyre("Got an empty result from paste.gg!")?;
let file_id = result
.iter()
.map(|f| f.id.as_str())
.nth(0)
.ok_or_eyre("Couldn't get file id from empty paste.gg response!")?;
let log = paste_gg::get_raw_file(http, content, file_id).await?;
Ok(log)
}
}