3 Commits

Author SHA1 Message Date
Lukas Wölfer
33180e95a3 Worked on fetching 2025-08-12 21:03:49 +02:00
Lukas Wölfer
f37ca5e627 Made watchdog less verbose 2025-08-01 16:21:31 +02:00
Lukas Wölfer
7ee8fb23d9 Added signature, official v0.1.0 2025-07-24 19:07:48 +02:00
6 changed files with 51 additions and 31 deletions

32
Cargo.lock generated
View File

@@ -274,22 +274,6 @@ dependencies = [
"syn 2.0.104",
]
[[package]]
name = "dancing-bot-teachers"
version = "0.1.0"
dependencies = [
"chrono",
"futures",
"mwbot",
"rand 0.9.2",
"reqwest",
"serde",
"thiserror 2.0.12",
"tokio",
"tracing",
"tracing-subscriber",
]
[[package]]
name = "darling"
version = "0.14.4"
@@ -2462,6 +2446,22 @@ dependencies = [
"libc",
]
[[package]]
name = "teachertracker-rs"
version = "0.1.2"
dependencies = [
"chrono",
"futures",
"mwbot",
"rand 0.9.2",
"reqwest",
"serde",
"thiserror 2.0.12",
"tokio",
"tracing",
"tracing-subscriber",
]
[[package]]
name = "tempfile"
version = "3.20.0"

View File

@@ -1,6 +1,6 @@
[package]
name = "dancing-bot-teachers"
version = "0.1.0"
name = "teachertracker-rs"
version = "0.1.2"
edition = "2024"
authors = ["Lukas Wölfer <coding@thasky.one>"]
description = "A MediaWiki bot that updates score information of teachers"

View File

@@ -17,7 +17,7 @@ use mwbot::{
Bot,
generators::{Generator, SortDirection, categories::CategoryMemberSort},
};
use std::{error::Error, path::Path};
use std::path::Path;
use crate::watchdog::watch_wanted;
@@ -41,12 +41,17 @@ fn list_teacher_pages(bot: &Bot) -> tokio::sync::mpsc::Receiver<Result<mwbot::Pa
pages.generate(bot)
}
#[must_use]
pub fn app_signature() -> String {
format!("{} [{}]", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION"))
}
fn main() {
tracing_subscriber::fmt()
.with_level(true)
.with_max_level(tracing::Level::INFO)
.init();
tracing::info!("Starting {}", app_signature());
let rt = match tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()

View File

@@ -12,7 +12,7 @@ pub async fn update_wsdc(bot: Bot) -> ! {
tracing::info!("We have to update {} pages", l.len());
let wait_duration = Duration::from_secs(6 * 3600);
for (index, page) in l {
tracing::info!("Next up: {index}");
tracing::info!("Next up: #{index}");
tokio::time::sleep(wait_duration).await;
if generate_page(index, page).await {
tracing::info!("Updated {index}");

View File

@@ -1,5 +1,6 @@
use std::time::Duration;
use crate::app_signature;
use crate::{wikiinfo::wanted_ids, wikipage::page_from_info, worldsdc::fetch_wsdc_info};
use mwbot::Bot;
use mwbot::SaveOptions;
@@ -10,11 +11,17 @@ pub async fn watch_wanted(bot: Bot) -> ! {
let _enter = span.enter();
let mut ignored_ids = vec![];
let mut watch_count = 0;
loop {
if ignored_ids.is_empty() {
tracing::info!("Watchdog check...");
watch_count += 1;
if watch_count >= 120 {
watch_count = 0;
let failed_id_info = if ignored_ids.is_empty() {
String::new()
} else {
tracing::info!("Watchdog check [{} failed ids]...", ignored_ids.len());
format!("[{} failed ids]", ignored_ids.len())
};
tracing::info!("Watchdog check{failed_id_info}...");
}
let wanted = wanted_ids(bot.clone()).await;
let mut new_ignored = vec![];
@@ -50,7 +57,10 @@ pub async fn generate_page(id: u32, page: mwbot::Page) -> bool {
match page
.save(
code,
&SaveOptions::summary("Created WSDC info from worldsdc.com")
&SaveOptions::summary(&format!(
"Created WSDC info from worldsdc.com -- {}",
app_signature()
))
.mark_as_bot(true)
.mark_as_minor(false),
)

View File

@@ -11,14 +11,17 @@ pub async fn fetch_wsdc_info(id: u32) -> Result<DanceInfo, DanceInfoError> {
.map_err(DanceInfoError::ClientBuild)?;
let mut params = HashMap::new();
params.insert("q", id.to_string());
let response = client
params.insert("num", id.to_string());
let request = client
.request(
reqwest::Method::POST,
"https://points.worldsdc.com/lookup2020/find",
)
.form(&params)
.send()
.build()
.map_err(DanceInfoError::RequestBuild)?;
let response = client
.execute(request)
.await
.map_err(DanceInfoError::Request)?;
@@ -30,6 +33,8 @@ pub async fn fetch_wsdc_info(id: u32) -> Result<DanceInfo, DanceInfoError> {
pub enum DanceInfoError {
#[error("Failed to build client: {0}")]
ClientBuild(reqwest::Error),
#[error("Failed to build request: {0}")]
RequestBuild(reqwest::Error),
#[error("Request error: {0}")]
Request(reqwest::Error),
#[error("Failed to parse response: {0}")]