o
    ìcj1                     @  s   U d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZ eeZddd	d
dgZded< ed
dG dd dZd&ddZd'ddZd(ddZd)d!d"Zd*d$d%ZdS )+zHAcciones disparadas por frases dichas por el bot (p. ej. TE TRANSFIERO).    )annotationsN)	dataclass)Any)SettingszTE TRANSFIEROtransfer111565309188Tphraseactiontargetspeak_phrasezlist[dict[str, Any]]_DEFAULT_TRIGGERS)frozenc                   @  s@   e Zd ZU ded< ded< dZded< dZded< dddZdS )BotActionTriggerstrr	   r
    r   Tboolr   textreturnc                 C  s"   t |}t | j}t|o||v S N)
_normalizer	   r   )selfr   hayneedle r   5/var/www/html/bot-asterisk-ari/backend/bot_actions.pymatches"   s   
zBotActionTrigger.matchesN)r   r   r   r   )__name__
__module____qualname____annotations__r   r   r   r   r   r   r   r      s   
 r   r   r   r   c                 C  sB   | pd   }td|}ddd |D }tdd|  S )uG   Minúsculas, sin acentos, espacios colapsados — para match tolerante.r   NFKDc                 s  s    | ]
}t |s|V  qd S r   )unicodedata	combining).0cr   r   r   	<genexpr>,   s    z_normalize.<locals>.<genexpr>\s+ )striplowerr"   	normalizejoinresub)r   rawnfkdwithout_accentsr   r   r   r   (   s   r   r/   	list[Any]list[BotActionTrigger]c                 C  s   g }| D ]?}t |tsqt|dpd }t|dpd  }|r(|s)q|t||t|dp5d t|ddd q|S )Nr	   r   r
   r   r   Tr   )	
isinstancedictr   getr)   r*   appendr   r   )r/   outitemr	   r
   r   r   r   _parse_items0   s"   
r:   settingsr   c              
   C  s  | j pd }|r8zt|}t|trt|}|r|W S W n tjy7 } zt	d| W Y d}~nd}~ww | 
| j}|rz*t|jdd}t|trat|}|rftd|t| |W S W ttS W ttS  ttjfy } zt	d|| W Y d}~ttS d}~ww ttS )z@Carga triggers: BOT_ACTION_TRIGGERS (JSON) > archivo > defaults.r   u&   BOT_ACTION_TRIGGERS JSON inválido: %sNzutf-8)encodingz*Bot action triggers cargados desde %s (%d)zNo se pudo leer %s: %s)bot_action_triggersr)   jsonloadsr4   listr:   JSONDecodeErrorloggererrorresolve_prompt_pathbot_action_triggers_file	read_textinfolenOSErrorr   )r;   inlinedatatriggersexcpathr   r   r   load_bot_action_triggersD   sH   



rO   rL   BotActionTrigger | Nonec                 C  s    |D ]}| | r|  S qdS )zAPrimera frase encontrada en el texto del bot (orden del archivo).N)r   )r   rL   triggerr   r   r   find_triggerd   s
   
rR   r	   c                 C  s>   |s| S t t |t j}|d| pd}t dd| S )zFQuita la frase trigger del texto a sintetizar (si speak_phrase=false).r(   r   r'   )r-   compileescape
IGNORECASEr.   r)   )r   r	   patterncleanedr   r   r   strip_phrase_from_speechn   s
   rX   )r   r   r   r   )r/   r2   r   r3   )r;   r   r   r3   )r   r   rL   r3   r   rP   )r   r   r	   r   r   r   )__doc__
__future__r   r>   loggingr-   r"   dataclassesr   typingr   configr   	getLoggerr   rB   r   r    r   r   r:   rO   rR   rX   r   r   r   r   <module>   s.    





 
