Files
dancing-teacher-info/src/wikiinfo.rs
2026-01-17 23:34:24 +01:00

72 lines
2.0 KiB
Rust

use mwbot::{
Bot, Page,
generators::{Generator, querypage::QueryPage, search::Search},
};
use crate::fetching::DynWsdcFetcher;
pub async fn wanted_ids(bot: Bot, _fetcher: DynWsdcFetcher) -> 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) => {
match e {
mwbot::Error::ApiError(a) if &a.code == "assertuserfailed" => {
tracing::error!("Bot is logged out: {a}");
panic!();
}
_ => {
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)
}
}
}
#[allow(dead_code)]
pub async fn index_wsdc_ids(bot: &Bot, _fetcher: DynWsdcFetcher) -> 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
}