122 lines
4.1 KiB
Rust
122 lines
4.1 KiB
Rust
use std::{fs::File, io::BufWriter};
|
|
use log::{info, warn, error};
|
|
use serde::{Deserialize, Serialize};
|
|
use std::io::BufReader;
|
|
|
|
#[derive(Debug, Deserialize, Serialize)]
|
|
pub struct Configuration {
|
|
server_ip: String,
|
|
server_port: String,
|
|
username_prefix: String,
|
|
count: i32,
|
|
proxy_url: String,
|
|
reco_words: Vec<String>,
|
|
login_commands: Vec<String>,
|
|
spam_file: String,
|
|
spam_delay_ms: i32,
|
|
random_prefix: bool,
|
|
pub worker_threads: i32,
|
|
pub use_thread_pool: bool,
|
|
pub update_worker_threads: i32
|
|
}
|
|
|
|
impl Configuration {
|
|
pub fn new(filename: &str) -> Self {
|
|
let file = File::open(filename);
|
|
match file {
|
|
Ok(file) => {
|
|
let reader = BufReader::new(file);
|
|
match serde_json::from_reader::<_,Configuration>(reader) { // serde可以直接解析出实现了Deserialize trait的类型 就很不错
|
|
Ok(config) => {
|
|
info!("Server IP: {}", config.server_ip);
|
|
info!("Server Port: {}", config.server_port);
|
|
info!("Username Prefix: {}", config.username_prefix);
|
|
info!("Bot Count: {}", config.count);
|
|
info!("Proxy URL: {}", config.proxy_url);
|
|
config
|
|
}
|
|
Err(error) => {
|
|
error!("Error parsing config file: {}", error);
|
|
Self::default()
|
|
}
|
|
}
|
|
}
|
|
Err(error) => {
|
|
warn!("Unable to read config file, will use default values: {}", error);
|
|
let file = File::create_new(filename).unwrap();
|
|
let writer = BufWriter::new(file);
|
|
let mut serializer = serde_json::Serializer::pretty(writer);
|
|
Self::default().serialize(&mut serializer).unwrap();
|
|
warn!("A configure file with default values is created.");
|
|
Self::default()
|
|
}
|
|
}
|
|
}
|
|
|
|
fn default() -> Self {
|
|
Configuration {
|
|
server_ip: "m.earthvillage.top".to_string(),
|
|
server_port: "33009".to_string(),
|
|
username_prefix: "".to_string(),
|
|
count: 300,
|
|
proxy_url: "http://uu-proxy.com/api/get_proxies?id=RZ7GS5ZYTA&size=1&schemes=socks5&support_https=false&format=json".to_string(),
|
|
reco_words: vec!["AntiAttack".to_string()],
|
|
login_commands: vec![],
|
|
spam_file: "".to_string(),
|
|
spam_delay_ms: 0,
|
|
random_prefix: false,
|
|
worker_threads: 100,
|
|
use_thread_pool: true,
|
|
update_worker_threads: 100,
|
|
}
|
|
}
|
|
|
|
// 下面是getter一堆
|
|
pub fn server_ip(&self) -> &str {
|
|
self.server_ip.as_str()
|
|
}
|
|
pub fn server_port(&self) -> &str {
|
|
self.server_port.as_str()
|
|
}
|
|
pub fn username_prefix(&self) -> &str {
|
|
self.username_prefix.as_str()
|
|
}
|
|
pub fn count(&self) -> i32 {
|
|
self.count
|
|
}
|
|
pub fn proxy_url(&self) -> &str {
|
|
self.proxy_url.as_str()
|
|
}
|
|
pub fn reco_words(&self) -> &Vec<String> {
|
|
&self.reco_words
|
|
}
|
|
pub fn login_commands(&self) -> &Vec<String> {
|
|
&self.login_commands
|
|
}
|
|
pub fn spam_file(&self) -> &str {
|
|
self.spam_file.as_str()
|
|
}
|
|
pub fn spam_delay_ms(&self) -> i32 {
|
|
self.spam_delay_ms
|
|
}
|
|
pub fn random_prefix(&self) -> bool {
|
|
self.random_prefix
|
|
}
|
|
}
|
|
|
|
// impl Clone for Configuration {
|
|
// fn clone(&self) -> Self {
|
|
// Configuration {
|
|
// server_ip: self.server_ip.clone(),
|
|
// server_port: self.server_port.clone(),
|
|
// username_prefix: self.username_prefix.clone(),
|
|
// count: self.count,
|
|
// proxy_url: self.proxy_url.clone(),
|
|
// reco_words: self.reco_words.clone(),
|
|
// login_commands:self.login_commands.clone(),
|
|
// random_prefix: self.random_prefix,
|
|
// spam_file: self.spam_file.clone(),
|
|
// spam_delay_ms: self.spam_delay_ms,
|
|
// }
|
|
// }
|
|
// }
|