diff --git a/src/core/bot/mod.rs b/src/core/bot/mod.rs index b3be621e..7544b6bc 100644 --- a/src/core/bot/mod.rs +++ b/src/core/bot/mod.rs @@ -39,11 +39,23 @@ use log::{error, info, warn}; use serde_json; use std::collections::HashMap; use std::sync::Arc; +use std::sync::OnceLock; use tokio::sync::mpsc; use tokio::sync::Mutex as AsyncMutex; use uuid::Uuid; use serde::{Deserialize, Serialize}; +static SERVER_START_EPOCH: OnceLock = OnceLock::new(); + +fn server_epoch() -> u64 { + *SERVER_START_EPOCH.get_or_init(|| { + std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .map(|d| d.as_secs()) + .unwrap_or(0) + }) +} + pub mod channels; pub mod multimedia; @@ -546,7 +558,7 @@ impl BotOrchestrator { let actual_session_id = session.id.to_string(); // Check if start.bas has already been executed for this session - let start_bas_key = format!("start_bas_executed:{}", actual_session_id); + let start_bas_key = format!("start_bas_executed:{}:{}", server_epoch(), actual_session_id); let should_execute_start_bas = if let Some(cache) = &self.state.cache { if let Ok(mut conn) = cache.get_multiplexed_async_connection().await { let executed: Result, redis::RedisError> = redis::cmd("GET") @@ -1330,7 +1342,7 @@ async fn handle_websocket( if let Some(bot_name) = bot_name_result { // Check if start.bas has already been executed for this session - let start_bas_key = format!("start_bas_executed:{}", session_id); + let start_bas_key = format!("start_bas_executed:{}:{}", server_epoch(), session_id); let should_execute_start_bas = if let Some(cache) = &state.cache { if let Ok(mut conn) = cache.get_multiplexed_async_connection().await { let executed: Result, redis::RedisError> = redis::cmd("GET")