export function clean(value, max=240) { return String(value ?? '').replace(/[\u0000-\u001f\u007f]/g, ' ').replace(/\s+/g, ' ').trim().slice(0, max); } export function safeName(value) { const name=clean(value,45).replace(/[<>"'`]/g,''); return name || 'amiga o amigo'; } export function isBlocked(text, list=[]) { const lower=String(text).toLocaleLowerCase('es'); return list.some(w=>w && lower.includes(String(w).toLocaleLowerCase('es'))); } export function shouldAnswer(text,config) { if (!config.behavior.respondToChat) return false; if (config.behavior.respondToAllChat) return true; const s=String(text).toLocaleLowerCase('es'); return (config.behavior.chatTriggers||[]).some(t=>s.includes(String(t).toLocaleLowerCase('es'))); } export function sleep(ms) {return new Promise(r=>setTimeout(r,Math.max(0,ms)));}