Userbot / memory_layer.py
mrwabnalas40's picture
Upload 105 files
40d06ea verified
# memory_layer.py
import json, os, threading, time, hashlib
MEM_PATH = "memory.json"
_LOCK = threading.Lock()
def _normalize_key(text: str) -> str:
base = (text or "").strip().lower()
# اختياري: لو بدك مفتاح ثابت حتى مع نص طويل
return hashlib.sha1(base.encode("utf-8")).hexdigest()
def _load_memory() -> dict:
if not os.path.exists(MEM_PATH):
return {}
try:
with open(MEM_PATH, "r", encoding="utf-8") as f:
return json.load(f)
except Exception:
return {}
def _save_memory(mem: dict) -> None:
tmp = MEM_PATH + ".tmp"
with open(tmp, "w", encoding="utf-8") as f:
json.dump(mem, f, ensure_ascii=False, indent=2)
os.replace(tmp, MEM_PATH)
def get_from_memory(key_text: str):
k = _normalize_key(key_text)
with _LOCK:
mem = _load_memory()
item = mem.get(k)
if not item:
return None
# اختياري: صلاحية زمنية TTL بالثواني (مثلاً 90 يوم)
ttl = item.get("_ttl_seconds")
ts = item.get("_timestamp")
if ttl and ts and (time.time() - ts) > ttl:
# منتهي، نحذفه
mem.pop(k, None)
_save_memory(mem)
return None
return item.get("response")
def save_to_memory(key_text: str, response_text: str, ttl_seconds: int | None = None):
k = _normalize_key(key_text)
with _LOCK:
mem = _load_memory()
mem[k] = {
"response": response_text,
"_timestamp": time.time(),
"_ttl_seconds": ttl_seconds
}
_save_memory(mem)