Initial commit
This commit is contained in:
parent
229cc38238
commit
c5beab75d5
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/target
|
||||||
|
.env
|
2801
Cargo.lock
generated
Normal file
2801
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
12
Cargo.toml
Normal file
12
Cargo.toml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[package]
|
||||||
|
name = "kovachevbot"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
clap = { version = "4.5.37", features = ["derive", "env"] }
|
||||||
|
dotenvy = "0.15.7"
|
||||||
|
formatx = "0.2.4"
|
||||||
|
mwbot = "0.6.1"
|
||||||
|
shellexpand = "3.1.1"
|
||||||
|
tokio = { version = "1.44.2", features = ["macros", "rt-multi-thread"] }
|
8
mwbot.toml
Normal file
8
mwbot.toml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Copy this to `~/.config/mwbot.toml`.
|
||||||
|
api_url = "https://en.wiktionary.org/w/api.php"
|
||||||
|
rest_url = "https://en.wiktionary.org/api/rest_v1"
|
||||||
|
|
||||||
|
[auth]
|
||||||
|
username = "{}"
|
||||||
|
botpassword = "{}"
|
||||||
|
oauth2_token = "{}"
|
83
src/main.rs
Normal file
83
src/main.rs
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
use std::process::exit;
|
||||||
|
use std::env;
|
||||||
|
use formatx::formatx;
|
||||||
|
|
||||||
|
use clap::{Parser, Subcommand};
|
||||||
|
use mwbot::parsoid::WikiMultinode;
|
||||||
|
|
||||||
|
#[derive(Parser)]
|
||||||
|
#[command(version, about, long_about = None)]
|
||||||
|
struct Cli {
|
||||||
|
/// What action to perform
|
||||||
|
#[command(subcommand)]
|
||||||
|
action: Action,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Subcommand)]
|
||||||
|
enum Action {
|
||||||
|
/// Move config to ~/.config
|
||||||
|
Setup,
|
||||||
|
/// Run the bot
|
||||||
|
Run {
|
||||||
|
/// Specify the username of the bot
|
||||||
|
#[arg(long, env = "MW_USERNAME")]
|
||||||
|
username: String,
|
||||||
|
/// Specify the botpassword of the bot
|
||||||
|
#[arg(long, env = "MW_BOTPASSWORD")]
|
||||||
|
botpassword: String,
|
||||||
|
/// Specify the OAuth2 token of the bot
|
||||||
|
#[arg(long, env = "MW_OAUTH2")]
|
||||||
|
oauth2_token: String,
|
||||||
|
/// Specify the API URL of the bot
|
||||||
|
#[arg(long, env = "MW_API_URL")]
|
||||||
|
api_url: String,
|
||||||
|
/// Specify the REST URL of the bot
|
||||||
|
#[arg(long, env = "MW_REST_URL")]
|
||||||
|
rest_url: String,
|
||||||
|
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
fn setup() -> Result<(), &'static str> {
|
||||||
|
if let Ok(config_template) = std::fs::read_to_string("mwbot.toml") {
|
||||||
|
|
||||||
|
let username = env::var("MW_USERNAME").expect("The .env file must have a \"MW_USERNAME\" attribute.");
|
||||||
|
let oauth2_token = env::var("MW_OAUTH2").expect("The .env file must have a \"MW_OAUTH2\" attribute.");
|
||||||
|
let botpassword = env::var("MW_BOTPASSWORD").expect("The .env file must have a \"MW_BOTPASSWORD\" attribute.");
|
||||||
|
|
||||||
|
let filled_in_config = formatx!(config_template, username, botpassword, oauth2_token).unwrap();
|
||||||
|
std::fs::write(shellexpand::tilde("~/.config/mwbot.toml").into_owned(), filled_in_config).unwrap();
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
} else {
|
||||||
|
Err("Unable to find mwbot.toml; did you execute the script from the same directory?")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
dotenvy::dotenv().expect("Couldn't load .env file; please make sure to create one in the same directory as executing from!");
|
||||||
|
|
||||||
|
let cli = Cli::parse();
|
||||||
|
|
||||||
|
match cli.action {
|
||||||
|
Action::Setup => {
|
||||||
|
if let Err(err) = setup() {
|
||||||
|
eprintln!("{}", err);
|
||||||
|
exit(1);
|
||||||
|
} else {
|
||||||
|
eprintln!("Successfully set up ~/.config/mwbot.toml.");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Action::Run {username, botpassword, oauth2_token, api_url, rest_url} => {
|
||||||
|
let bot = mwbot::Bot::builder(api_url, rest_url)
|
||||||
|
.set_botpassword(username, botpassword)
|
||||||
|
.build()
|
||||||
|
.await.unwrap();
|
||||||
|
let page = bot.page("Bulgaria").unwrap();
|
||||||
|
let html = page.html().await.unwrap().into_mutable();
|
||||||
|
println!("{:?}", html);
|
||||||
|
println!("{:?}", html.as_nodes());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user