84 lines
2.1 KiB
Rust
84 lines
2.1 KiB
Rust
/*
|
|
Copyright © 2026 Anzenlang
|
|
|
|
Licensed under the PolyForm Noncommercial License 1.0.0
|
|
https://polyformproject.org/licenses/noncommercial/
|
|
|
|
SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
SPDX-AI-Restriction: No training allowed. See NOTICE file.
|
|
|
|
See LICENSE file for complete terms.
|
|
|
|
WARNING: The contents of this file may NOT be used to train AI/LLM models. See NOTICE for legal
|
|
details.
|
|
*/
|
|
|
|
use clap::{Parser};
|
|
|
|
use shift_bot::*;
|
|
|
|
prelude! {}
|
|
|
|
/// Runs the shift bot.
|
|
#[derive(Parser, Debug)]
|
|
#[command(version, about)]
|
|
struct Clap {
|
|
/// Verbosity level.
|
|
#[arg(short, long, value_name = "NATURAL", default_value_t = 2)]
|
|
verb: usize,
|
|
|
|
/// Wipe the static data directory before doing anything.
|
|
#[arg(short, long)]
|
|
wipe: bool,
|
|
|
|
/// Identifier of the element bot account to run.
|
|
#[arg(
|
|
short,
|
|
long,
|
|
value_name = "MATRIX_USERNAME",
|
|
default_value = "shift_bot_dev"
|
|
)]
|
|
username: String,
|
|
/// Homeserver.
|
|
#[arg(
|
|
short = 's',
|
|
long,
|
|
value_name = "MATRIX_HOMESERVER",
|
|
default_value = "matrix.org"
|
|
)]
|
|
homeserver: String,
|
|
/// Password of the element bot account.
|
|
#[arg(short, long, value_name = "PASSWORD")]
|
|
password: String,
|
|
}
|
|
|
|
impl Clap {
|
|
/// Retrieves the `log::Level` from CLA-s.
|
|
fn verb_level(&self) -> log::Level {
|
|
match self.verb {
|
|
// in quiet mode, only show errors
|
|
0 => log::Level::Error,
|
|
1 => log::Level::Warn,
|
|
2 => log::Level::Info,
|
|
3 => log::Level::Debug,
|
|
_ => log::Level::Trace,
|
|
}
|
|
}
|
|
|
|
/// Sets the main configuration.
|
|
async fn run(self) -> Res<()> {
|
|
simple_logger::init_with_level(self.verb_level())
|
|
.context("something when wrong while initializing logger")?;
|
|
conf::set(conf::Main::new());
|
|
warmup(self.wipe)?;
|
|
let bot = MatrixId::new(self.username, self.homeserver);
|
|
let conf = conf::Serve::new(bot, self.password);
|
|
serve_bot(conf).await
|
|
}
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Res<()> {
|
|
let clap = Clap::parse();
|
|
clap.run().await
|
|
}
|