75 lines
2.0 KiB
Rust
75 lines
2.0 KiB
Rust
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<u32, TitleParseError> {
|
|
if !name.starts_with("WSDC/") {
|
|
return Err(TitleParseError::NoPrefix);
|
|
}
|
|
match name.trim_start_matches("WSDC/").parse::<u32>() {
|
|
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<SystemTime> {
|
|
// 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::<u64>());
|
|
// }
|
|
|
|
#[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
|
|
}
|