58 lines
1.4 KiB
Rust
58 lines
1.4 KiB
Rust
#![forbid(unsafe_code)]
|
|
|
|
#[macro_use]
|
|
extern crate log;
|
|
|
|
#[macro_use]
|
|
extern crate clap;
|
|
|
|
extern crate env_logger;
|
|
|
|
use clap::{App, Arg};
|
|
use irc_bot::modules;
|
|
|
|
arg_enum! {
|
|
#[derive(Debug)]
|
|
enum LogLevel {
|
|
Display,
|
|
Debug
|
|
}
|
|
}
|
|
|
|
fn arg<'a, 'b>(name: &'a str, short: &'b str) -> Arg<'a, 'b> {
|
|
return Arg::with_name(name).long(name).short(short);
|
|
}
|
|
|
|
fn main() {
|
|
env_logger::init();
|
|
|
|
let ll_arg = arg("log-level", "l")
|
|
.possible_values(&LogLevel::variants())
|
|
.default_value("Display")
|
|
.case_insensitive(true);
|
|
|
|
let app = App::new("lysenko")
|
|
.arg(arg("config", "C").default_value("lysenko.yml"))
|
|
.arg(arg("data-dir", "d").default_value("."))
|
|
.arg(ll_arg);
|
|
|
|
let args = app.get_matches();
|
|
|
|
let config_file = args.value_of("config").expect("default missing?");
|
|
let data_dir = args.value_of("data-dir").expect("default missing?");
|
|
let log_level = value_t!(args, "log-level", LogLevel).unwrap_or_else(|err| err.exit());
|
|
|
|
irc_bot::run(
|
|
irc_bot::Config::try_from_path(config_file),
|
|
data_dir,
|
|
move |err| {
|
|
match log_level {
|
|
LogLevel::Display => error!("{}", err),
|
|
LogLevel::Debug => error!("{:?}", err),
|
|
}
|
|
irc_bot::ErrorReaction::Proceed
|
|
},
|
|
&[modules::default, modules::test],
|
|
);
|
|
}
|