From 203b7499ddbfb0d62ec5a9d5c65e328a535e86d3 Mon Sep 17 00:00:00 2001 From: ByteDice Date: Sat, 7 Jun 2025 16:58:51 +0200 Subject: [PATCH] added handling for disabling "re" commands & updated readme --- BDA_icon_64x64.png | Bin 0 -> 3928 bytes README.md | 11 ++++++++--- src/data.rs | 5 +---- src/main.rs | 24 ++++++++++++++++-------- 4 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 BDA_icon_64x64.png diff --git a/BDA_icon_64x64.png b/BDA_icon_64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..76de73e30f6dd25fbac735a8781d42f60661d023 GIT binary patch literal 3928 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 m3ADHK>2W>%{@cIqEc^>BqT-yEOA-VC0000 # ByteDiceAssistant +![](/BDA_icon_64x64.png)\ An automation tool primarily made for myself (Byte Dice) but publicly available for anyone to use. It's both a Discord and Reddit bot in one program. > [!CAUTION] @@ -58,8 +59,12 @@ It is required to install all used Python modules. You can find those in [req.tx * View Channels * Embed Links -### How to run: -### Short answer for experienced people: +### Configuration: +You can find config files in the [cfg/](cfg/) folder. You can also find the default config in the [data/defaults/cfg_default.toml](data/defaults/cfg_default.toml) file, where comments are also listed.\ +**NOTE:** Some config files are automatically generated, and you will need to run the app once for them to generate. + +### How to start the program: +#### Short answer for experienced people: * Download the code. * Set the environment variables (listed above). * Restart the terminal. @@ -70,7 +75,7 @@ It is required to install all used Python modules. You can find those in [req.tx * For help, run `cargo run -- -h` or `cargo run -- --help`. * To only run the Python part, use `cargo run -- --py`, or for a better error output, `python ./src/python/main.py` -### Long answer for beginners: +#### Long answer for beginners: * Download the code (and extract it if needed). * Open a terminal. * Set the environment variables (listed above). diff --git a/src/data.rs b/src/data.rs index 9e973f7..c55c227 100644 --- a/src/data.rs +++ b/src/data.rs @@ -136,12 +136,9 @@ pub async fn read_cfg_data(data: &Data, wipe: bool) { fn generate_cfg_data() { let preset_str = fs::read_to_string(PRESET_PATH_CFG).unwrap(); - let preset_json: toml::Value = preset_str.parse().unwrap(); - - let json_str = toml::to_string_pretty(&preset_json).unwrap(); let mut file = fs::File::create(DATA_PATH_CFG).unwrap(); - file.write_all(json_str.as_bytes()).unwrap(); + file.write_all(preset_str.as_bytes()).unwrap(); } diff --git a/src/main.rs b/src/main.rs index e559eb3..79268ce 100644 --- a/src/main.rs +++ b/src/main.rs @@ -50,6 +50,7 @@ use tokio::runtime::Runtime; use tokio::sync::Mutex; use websocket::send_cmd_json; +use crate::data::get_toml_mutex; use crate::schedule::Schedule; @@ -103,6 +104,7 @@ async fn main() { let args = ::parse(); let args_str = serde_json::to_string(&args).expect("Error serializing args to JSON"); unsafe { NOPING = args.noping; } + rs_println!("Fetching language file..."); data::load_lang_data(args.clone().lang); @@ -115,13 +117,13 @@ async fn main() { .map(|s| s.parse::().expect("Failed to parse ASSISTANT_OWNERS. Invalid syntax.")) .collect(); + let data = gen_data(args.clone(), own_vec_u64.clone()).await; + if args.test { println!("----- USING TEST BOT -----"); } if args.dev { println!("----- DEV MODE ENABLED -----"); } if args.dev && args.wipe { println!("----- \"DON'T WORRY ABOUT IT\" MODE ENABLED -----"); } if args.nosched { println!("----- NO SCHEDULES -----"); } - // TODO: handle if config for reddit is disabled to not start python - if args.py && !args.rs { println!("----- PYTHON ONLY MODE -----"); rs_println!("ARGS: {}", args_str); @@ -131,27 +133,34 @@ async fn main() { else if args.rs && ! args.py { println!("----- RUST ONLY MODE -----"); rs_println!("ARGS: {}", args_str); - start(args, own_vec_u64.clone()).await; + start(args, data).await; process::exit(0); } rs_println!("ARGS: {}", args_str); + let cfg = get_toml_mutex(&data.cfg).await.unwrap(); + let cfg_arr = cfg["commands"]["disabled_categories"].as_array().unwrap(); + let contains: toml::Value = "re".parse().unwrap(); + let run_py = !cfg_arr.contains(&contains); + let rt_rs = Runtime::new().unwrap(); let rt_py = Runtime::new().unwrap(); let python_args = args.clone(); let rust_args = args.clone(); + if !run_py { rs_println!("[IMPORTANT] You have disabled the \"re\" commands in the CFG. The app will not run the Python code nor the websockets to save resources!"); } + let rust = thread::spawn(move || { rt_rs.block_on(async { - websocket::start(rust_args.clone(), own_vec_u64.clone()).await; - start(rust_args, own_vec_u64).await; + if run_py { websocket::start(rust_args.clone(), own_vec_u64.clone()).await; } + start(rust_args, data).await; }); }); let python = thread::spawn(move || { rt_py.block_on(async { - let _ = python::start(python_args).await; + if run_py { let _ = python::start(python_args).await; } }); }); @@ -168,8 +177,7 @@ async fn main() { } -async fn start(args: Args, owners: Vec) { - let data = gen_data(args.clone(), owners).await; +async fn start(args: Args, data: Data) { let mut bot = gen_bot(data, args).await; rs_println!("Starting Discord bot...");