fixed lang & finalized it (still experimental)

This commit is contained in:
2026-03-06 13:46:08 +01:00
parent 9e17b7db7b
commit ff1b4f4e01
7 changed files with 50 additions and 24 deletions
+1 -1
View File
@@ -8,7 +8,7 @@ edition = "2021"
[dependencies]
base64 = "0.22.1"
clap = { version = "4.5.28", features = ["derive"] }
dynfmt = "0.1.5"
dynfmt = { version = "0.1.5", features = ["curly"] }
flate2 = "1.1.2"
futures = "0.3.31"
poise = "0.6.1"
+1
View File
@@ -1,4 +1,5 @@
pub mod guild_invite;
pub mod lang;
pub mod leave_guild;
pub mod main_cmd;
pub mod ping;
+7
View File
@@ -0,0 +1,7 @@
use crate::{Context, Error, messages::send_msg};
pub async fn cmd(ctx: Context<'_>, path: String) -> Result<(), Error> {
send_msg(ctx, ctx.data().lang.get(path.as_str(), &[]), true, true).await;
return Ok(());
}
+4 -1
View File
@@ -1,9 +1,10 @@
use crate::{Context, Error, cmds::debug::{guild_invite, leave_guild, ping, save, stop, view_guilds, whoami}};
use crate::{Context, Error, cmds::debug::{guild_invite, lang, leave_guild, ping, save, stop, view_guilds, whoami}};
#[derive(poise::ChoiceParameter, PartialEq)]
pub enum Subcommands {
GuildInvite,
Lang,
LeaveGuild,
Ping,
//ReloadCfg,
@@ -31,9 +32,11 @@ pub async fn cmd(
) -> Result<(), Error>
{
let u64_arg_u: u64 = u64_arg.unwrap_or("0".to_string()).as_str().parse()?;
let str_arg_u: String = string_arg.clone().unwrap_or("".to_string());
match subcommand {
Subcommands::GuildInvite => guild_invite::cmd(ctx, u64_arg_u).await?,
Subcommands::Lang => lang::cmd(ctx, str_arg_u).await?,
Subcommands::LeaveGuild => leave_guild::cmd(ctx, u64_arg_u).await?,
Subcommands::Ping => ping::cmd(ctx).await?,
//Subcommands::ReloadCfg => reload_cfg::cmd(ctx).await?,
+1 -1
View File
@@ -8,7 +8,7 @@ pub struct AssistantEnv {
impl AssistantEnv {
pub fn new(test: bool) -> Self {
let token_name = if test { "ASSISTANT_TOKEN" }
let token_name = if !test { "ASSISTANT_TOKEN" }
else { "ASSISTANT_TOKEN_TEST" };
return AssistantEnv {
+28 -16
View File
@@ -1,9 +1,17 @@
use std::path::PathBuf;
use std::{fs, path::PathBuf};
use serde_json::Value;
use dynfmt::{Format, NoopFormat};
use dynfmt::{Format, SimpleCurlyFormat};
use crate::Error;
use crate::{Error, rs_warnln};
#[derive(Debug)]
enum LangErrorType {
Fallback,
ShortIndex,
KeyNotFound
}
pub struct Lang {
@@ -12,9 +20,8 @@ pub struct Lang {
impl From<Value> for Lang {
fn from(value: Value) -> Self {
return Lang { data: value };
}
fn from(value: Value) -> Self
{ return Lang { data: value }; }
}
@@ -22,11 +29,14 @@ impl Lang {
pub fn from_file(filepath: PathBuf) -> Result<Self, Error> {
if !filepath.exists() { return Err(Error::from("LANG filepath not found!")); }
return Ok(Lang { data: Value::Null });
let file_contents = fs::read_to_string(filepath).unwrap();
let json = serde_json::from_str(&file_contents).unwrap();
return Ok(Lang { data: json });
}
pub fn get(&self, path: &'static str, args: &[String]) -> String {
pub fn get(&self, path: &str, args: &[String]) -> String {
let path_arr: Vec<&str> = path.split(".").collect();
return self.get_from_arr(path_arr, args);
}
@@ -37,27 +47,29 @@ impl Lang {
let mut search: &Value = &self.data;
for i in &path {
let r = search.get(i);
let Some(r) = search.get(i)
else { rs_warnln!("LANG warning ({:?})! ({})", LangErrorType::KeyNotFound, str_path); return str_path; };
if let Some(some) = r {
let str_r = search.as_str();
let str_r = r.as_str();
if let Some(string) = str_r
{ return Lang::format_str(string, args, str_path); }
else { search = some; }
}
else { return str_path; }
else { search = r; }
}
rs_warnln!("LANG warning ({:?})! ({})", LangErrorType::ShortIndex, str_path);
return str_path;
}
fn format_str(string: &str, args: &[String], fallback: String) -> String {
let cow = NoopFormat.format(string, args);
let cow = SimpleCurlyFormat.format(string, args);
if let Ok(ok) = cow
{ return ok.to_string(); }
else { return fallback; }
else {
rs_warnln!("LANG warning ({:?})! ({})", LangErrorType::Fallback, fallback);
return fallback;
}
}
}
+4 -1
View File
@@ -69,7 +69,8 @@ async fn main() {
if !run_py { rs_println!("[IMPORTANT] You have disabled the \"re\" commands in the CFG. The app will not run the Python code and the websockets to save resources!"); }
if !data.args.nosched { start_schedules(data.args.test).await; }
let nosched = data.args.nosched;
let test = data.args.test;
let python = start_py(
data.args.clone(),
@@ -79,6 +80,8 @@ async fn main() {
);
let rust = start_rs(data, run_py);
if !nosched { start_schedules(test).await; }
rust.join().unwrap();
python.join().unwrap();
}