mwbot

Crates.iomwbot
lib.rsmwbot
version0.7.0
created_at2021-10-14 04:31:08.177567+00
updated_at2025-08-29 03:01:56.986042+00
descriptionA MediaWiki bot framework
homepagehttps://www.mediawiki.org/wiki/mwbot-rs
repositoryhttps://gitlab.wikimedia.org/repos/mwbot-rs/mwbot/
max_upload_size
id464785
size275,120
cratesio (github:mwbot-rs:cratesio)

documentation

README

mwbot

crates.io docs.rs docs (main) pipeline status coverage report

A MediaWiki bot and tool framework

mwbot aims to provide a batteries-included framework for building bots and tools for MediaWiki wikis. It builds on top of the mwapi and parsoid crates, which offer lower-level APIs.

Quickstart

Configuration

Create a ~/.config/mwbot.toml file with the following structure:

wiki_url = "https://en.wikipedia.org/w/"

If want to authenticate, add an auth section:

[auth]
username = "Example"
oauth2_token = "[...]"

See the OAuth documentation for how to get an OAuth 2 token. Using an owner-only consumer is the easiest way to do so.

On UNIX-like systems, for security, you must make sure the config's file permissions don't permit reading by other users, or authorization will fail with a [ReadableConfig][ConfigError::ReadableConfig] error. In this case, chmod 600 ~/.config/mwbot.toml can be used to correct the permissions and make sure the file is only readable and writeable to its owner.

#### Reading a page ```rust let bot = mwbot::Bot::from_default_config().await.unwrap(); let page = bot.page("Rust (programming language)")?; let html = page.html().await?.into_mutable(); // The lead section is the second p tag in the first section let lead = html.select("section > p")[1].text_contents(); assert!(lead.starts_with("Rust is a multi-paradigm, general-purpose programming language")); ``` Using [`Bot::from_default_config()`] will look in the current directory for `mwbot.toml` before looking in the user's config directory. A custom path can be specified by using `Bot::from_config(...)`.

Editing a page

let bot = mwbot::Bot::from_default_config().await.unwrap();
let page = bot.page("Project:Sandbox")?;
let wikitext = "This is a test edit!";
page.save(wikitext, &SaveOptions::summary("test edit!")).await?;

Page.save() accepts both HTML and wikitext and supports the {{nobots}} exclusion mechanism, among other features.

Next steps

Try using one of the offered page generators to fetch and operate on multiple pages.

Contributing

mwbot is the flagship crate of the mwbot-rs project. We're always looking for new contributors, please reach out if you're interested!

License

This crate is released under GPL-3.0-or-later. See COPYING for details.

Commit count: 0

cargo fmt