121 lines
3.1 KiB
Rust
121 lines
3.1 KiB
Rust
use std::{fs, io::Write, path::Path};
|
|
|
|
use serde_json::{Value, json};
|
|
|
|
use crate::{Data, db::keys, rs_println};
|
|
|
|
static DATA_PATH: &str = "./data/db/dc_data.json";
|
|
static PRESET_PATH: &str = "./data/defaults/dc_data_preset.json";
|
|
|
|
|
|
pub async fn read_data(wipe: bool) -> Value {
|
|
if !Path::new(DATA_PATH).exists() || wipe {
|
|
rs_println!(
|
|
"{} creating new from preset...",
|
|
if !wipe { "discord_data.json not found," } else { "[WIPE] (discord_data.json)" }
|
|
);
|
|
generate_data();
|
|
}
|
|
|
|
let str_data = fs::read_to_string(DATA_PATH).unwrap();
|
|
let json_data = serde_json::from_str(&str_data).unwrap();
|
|
return json_data;
|
|
}
|
|
|
|
|
|
fn generate_data() {
|
|
let preset_str = fs::read_to_string(PRESET_PATH).unwrap();
|
|
let mut preset_json: Value = serde_json::from_str(&preset_str).unwrap();
|
|
|
|
if let Some(servers) = preset_json["servers"].as_object_mut() {
|
|
servers.remove("SERVER ID");
|
|
}
|
|
|
|
let json_str = serde_json::to_string_pretty(&preset_json).unwrap();
|
|
|
|
let mut file = fs::File::create(DATA_PATH).unwrap();
|
|
file.write_all(json_str.as_bytes()).unwrap();
|
|
}
|
|
|
|
|
|
pub async fn write_data(data: &Data) {
|
|
if !Path::new(DATA_PATH).exists() {
|
|
generate_data();
|
|
}
|
|
|
|
let mut file = fs::OpenOptions::new()
|
|
.write(true)
|
|
.truncate(true)
|
|
.open(DATA_PATH)
|
|
.unwrap();
|
|
|
|
|
|
let dc_data = data.discord_data.lock().await;
|
|
let json_str = serde_json::to_string_pretty(&dc_data.clone()).unwrap();
|
|
|
|
file.write_all(json_str.as_bytes()).unwrap();
|
|
}
|
|
|
|
|
|
pub async fn add_server(data: &Data, server_id: u64) -> Result<(), ()> {
|
|
let mut dc_data = data.discord_data.lock().await;
|
|
|
|
if dc_data.get("servers").is_none() { return Err(()); }
|
|
|
|
let servers = dc_data["servers"].as_object_mut().unwrap();
|
|
|
|
if !servers.contains_key(&server_id.to_string()) {
|
|
servers.insert(server_id.to_string(), json!({}));
|
|
}
|
|
|
|
return Ok(());
|
|
}
|
|
|
|
|
|
pub async fn bind_bk(data: &Data, server_id: u64, channel_id: u64) -> Result<(), ()> {
|
|
let mut dc_data = data.discord_data.lock().await;
|
|
|
|
if dc_data.get("servers").is_none() { return Err(()); }
|
|
|
|
let servers = dc_data["servers"].as_object_mut().unwrap();
|
|
|
|
if !servers.contains_key(&server_id.to_string()) {
|
|
return Err(());
|
|
}
|
|
|
|
let server = servers[&server_id.to_string()].as_object_mut().unwrap();
|
|
|
|
server.insert(keys::DC_POSTS_CHANNEL_KEY.to_string(), channel_id.into());
|
|
|
|
return Ok(());
|
|
}
|
|
|
|
|
|
pub async fn bind_wwrps(data: &Data, server_id: u64, channel_id: u64) -> Result<(), ()> {
|
|
let mut dc_data = data.discord_data.lock().await;
|
|
|
|
if dc_data.get("servers").is_none() { return Err(()); }
|
|
|
|
let servers = dc_data["servers"].as_object_mut().unwrap();
|
|
|
|
if !servers.contains_key(&server_id.to_string())
|
|
{ return Err(()); }
|
|
|
|
let server = servers[&server_id.to_string()].as_object_mut().unwrap();
|
|
|
|
server.insert(keys::DC_WWRPS_CHANNEL_KEY.to_string(), channel_id.into());
|
|
|
|
return Ok(());
|
|
}
|
|
|
|
|
|
pub async fn contains_server(data: &Data, server_id: u64) -> bool {
|
|
let dc_data = data.discord_data.lock().await;
|
|
|
|
if dc_data.get("servers").is_none() { return false; }
|
|
|
|
let mut clone = dc_data.clone();
|
|
let servers = clone["servers"].as_object_mut().unwrap();
|
|
|
|
return servers.contains_key(&server_id.to_string())
|
|
} |