2024-01-24 18:14:50 +08:00
|
|
|
use std::env;
|
|
|
|
use std::fs;
|
|
|
|
|
|
|
|
use serde::Deserialize;
|
2024-02-20 17:15:14 +08:00
|
|
|
use toml::from_str;
|
2024-03-13 01:17:50 +08:00
|
|
|
use tracing::warn;
|
2024-01-24 18:14:50 +08:00
|
|
|
|
2024-02-18 22:43:54 +08:00
|
|
|
/// Icalingua bot 的配置
|
2024-02-20 17:47:45 +08:00
|
|
|
#[derive(Debug, Clone, Deserialize)]
|
2024-01-24 18:14:50 +08:00
|
|
|
pub struct IcaConfig {
|
|
|
|
/// icalingua 私钥
|
|
|
|
pub private_key: String,
|
|
|
|
/// icalingua 服务器地址
|
|
|
|
pub host: String,
|
|
|
|
/// bot 的 qq
|
|
|
|
pub self_id: u64,
|
|
|
|
/// 提醒的房间
|
|
|
|
pub notice_room: Vec<i64>,
|
|
|
|
/// 是否提醒
|
2024-02-20 18:22:59 +08:00
|
|
|
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
|
|
|
}
|
|
|
|
|
2024-03-13 01:17:50 +08:00
|
|
|
/// Matrix 配置
|
|
|
|
#[derive(Debug, Clone, Deserialize)]
|
|
|
|
pub struct MatrixConfig {
|
|
|
|
/// home server
|
|
|
|
pub home_server: String,
|
|
|
|
/// bot_id
|
|
|
|
pub bot_id: String,
|
|
|
|
/// bot password
|
|
|
|
pub bot_password: String,
|
|
|
|
/// 提醒的房间
|
|
|
|
pub notice_room: Vec<String>,
|
|
|
|
/// 是否提醒
|
|
|
|
pub notice_start: bool,
|
|
|
|
}
|
|
|
|
|
2024-03-12 00:16:12 +08:00
|
|
|
/// 主配置
|
|
|
|
#[derive(Debug, Clone, Deserialize)]
|
|
|
|
pub struct BotConfig {
|
2024-03-12 00:47:00 +08:00
|
|
|
/// 是否启用 icalingua
|
2024-03-13 01:17:50 +08:00
|
|
|
pub enable_ica: Option<bool>,
|
2024-03-12 00:16:12 +08:00
|
|
|
/// Ica 配置
|
|
|
|
pub ica: Option<IcaConfig>,
|
2024-03-13 01:17:50 +08:00
|
|
|
/// 是否启用 Matrix
|
|
|
|
pub enable_matrix: Option<bool>,
|
2024-03-12 00:16:12 +08:00
|
|
|
/// Matrix 配置
|
2024-03-13 01:17:50 +08:00
|
|
|
pub matrix: Option<MatrixConfig>,
|
2024-01-24 18:14:50 +08:00
|
|
|
/// 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-01-24 18:14:50 +08:00
|
|
|
}
|
|
|
|
|
2024-03-12 00:16:12 +08:00
|
|
|
impl BotConfig {
|
2024-01-24 18:14:50 +08:00
|
|
|
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)
|
2024-01-24 18:14:50 +08:00
|
|
|
.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
|
|
|
|
2024-03-13 01:17:50 +08:00
|
|
|
/// 检查是否启用 ica
|
|
|
|
pub fn check_ica(&self) -> bool {
|
|
|
|
match self.enable_ica {
|
|
|
|
Some(enable) => {
|
|
|
|
if enable {
|
|
|
|
if let None = self.ica {
|
|
|
|
warn!("enable_ica 为 true 但未填写 [ica] 配置\n将不启用 ica");
|
|
|
|
false
|
|
|
|
} else {
|
|
|
|
true
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
None => {
|
|
|
|
if let Some(_) = self.ica {
|
|
|
|
warn!("未填写 enable_ica 但填写了 [ica] 配置\n将不启用 ica");
|
|
|
|
}
|
|
|
|
false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// 检查是否启用 Matrix
|
|
|
|
pub fn check_matrix(&self) -> bool {
|
|
|
|
match self.enable_matrix {
|
|
|
|
Some(enable) => {
|
|
|
|
if enable {
|
|
|
|
if let None = self.matrix {
|
|
|
|
warn!("enable_matrix 为 true 但未填写 [matrix] 配置\n将不启用 Matrix");
|
|
|
|
false
|
|
|
|
} else {
|
|
|
|
true
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
None => {
|
|
|
|
if let Some(_) = self.matrix {
|
|
|
|
warn!("未填写 enable_matrix 但填写了 [matrix] 配置\n将不启用 Matrix");
|
|
|
|
}
|
|
|
|
false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-03-12 00:16:12 +08:00
|
|
|
pub fn ica(&self) -> IcaConfig { self.ica.clone().expect("No ica config found") }
|
2024-01-24 18:14:50 +08:00
|
|
|
}
|