socket-bot/ica-rs/src/config.rs

56 lines
1.5 KiB
Rust
Raw Normal View History

use std::env;
use std::fs;
use serde::Deserialize;
2024-02-20 17:15:14 +08:00
use toml::from_str;
/// Icalingua bot 的配置
2024-02-20 17:47:45 +08:00
#[derive(Debug, Clone, Deserialize)]
pub struct IcaConfig {
2024-03-12 00:16:12 +08:00
/// 是否启用 icalingua
pub enable: bool,
/// icalingua 私钥
pub private_key: String,
/// icalingua 服务器地址
pub host: String,
/// bot 的 qq
pub self_id: u64,
/// 提醒的房间
pub notice_room: Vec<i64>,
/// 是否提醒
pub notice_start: bool,
/// 管理员列表
pub admin_list: Vec<i64>,
2024-02-22 23:17:20 +08:00
/// 过滤列表
pub filter_list: Vec<i64>,
2024-03-12 00:16:12 +08:00
}
/// 主配置
#[derive(Debug, Clone, Deserialize)]
pub struct BotConfig {
/// Ica 配置
pub ica: Option<IcaConfig>,
/// Matrix 配置
// TODO: MatrixConfig
/// Python 插件路径
2024-02-20 20:11:25 +08:00
pub py_plugin_path: Option<String>,
2024-02-25 18:49:39 +08:00
/// Python 配置文件路径
pub py_config_path: Option<String>,
}
2024-03-12 00:16:12 +08:00
impl BotConfig {
pub fn new_from_path(config_file_path: String) -> Self {
// try read config from file
let config = fs::read_to_string(&config_file_path).expect("Failed to read config file");
2024-02-20 17:15:14 +08:00
let ret: Self = from_str(&config)
.expect(format!("Failed to parse config file {}", &config_file_path).as_str());
ret
}
pub fn new_from_cli() -> Self {
let config_file_path = env::args().nth(1).expect("No config path given");
Self::new_from_path(config_file_path)
}
2024-03-12 00:16:12 +08:00
pub fn ica(&self) -> IcaConfig { self.ica.clone().expect("No ica config found") }
}