From a8f52451c517e81ec90768c0c33482c6cf422933 Mon Sep 17 00:00:00 2001 From: "Rodrigo Rodriguez (Pragmatismo)" Date: Mon, 13 Oct 2025 18:11:03 -0300 Subject: [PATCH] New features for start.bas --- src/basic/keywords/hear_talk.rs | 76 +++++++++++++++++---------------- src/basic/mod.rs | 5 ++- 2 files changed, 43 insertions(+), 38 deletions(-) diff --git a/src/basic/keywords/hear_talk.rs b/src/basic/keywords/hear_talk.rs index 19d8920d..731e02b8 100644 --- a/src/basic/keywords/hear_talk.rs +++ b/src/basic/keywords/hear_talk.rs @@ -119,7 +119,10 @@ pub fn talk_keyword(state: Arc, user: UserSession, engine: &mut Engine Ok(Dynamic::UNIT) }) .unwrap(); - +} +pub fn set_user_keyword(state: Arc, user: UserSession, engine: &mut Engine) { + let state_clone = Arc::clone(&state); + let user_clone = user.clone(); engine .register_custom_syntax(&["SET_USER", "$expr$"], true, move |context, inputs| { let user_id_str = context.eval_expression_tree(&inputs[0])?.to_string(); @@ -155,40 +158,39 @@ pub fn talk_keyword(state: Arc, user: UserSession, engine: &mut Engine Ok(Dynamic::UNIT) }) .unwrap(); - - pub fn set_context_keyword(state: &AppState, user: UserSession, engine: &mut Engine) { - let cache = state.redis_client.clone(); - - engine - .register_custom_syntax(&["SET_CONTEXT", "$expr$"], true, move |context, inputs| { - let context_value = context.eval_expression_tree(&inputs[0])?.to_string(); - - info!("SET CONTEXT command executed: {}", context_value); - - let redis_key = format!("context:{}:{}", user.user_id, user.id); - - let cache_clone = cache.clone(); - - tokio::spawn(async move { - if let Some(cache_client) = &cache_clone { - let mut conn = match cache_client.get_multiplexed_async_connection().await { - Ok(conn) => conn, - Err(e) => { - error!("Failed to connect to cache: {}", e); - return; - } - }; - - let _: Result<(), _> = redis::cmd("SET") - .arg(&redis_key) - .arg(&context_value) - .query_async(&mut conn) - .await; - } - }); - - Ok(Dynamic::UNIT) - }) - .unwrap(); - } +} +pub fn set_context_keyword(state: &AppState, user: UserSession, engine: &mut Engine) { + let cache = state.redis_client.clone(); + + engine + .register_custom_syntax(&["SET_CONTEXT", "$expr$"], true, move |context, inputs| { + let context_value = context.eval_expression_tree(&inputs[0])?.to_string(); + + info!("SET CONTEXT command executed: {}", context_value); + + let redis_key = format!("context:{}:{}", user.user_id, user.id); + + let cache_clone = cache.clone(); + + tokio::spawn(async move { + if let Some(cache_client) = &cache_clone { + let mut conn = match cache_client.get_multiplexed_async_connection().await { + Ok(conn) => conn, + Err(e) => { + error!("Failed to connect to cache: {}", e); + return; + } + }; + + let _: Result<(), _> = redis::cmd("SET") + .arg(&redis_key) + .arg(&context_value) + .query_async(&mut conn) + .await; + } + }); + + Ok(Dynamic::UNIT) + }) + .unwrap(); } diff --git a/src/basic/mod.rs b/src/basic/mod.rs index 1ac85108..d0843f7e 100644 --- a/src/basic/mod.rs +++ b/src/basic/mod.rs @@ -12,7 +12,9 @@ use self::keywords::first::first_keyword; use self::keywords::for_next::for_keyword; use self::keywords::format::format_keyword; use self::keywords::get::get_keyword; -use self::keywords::hear_talk::{hear_keyword, set_context_keyword, talk_keyword}; +use self::keywords::hear_talk::{ + hear_keyword, set_context_keyword, set_user_keyword, talk_keyword, +}; use self::keywords::last::last_keyword; use self::keywords::llm_keyword::llm_keyword; use self::keywords::on::on_keyword; @@ -59,6 +61,7 @@ impl ScriptService { hear_keyword(state.clone(), user.clone(), &mut engine); talk_keyword(state.clone(), user.clone(), &mut engine); set_context_keyword(&state, user.clone(), &mut engine); + set_user_keyword(state.clone(), user.clone(), &mut engine); #[cfg(feature = "web_automation")] get_website_keyword(&state, user.clone(), &mut engine);