use mwbot::{ Bot, Page, generators::{Generator, querypage::QueryPage, search::Search}, }; pub async fn wanted_ids(bot: Bot) -> Vec<(u32, Page)> { let mut gene = QueryPage::new("Wantedpages").generate(&bot); let mut result = vec![]; while let Some(x) = gene.recv().await { let p = match x { Ok(p) => p, Err(e) => { tracing::error!("Could not get search result: {e}"); continue; } }; if let Ok(n) = parse_wsdc_page_name(p.title()) { result.push((n, p)); } } result } #[derive(thiserror::Error, Debug)] enum TitleParseError { #[error("Does not contain the correct prefix")] NoPrefix, #[error("Possibly incorrect page")] Sketchy, } fn parse_wsdc_page_name(name: &str) -> Result { if !name.starts_with("WSDC/") { return Err(TitleParseError::NoPrefix); } match name.trim_start_matches("WSDC/").parse::() { Ok(n) => Ok(n), Err(e) => { tracing::error!("Page {name} does not fit: {e}"); Err(TitleParseError::Sketchy) } } } // fn get_wsdc_page_date(bot: &Bot, page: &Page) -> Option { // todo!(); // let prefix = "Updated-On: "; // page.filter_comments() // .iter() // .filter_map(|x| { // let c = x.text_contents(); // if c.starts_with(prefix) { Some(c) } else { None } // }) // .map(|x| x.trim_start_matches(prefix).parse::()); // } #[allow(dead_code)] pub async fn index_wsdc_ids(bot: &Bot) -> Vec<(u32, Page)> { let mut gene = Search::new("WSDC/").generate(bot); let mut result = vec![]; while let Some(x) = gene.recv().await { let p = match x { Ok(p) => p, Err(e) => { tracing::error!("Could not get search result: {e}"); continue; } }; if let Ok(n) = parse_wsdc_page_name(p.title()) { result.push((n, p)); } } result }