(LARGE COMMIT) refactored until no errors
This commit is contained in:
+9
-10
@@ -1,18 +1,17 @@
|
||||
use serde_json::Value;
|
||||
use tokio::sync::Mutex;
|
||||
|
||||
use crate::{db::terminal_args::Args, games::wwrps::RPSGame, lang::Lang};
|
||||
use crate::{db::{env_vars::AssistantEnv, terminal_args::Args}, games::wwrps::RPSGame, lang::Lang};
|
||||
|
||||
|
||||
pub struct Data {
|
||||
pub owners: Vec<u64>,
|
||||
pub ball_prompts: [Vec<String>; 2],
|
||||
pub rps_game: Mutex<RPSGame>,
|
||||
pub reddit_data: Mutex<Option<Value>>,
|
||||
pub discord_data: Mutex<Option<Value>>,
|
||||
pub cfg: Mutex<Option<toml::Value>>,
|
||||
pub bk_mods: Vec<u64>,
|
||||
pub args: Args,
|
||||
pub lang_name: Mutex<String>,
|
||||
pub lang: Mutex<Lang>
|
||||
pub ball_prompts: [Vec<String>; 2],
|
||||
pub cfg: toml::Value,
|
||||
pub discord_data: Mutex<Value>,
|
||||
pub env_vars: AssistantEnv,
|
||||
pub lang_name: String,
|
||||
pub lang: Lang,
|
||||
pub reddit_data: Mutex<Value>,
|
||||
pub rps_game: Mutex<RPSGame>,
|
||||
}
|
||||
+5
-9
@@ -1,15 +1,13 @@
|
||||
use std::{fs, io::Write, path::Path};
|
||||
|
||||
use serde_json::{Value, json};
|
||||
|
||||
use crate::{Data, rs_println, websocket::send_cmd_json};
|
||||
use crate::rs_println;
|
||||
|
||||
|
||||
static DATA_PATH: &str = "./cfg/cfg.toml";
|
||||
static PRESET_PATH: &str = "./data/defaults/cfg_default.toml";
|
||||
|
||||
|
||||
pub async fn read_data(data: &Data, wipe: bool) -> Option<Value> {
|
||||
pub async fn read_data(wipe: bool) -> toml::Value {
|
||||
if !Path::new(DATA_PATH).exists() || wipe {
|
||||
rs_println!(
|
||||
"{} creating new from preset...",
|
||||
@@ -20,16 +18,14 @@ pub async fn read_data(data: &Data, wipe: bool) -> Option<Value> {
|
||||
|
||||
let str_data = fs::read_to_string(DATA_PATH).unwrap();
|
||||
let json_data: toml::Value = str_data.parse().unwrap();
|
||||
let mut cfg_data = data.cfg.lock().await;
|
||||
*cfg_data = Some(json_data.clone());
|
||||
|
||||
let r = send_cmd_json(
|
||||
/*let r = send_cmd_json(
|
||||
"update_cfg",
|
||||
Some(json!([toml::to_string(&json_data).unwrap()])),
|
||||
true
|
||||
).await;
|
||||
).await;*/
|
||||
|
||||
return r;
|
||||
return json_data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+8
-14
@@ -8,7 +8,7 @@ static DATA_PATH: &str = "./data/db/dc_data.json";
|
||||
static PRESET_PATH: &str = "./data/defaults/dc_data_preset.json";
|
||||
|
||||
|
||||
pub async fn read_data(data: &Data, wipe: bool) {
|
||||
pub async fn read_data(wipe: bool) -> Value {
|
||||
if !Path::new(DATA_PATH).exists() || wipe {
|
||||
rs_println!(
|
||||
"{} creating new from preset...",
|
||||
@@ -19,8 +19,7 @@ pub async fn read_data(data: &Data, wipe: bool) {
|
||||
|
||||
let str_data = fs::read_to_string(DATA_PATH).unwrap();
|
||||
let json_data = serde_json::from_str(&str_data).unwrap();
|
||||
let mut dc_data = data.discord_data.lock().await;
|
||||
*dc_data = json_data;
|
||||
return json_data;
|
||||
}
|
||||
|
||||
|
||||
@@ -51,17 +50,15 @@ pub async fn write_data(data: &Data) {
|
||||
.unwrap();
|
||||
|
||||
|
||||
let mut dc_data_lock = data.discord_data.lock().await;
|
||||
let dc_data = dc_data_lock.as_mut().unwrap();
|
||||
let json_str = serde_json::to_string_pretty(dc_data).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_lock = data.discord_data.lock().await;
|
||||
let dc_data = dc_data_lock.as_mut().unwrap();
|
||||
let mut dc_data = data.discord_data.lock().await;
|
||||
|
||||
if dc_data.get("servers").is_none() { return Err(()); }
|
||||
|
||||
@@ -76,8 +73,7 @@ pub async fn add_server(data: &Data, server_id: u64) -> Result<(), ()> {
|
||||
|
||||
|
||||
pub async fn bind_bk(data: &Data, server_id: u64, channel_id: u64) -> Result<(), ()> {
|
||||
let mut dc_data_lock = data.discord_data.lock().await;
|
||||
let dc_data = dc_data_lock.as_mut().unwrap();
|
||||
let mut dc_data = data.discord_data.lock().await;
|
||||
|
||||
if dc_data.get("servers").is_none() { return Err(()); }
|
||||
|
||||
@@ -96,8 +92,7 @@ pub async fn bind_bk(data: &Data, server_id: u64, channel_id: u64) -> Result<(),
|
||||
|
||||
|
||||
pub async fn bind_wwrps(data: &Data, server_id: u64, channel_id: u64) -> Result<(), ()> {
|
||||
let mut dc_data_lock = data.discord_data.lock().await;
|
||||
let dc_data = dc_data_lock.as_mut().unwrap();
|
||||
let mut dc_data = data.discord_data.lock().await;
|
||||
|
||||
if dc_data.get("servers").is_none() { return Err(()); }
|
||||
|
||||
@@ -115,8 +110,7 @@ pub async fn bind_wwrps(data: &Data, server_id: u64, channel_id: u64) -> Result<
|
||||
|
||||
|
||||
pub async fn contains_server(data: &Data, server_id: u64) -> bool {
|
||||
let dc_data_lock = data.discord_data.lock().await;
|
||||
let dc_data = dc_data_lock.as_ref().unwrap();
|
||||
let dc_data = data.discord_data.lock().await;
|
||||
|
||||
if dc_data.get("servers").is_none() { return false; }
|
||||
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
#[derive(Clone)]
|
||||
pub struct AssistantEnv {
|
||||
pub token: String,
|
||||
pub bot_owners: Vec<u64>,
|
||||
pub reddit_mod_discord_ids: Vec<u64>
|
||||
}
|
||||
|
||||
|
||||
impl AssistantEnv {
|
||||
pub fn new(test: bool) -> Self {
|
||||
let token_name = if test { "ASSISTANT_TOKEN" }
|
||||
else { "ASSISTANT_TOKEN_TEST" };
|
||||
|
||||
return AssistantEnv {
|
||||
token: string_env(token_name),
|
||||
bot_owners: vec_u64_env("ASSISTANT_OWNERS"),
|
||||
reddit_mod_discord_ids: vec_u64_env("ASSISTANT_BK_MODS")
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fn string_env(name: &str) -> String {
|
||||
return std::env::var(name)
|
||||
.expect(format!("Environment variable \"{}\" not found!", name).as_str())
|
||||
}
|
||||
|
||||
|
||||
fn vec_u64_env(name: &str) -> Vec<u64> {
|
||||
let var = std::env::var(name)
|
||||
.unwrap_or("0".to_string());
|
||||
|
||||
return var
|
||||
.split(",")
|
||||
.map(|s| s.parse::<u64>()
|
||||
.expect(format!("Failed to parse {}. Invalid syntax.", name).as_str()))
|
||||
.collect();
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
use serde_json::Value;
|
||||
use tokio::sync::Mutex;
|
||||
|
||||
use crate::Error;
|
||||
|
||||
pub async fn get_json_mutex(data: &Mutex<Option<Value>>) -> Result<Value, Error> {
|
||||
let data_lock = data.lock().await;
|
||||
return match data_lock.as_ref() {
|
||||
Some(data) => Ok(data.clone()),
|
||||
None => Err("Cannot get mutex data: The data is corrupted!".into()),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
pub async fn get_toml_mutex(data: &Mutex<Option<toml::Value>>) -> Result<toml::Value, Error> {
|
||||
let data_lock = data.lock().await;
|
||||
return match data_lock.as_ref() {
|
||||
Some(data) => Ok(data.clone()),
|
||||
None => Err("Cannot get mutex data: The data is corrupted!".into()),
|
||||
};
|
||||
}
|
||||
+6
-7
@@ -2,7 +2,7 @@ use std::{fs, io::Write, path::Path};
|
||||
|
||||
use serde_json::Value;
|
||||
|
||||
use crate::{Data, rs_println, rs_warnln, websocket::send_cmd_json};
|
||||
use crate::{rs_println, rs_warnln, websocket::send_cmd_json};
|
||||
|
||||
|
||||
static DATA_PATH: &str = "./data/db/re_data.json";
|
||||
@@ -11,7 +11,7 @@ static PRESET_PATH: &str = "./data/defaults/re_data_preset.json";
|
||||
pub static POSTS_KEY: &str = "posts";
|
||||
|
||||
|
||||
pub async fn read_data(data: &Data, wipe: bool) {
|
||||
pub async fn read_data(wipe: bool) -> Value {
|
||||
if !Path::new(DATA_PATH).exists() || wipe {
|
||||
rs_println!(
|
||||
"{} creating new from preset...",
|
||||
@@ -21,9 +21,8 @@ pub async fn read_data(data: &Data, wipe: bool) {
|
||||
}
|
||||
|
||||
let str_data = fs::read_to_string(DATA_PATH).unwrap();
|
||||
let json_data: Option<Value> = serde_json::from_str(&str_data).unwrap();
|
||||
let mut re_data = data.reddit_data.lock().await;
|
||||
*re_data = json_data;
|
||||
let json_data: Value = serde_json::from_str(&str_data).unwrap();
|
||||
return json_data;
|
||||
}
|
||||
|
||||
|
||||
@@ -45,9 +44,9 @@ fn generate_data() {
|
||||
}
|
||||
|
||||
|
||||
pub async fn update_data(data: &Data) {
|
||||
pub async fn update_data() {
|
||||
send_cmd_json("update_data_file", None, true).await;
|
||||
read_data(data, false).await;
|
||||
read_data(false).await;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -28,3 +28,17 @@ pub struct Args {
|
||||
#[arg(long, help = "Makes the program not use the schedule system.")]
|
||||
pub nosched: bool
|
||||
}
|
||||
|
||||
|
||||
impl Args {
|
||||
pub fn new() -> Self
|
||||
{ return <Args as clap::Parser>::parse(); }
|
||||
}
|
||||
|
||||
|
||||
impl ToString for Args {
|
||||
fn to_string(&self) -> String {
|
||||
return serde_json::to_string(self)
|
||||
.unwrap_or("[FAILED TO CONVERT TO STRING]".to_string());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user