(LARGE COMMIT) refactored until no errors

This commit is contained in:
2026-03-01 14:15:55 +01:00
parent df7583263a
commit ed8904e26c
28 changed files with 322 additions and 289 deletions
+9 -10
View File
@@ -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
View File
@@ -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
View File
@@ -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; }
+38
View File
@@ -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();
}
-21
View File
@@ -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
View File
@@ -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;
}
+14
View File
@@ -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());
}
}