403Webshell
Server IP : 157.230.181.24  /  Your IP : 216.73.217.11
Web Server : Apache/2.4.58 (Ubuntu)
System : Linux conductive 6.8.0-117-generic #117-Ubuntu SMP PREEMPT_DYNAMIC Tue May 5 19:26:24 UTC 2026 x86_64
User :  ( 1000)
PHP Version : 8.3.31
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /proc/self/root/opt/aim-bots/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /proc/self/root/opt/aim-bots/__pycache__/aim_persona_bot.cpython-312.pyc
�

HA`j[�����dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddl
ZddlmZmZddlmZmZddlmZddlmZddlmZmZmZmZmZmZddlmZdd	l m!Z!dd
l"m#Z#ddl$m%Z%m&Z&ddl'm(Z(dd
l)m*Z*ddl+m,Z,m-Z-m.Z.m/Z/dZ0dZ1dZ2deddfd�Z3de4de4fd�Z5de4de4fd�Z6de4de4fd�Z7de4de4fd�Z8de4de4fd�Z9dejde:de:de:fd �Z;dejde<e:e:e=ffd!�Z>d"e4de<e4e4fdzfd#�Z?de4d$e@de4fd%�ZAGd&�d'�ZBGd(�d)�ZCGd*�d+�ZDGd,�d-�ZEGd.�d/�ZFGd0�d1�ZGde:fd2�ZHeId3k(r
eJeH���y)4uIAIM persona bot — voice-profile actors, typing delays, proactive pings.�N)�defaultdict�deque)�datetime�	timedelta)�Path)�ZoneInfo)�PersonaActor�SideChickActor�	WifeActor�MentorActor�StyleAdapter�build_system_prompt)�reply_coherent)�ReplyRetriever)�BuddyMemoryStore)�load_profile_from_voice�persist_aim_profile)�
TimingSampler)�BurstPlanner)�assistant_said_goodbye�fresh_conversation_prefix�looks_like_goodbye�looks_like_greetingzTic/Toc�i��path�returnc�^�|j�sy|j�j�D]{}|j�}|r|j	d�sd|vr�+|jd�\}}}tjj|j�|j���}y)N�#�=)	�exists�	read_text�
splitlines�strip�
startswith�	partition�os�environ�
setdefault)r�line�key�_�values     � /opt/aim-bots/aim_persona_bot.py�load_envr.(s����;�;�=����� �+�+�-�:���z�z�|���t���s�+�s�$������s�+�
��Q��
�
�
���c�i�i�k�5�;�;�=�9�:��screen_namec�B�|j�jdd�S)N� �)�lower�replace)r0s r-�	normalizer63s������&�&�s�B�/�/r/�textc���tjdd|�}tjdd|�}dD]\}}|j||�}�tjdd|�j�S)Nz
(?i)<br\s*/?>r2z<[^>]+>r3))�&lt;�<)�&gt;�>)�&amp;�&)z&quot;�"�\s+)�re�subr5r#)r7�src�dsts   r-�strip_aim_htmlrE7sf��
�6�6�"�C��.�D�
�6�6�*�b�$�'�D�S�&���S��|�|�C��%��&�
�6�6�&�#�t�$�*�*�,�,r/c��|s|S|jdd�}|jdd�jdd�}|jdd�jdd�}|S)zOTOC send_im wraps the payload in ASCII double quotes; inner " truncates the IM.r?�'u“u”u‘u’�r5)r7s r-�sanitize_outbound_textrI?sY������<�<��S�!�D��<�<��#�&�.�.�x��=�D��<�<��#�&�.�.�x��=�D��Kr/�passwordc	���g}t|�D]F\}}t|�tt|tt�z�z}|j	|d���Hddj|�zS)N�02x�0xr3)�	enumerate�ord�ROAST�len�append�join)rJ�result�i�ch�xoreds     r-�roast_passwordrXIsd��
�F��8�$�&���2��B��#�e�A��E�
�N�3�4�4���
�
��s��%�&��"�'�'�&�/�!�!r/c�>�dD]}|j|d|z�}�|S)Nz
\\$"(){}[]�\rH)r7rVs  r-�
escape_tocr[Qs*���+���|�|�B��r�	�*��+��Kr/�sock�
frame_type�seqc	���t|t�r|jd�n|}|dk(r|dz
}tjdd||t|��}|j
||z�|dzS)N�ascii���!BBHH�*�)�
isinstance�str�encode�struct�packrQ�sendall)r\r]r^�payload�data�headers      r-�	send_flaproWs^��&0��#�&>�7�>�>�'�"�G�D��Q������
�[�[��$�
�C��T��
C�F��L�L��$�����7�Nr/c�z�d}t|�dkr>|jdt|�z
�}|std��||z
}t|�dkr�>tjd|�\}}}}d}t|�|kr>|j|t|�z
�}|std��||z
}t|�|kr�>|||fS)Nr/�zConnection closedrc)rQ�recv�ConnectionErrorri�unpack)r\rn�chunkr+r]r^�lengthrls        r-�	recv_flaprw`s���
�F�

�f�+��/��	�	�!�c�&�k�/�*���!�"5�6�6��%���	�f�+��/�
"(���w��!?��A�z�3���G�

�g�,��
��	�	�&�3�w�<�/�0���!�"5�6�6��5���	�g�,��
�
�s�G�#�#r/r)c���|jd�r*|jdd�}t|�dk\r
|d|dfS|jd�r*|jdd�}t|�dk\r
|d|dfSy)	NzIM_IN:�:��rezIM_IN2:�rq)r$�splitrQ)r)�partss  r-�parse_imrqsy�����x� ��
�
�3��"���u�:��?���8�U�1�X�%�%����y�!��
�
�3��"���u�:��?���8�U�1�X�%�%�r/�personac	�h�t|�}|jdd�jdd�jdd�}|jdd�}|jd	d
�}|jdd�}|jd
d�}d|�d|�d|�d|�d�	}|jd�dk(r|Sd|�d|�d�S)Nr>r=r:r9r<r;�	font_facezTrebuchet MS�
font_colorz#0000ff�	font_size�1�body_bgcolorz#000080z
<FONT COLOR='z' FACE='z' SIZE=z
 LANG='0'>z</FONT>�	html_wrap�fontz<HTML><BODY BGCOLOR='z'>z</BODY></HTML>)rIr5�get)r7r��safe�face�color�size�bg�font_tags        r-�format_aim_htmlr�}s���!�$�'�D��<�<��W�%�-�-�c�6�:�B�B�3��O�D��;�;�{�N�3�D��K�K��i�0�E��;�;�{�C�(�D�	���^�Y�	/�B��u�g�X�d�V�7�4�&�
�4�&�PW�X�H��{�{�;��6�)���
"�2�$�b��
�.�A�Ar/c�6�eZdZdZdedefd�Zdedeefd�Zy)�MessageSplitter�r7rc��|j�}t|�|jkr|Sdj|d|j�S)Nr2)r}rQ�	MAX_WORDSrS)�selfr7�wordss   r-�
_trim_partzMessageSplitter._trim_part�s=���
�
����u�:����'��K��x�x��.����/�0�0r/c���d|vrR|jd�D�cgc]2}|j�s�|j|j����4c}dd}|Stjdd|j��}|sgSt|j��|jkr|gStjd|�}|D�cgc]2}|j�s�|j|j����4}}t|�dkr|j|�gSt|�dk\rtj�dkr|ddS|j|�gScc}wcc}w)	N�|rzr@r2z
(?<=[.!?])\s+rera��������?)r}r#r�rArBrQr��random)r�r7�pr~s    r-r}zMessageSplitter.split�s���$�;�9=���C��V�A�A�G�G�I�T�_�_�Q�W�W�Y�/�V�WY�XY�Z�E��L��v�v�f�c�4�:�:�<�0����I��t�z�z�|�����.��6�M����)�4�0��5:�H��a�g�g�i��������+�H��H��u�:��?��O�O�D�)�*�*��u�:��?�v�}�}���5���!�9������%�&�&��W��Is�E�!E�E�!EN)�__name__�
__module__�__qualname__r�rgr��listr}�r/r-r�r��s1���I�1�s�1�s�1�'�#�'�$�s�)�'r/r�c�@�eZdZdZdeddfd�Zdedefd�Zdeddfd�Zy)	�ConversationPresencez>Track keyboard presence and back-and-forth momentum per buddy.�voicerNc�~�||_|jdi�xsi|_t|jjdd��|_t|jd�xs.|jd�xs|jjd��|_tt�|_i|_	i|_
y)N�timing_profile�heat_thresholdg�������?�force_always_online�always_at_keyboard)r�r��profile�floatr��bool�force_onliner�heat�last_user_at�last_bot_at)r�r�s  r-�__init__zConversationPresence.__init__�s�����
��y�y�!1�2�6�<�"���#�D�L�L�$4�$4�5E�t�$L�M��� ��I�I�+�,�
6��y�y�-�.�
6��|�|��� 4�5�
���
'2�%�&8��	�.0���-/��r/�senderc���tj�}|jj|d�}|jj|d�}|r||z
nd}|r||z
nd}|j|dz}|r
|dkr|dz
}|r
|dkr|dz
}td|�}||j|<||j|<||jk\rd	}n|d
kr|dkrd}n|d
k\s|dk\rd}nd}|js|jjd�rd}	d}
nS||jk\rd}	d}
n?t|jjdd��}tj�|k}	|	}
|||	|
||d�S)N�g���@r��Zg�?�(�ffffff�?��?�hot�x�<�warmiX�,�coldr�TF�always_online_chancegffffff�?)�moder��at_keyboard�afk�
gap_since_bot�gap_since_user)�timer�r�r�r��minr�r�r�r�r�)r�r��now�	prev_user�prev_bot�gap_userr�r�r�r�r��
always_onlines            r-�register_user_messagez*ConversationPresence.register_user_message�s����i�i�k���%�%�)�)�&�#�6�	��#�#�'�'���4��&/�3��?�V��*2��h���
��y�y�� �4�'���
��*��C�K�D���B���D�L�D��3��~�� ��	�	�&��$'����&�!��4�&�&�&��D�
�S�
 �X��]��D�
�c�
!�X��_��D��D������� 0� 0�1E� F��K��C�
�T�(�(�
(��K��C�!�$�,�,�"2�"2�3I�4�"P�Q�M� �-�-�/�M�9�K�!�/�C���&��*�&�

�	
r/c�F�tj�|j|<y�N)r�r��r�r�s  r-�register_bot_sentz&ConversationPresence.register_bot_sent�s��#'�9�9�;����� r/)	r�r�r��__doc__�dictr�rgr�r�r�r/r-r�r��s?��H�0�d�0�t�0�,
�C�,
�D�,
�\/��/��/r/r�c	��eZdZddedededzddfd�Zdedzdefd�Zdd	ededzdefd
�Z	dd	ededzdefd�Z
ddededzd
edefd�Zddedzdefd�Zy)�TypingSimulatorN�wpm_min�wpm_maxr�rc�j�||_||_|xsi|_t|j�|_yr�)r�r�r�r�sampler)r�r�r�r�s    r-r�zTypingSimulator.__init__�s+���������}�"���$�T�\�\�2��r/�presencec��|xsdddd�S)Nr�TF)r�r�r�r�)r�r�s  r-�	_presencezTypingSimulator._presence�s���N�F�4��N�Nr/�incomingc	���|j|�}|jj|jdd�t	|�t|jd����S)Nr�r�r�)�incoming_lenr�)r�r��reply_delayr�rQr�)r�r�r�r�s    r-�
initial_delayzTypingSimulator.initial_delay�sQ���N�N�8�$���|�|�'�'�
�E�E�&�&�!��X���Q�U�U�5�\�"�(�
�	
r/c�,�|j||�dzS)Nr�)r�)r�r�r�s   r-�
read_delayzTypingSimulator.read_delay�s���!�!�(�H�5��<�<r/�outgoing�	msg_indexc���|j|�}|jdd�}|dkDr|jj||�S|jj	|||j
|j�S)Nr�r�r)r�r�r��	burst_gap�typing_delayr�r�)r�r�r�r�r�r�s      r-�
type_delayzTypingSimulator.type_delay�sa���N�N�8�$���u�u�V�V�$���q�=��<�<�)�)�$�	�:�:��|�|�(�(��4����t�|�|�T�Tr/c�|�|j|�}|jj|jdd�d�S)Nr�r�re)r�r�r�r�)r�r�r�s   r-�between_messagesz TypingSimulator.between_messagess2���N�N�8�$���|�|�%�%�a�e�e�F�F�&;�Q�?�?r/)r��nNr��Nr)
r�r�r��intr�r�r�rgr�r�r�r�r�r�r/r-r�r��s���3��3�3�3�t�d�{�3�^b�3�O�$��+�O�$�O�
�c�
�T�D�[�
�E�
�=�3�=�$��+�=��=�U�3�U�$��+�U�QT�U�]b�U�@����@��@r/r�c���eZdZdedej
ddfd�Zdedefd�Zddede	ddfd	�Z
dd
eededzde
dzdedzfd
�Zdddd�deede	de
dededzf
d�Zdededededeef
d�Zy)�	LLMClient�
system_prompt�logrNc���||_||_tjj	dd�|_tjj	dd�|_tjj	dd�|_tjj	dd�|_tjj	dd�|_	tjj	d	d
�|_
i|_y)N�OPENAI_API_KEYr3�GROQ_API_KEY�OPENROUTER_API_KEY�OPENAI_MODELzgpt-4o-mini�
GROQ_MODELzllama-3.1-8b-instant�OPENROUTER_MODELzgoogle/gemma-2-9b-it:free)r�r�r&r'r��
openai_key�groq_key�openrouter_key�model�
groq_model�openrouter_model�disabled)r�r�r�s   r-r�zLLMClient.__init__
s���*�������*�*�.�.�)9�2�>����
�
���~�r�:��
� �j�j�n�n�-A�2�F����Z�Z�^�^�N�M�B��
��*�*�.�.��7M�N��� "�
�
���/A�C^� _���*,��
r/�providerc�d�tj�|jj|d�kSr�)r�rr�)r�rs  r-�	_disabledzLLMClient._disableds$���y�y�{�T�]�]�.�.�x��;�;�;r/�secondsc�L�tj�|z|j|<yr�)r�r)r�rrs   r-�_disablezLLMClient._disables��"&�)�)�+��"7��
�
�h�r/�history�memory_context�temperaturec��|j}|r|�d|��}d|d�g|�}|�|nd}|j||��}|r	|dtSdS)N�

�system��role�content��(\���?)r	)r��_call_providers�
MAX_REPLY_LEN)r�rrr	r�messages�temp�replys        r-�chatzLLMClient.chatsh���#�#����x�t�N�#3�4�F�%�&�9�D�G�D��)�5�{�4���$�$�X�4�$�@��(-�u�^�m�$�7�4�7r/��gq=
ףp�?r��
max_tokensr	�tagrrrc��g}tjjdd�j�dv}tjjdd�j�dv}|jr<|jd�s+|r)|j
dd|j|jf�|jr<|jd�s+|s)|j
dd	|j|jf�|jr<|jd�s+|s)|j
dd|j|jf�|jr:|jd
�s)|j
d
d|j|jf�|D�]\}}	}
}||||d�}d
|
��ddd�}
|d
k(r
d|
d<d|
d<tjj|	tj |�j#�|
d��}	tjj%|d��5}tj&|j)�j+��}ddd�ddddj-�}t/j0dd|�}|j2j5d||�|r|cSdcSy#1swY�exYw#tj6j8$r�}|j2j;d |||j<�|j<d!vr|j?||dk(rd"nd#�n%|j<d$k(r|dk7r|j?|�Yd}~���d}~wt@$r)}|j2j;d%|||�Yd}~���d}~wwxYw)&N�SKIP_OPENAIr3>r��yes�true�PREFER_GROQr�groqz/https://api.groq.com/openai/v1/chat/completions�openaiz*https://api.openai.com/v1/chat/completions�
openrouterz-https://openrouter.ai/api/v1/chat/completions)r�rrr	zBearer zapplication/jsonz-Mozilla/5.0 (compatible; AIM-Persona-Bot/1.0))�
AuthorizationzContent-Typez
User-Agentzhttps://ceagon.comzHTTP-RefererzAIM Persona BotzX-Title�POST)rm�headers�method�-��timeout�choicesr�messagerr@r2z%s mode: %sz%s %s unavailable (%s)>����r�i�z%s %s failed: %s)!r&r'r�r4r�rrRr�r�r�r�r��urllib�request�Request�json�dumpsrh�urlopen�loads�read�decoder#rArBr��info�error�	HTTPError�warning�coder�	Exception)r�rrr	r�	providers�skip_openai�prefer_groqr�urlr*r��bodyr%�req�resprmr�excs                   r-rzLLMClient._call_providers$s���	��j�j�n�n�]�B�7�=�=�?�CW�W���j�j�n�n�]�F�;�A�A�C�G[�[���=�=�����!7�K����f�&W�Y]�Yf�Yf�hl�hw�hw�x�y��?�?�4�>�>�(�#;�K����h�(T�VZ�Ve�Ve�gk�gq�gq�r�s��=�=�����!7�����f�&W�Y]�Yf�Yf�hl�hw�hw�x�y����t�~�~�l�'C����l�,[�]a�]p�]p�rv�sH�sH�I�
J�)2�	I�%�H�c�3��"��
�cn�o�D�#*�3�%�� 2�M��G�
�<�'�*>���'�%6��	�"��.�.�(�(��4�:�:�d�3C�3J�3J�3L�V]�fl�(�m�C�
I��^�^�+�+�C��+�<�<���:�:�d�i�i�k�&8�&8�&:�;�D�<��Y���*�9�5�i�@�F�F�H�����v�s�E�2�����
�
�m�S�(�;� %�u�/�4�/�#	I�4�<�<���<�<�)�)�
,���� � �!9�3��#�(�(�S��8�8��.��M�M�(�H��4H�D�c�R��X�X��_��V�);��M�M�(�+����
I���� � �!3�S�(�C�H�H��
I�sD�0!J3�2J'�AJ3�!J3�'J0	�,J3�3N�A5M�N�M;�;N�friend_name�user_msg�	bot_reply�recent_contextc�N�d|�d|�d|�d|�d|�d|�d|�d�}|jd	|d
�gddd
��}|sgS|j�}|jd�rJtjdd|�j�}tjdd|�j�}	tj|�}t|t�sgS|D�	cgc]R}	t|	t�s�tt|	�j��dk\s�:t|	�j���Tc}	ddS#t
j$rbtjd|�}|sgcYS	tj|jd��}n#t
j$rgcYcYSwxYwY��wxYwcc}	w)Nz%Extract durable personal facts about aH from this AIM exchange.
Store things that would still matter days or weeks later: job, school, relationships, plans, problems, people, shows, health, life stuff.
Do NOT store: greetings, jokes, memes, game moment-to-moment, /b/ nonsense, one-word reactions, obvious sarcasm with no real info.
Write facts in third person about z (e.g. 'zz has work Tuesday 6-2').
Return ONLY a JSON array of strings, max 3 items. Use [] if nothing worth keeping.

Recent chat:
rz said: z
You replied: z

JSON array:�userr
�g333333�?�memoryrz```z
^```(?:json)?r3z```$z\[[\s\S]*\]r�rz)rr#r$rArBr3r6�JSONDecodeError�search�grouprfr�rgrQ)
r�rGrHrIrJ�prompt�raw�parsed�match�items
          r-�extract_memory_factszLLMClient.extract_memory_factsTs���4�K�=�A1�
2=�
�X�k�]�S�+�,�D��m�7�8�*�-�%�;�'�

�	��"�"���
0�1����	#�
����I��i�i�k���>�>�%� ��&�&�)�2�s�3�9�9�;�C��&�&��"�c�*�0�0�2�C�		��Z�Z��_�F��&�$�'��I�.4�n�d�
�4��8M�RU�VY�Z^�V_�Ve�Ve�Vg�Rh�lm�Rm��D�	���!�n�oq�pq�r�r���#�#�	��I�I�n�c�2�E���	�
����E�K�K��N�3����'�'�
��	�
���	��osH�"D*�
F"�#%F"�	F"�*-F�$E?�>F�?F�F�F�F�F)r�)NN)r�r�r�rg�logging�Loggerr�r�rr�rr�r�r�rrrXr�r/r-r�r�	s��	-�c�	-����	-�4�	-�<�#�<�$�<�8��8�s�8�T�8�8�D��J�8��d�
�8�X]�`d�Xd�8�ps�vz�pz�8��!��
.��t�*�.��	.�
�.��
.�

�t��.�`,s��,s��,s��	,s�
�,s�
�c��
,sr/r�c��eZdZdddeddfd�Zdd�Zdd�Zdefd	�Zd
eddfd�Zde	fd�Z
deefd
�Z
dedee	fd�Zdd�Zy)�ProactiveScheduler�bot�
PersonaBotr�rNc�v�||_||_t|jdd��|_|jdd�|_t
|jdd��|_|jdz|_	tj�|_tj|jdd	�
�|_y)N�timezonezAmerica/New_York�proactive_target�conan0fthenight�proactive_per_dayrzzproactive_state.jsonT�	proactive��target�daemon�name)r]r�rr��tzrfr��per_day�persona_dir�
state_path�	threading�Event�_stop�Thread�_run�thread)r�r]r�s   r-r�zProactiveScheduler.__init__�s��������
��5�9�9�Z�1C�D�E����i�i� 2�4E�F����5�9�9�%8�!�<�=����/�/�,B�B����_�_�&��
��&�&�d�i�i��;�W��r/c��|jdkr1|jjjd|j�y|jj�y)Nrz/proactive pings disabled (proactive_per_day=%s))rjr]r�r9rr�start�r�s r-rtzProactiveScheduler.start�sA���<�<�1���H�H�L�L���O�QU�Q]�Q]�^�������r/c�8�|jj�yr�)ro�setrus r-�stopzProactiveScheduler.stop�s���
�
���r/c��|jj�r-tj|jj	��SiSr�)rlr r3r6r!rus r-�_load_statezProactiveScheduler._load_state�s3���?�?�!�!�#��:�:�d�o�o�7�7�9�:�:��	r/�statec�d�|jjtj|d���y)Nra)�indent)rl�
write_textr3r4)r�r{s  r-�_save_statezProactiveScheduler._save_state�s�����"�"�4�:�:�e�A�#>�?r/c�^�tj|j�jd�S)Nz%Y-%m-%d)rr�ri�strftimerus r-�_todayzProactiveScheduler._today�s ���|�|�D�G�G�$�-�-�j�9�9r/c���	�|jdkrgStj|j�}g}t	|j
j
dd��}tj|d�}tjdd�}|j||dd��}||kr|td��z
}|j|�t|�|jkr�tjd	d
�}tjdd�}|j||dd���	�	|kr�	td��z
�	t�	fd�|D��r|j�	�t|�|jkr��t|�S)
Nr�late_night_start�r|�7)�hour�minute�second�microsecondre)�days���;c3�\�K�|]#}t�|z
j��dkD���%y�w)r/N)�abs�
total_seconds)�.0�t�	candidates  �r-�	<genexpr>z1ProactiveScheduler._plan_times.<locals>.<genexpr>�s(�����N�1�3�	�A�
�4�4�6�7�$�>�N�s�),)rjrr�rir�r�r�r��randintr5rrRrQ�all�sorted)
r�r��times�
late_start�	late_hour�late_min�later�r�r�s
         @r-�_plan_timeszProactiveScheduler._plan_times�s4����<�<�1���I��l�l�4�7�7�#����������(:�B�?�@�
��N�N�:�r�2�	��>�>�!�R�(���{�{�	�(�1�RS�{�T���3�;��I�1�%�%�D�
���T���%�j�4�<�<�'��>�>�"�b�)�D��^�^�A�r�*�F�����f�Q�TU��V�I��C���Y�A�.�.�	��N��N�N����Y�'��%�j�4�<�<�'��e�}�r/r�c��|rdnd}|jj|�xs|jjdddgg�}tj|�S)N�late_night_openers�wow_openers�supzu on?)r�r�r��choice)r�r�r*�pools    r-�_pick_openerzProactiveScheduler._pick_opener�sI��&*�"�
���z�z�~�~�c�"�W�d�j�j�n�n�]�e�W�EU�DV�&W���}�}�T�"�"r/c�H�|jj��sF	|j�}|j�}|j	d�|k7rl|j�}||D�cgc]}|j
���c}gd�}|j|�|jjjd|d�tj|j�}|j	dg�D�]7}||j	dg�vr�tj|�}||k\s�4|jt!|j"j	dd��k\xs2|jt!|j"j	dd	��k}|j%|�}|jjjd
|j&|�|jj)|j&|d��|j+dg�}	|	j-|�|j|���:	|jj3d�|jj�s��Eyycc}w#t.$r0}
|jjj1d
|
�Yd}
~
�rd}
~
wwxYw)N�date)r��planned�sentzplanned proactive pings: %sr�r�r�r��late_night_endrezproactive ping to %s: %sr3)r�zproactive scheduler error: %sr')ro�is_setrzr�r�r��	isoformatrr]r�r9rr�ri�
fromisoformatr�r�r�r�rf�
send_burstr(rRr>�	exception�wait)r�r{�todayr�r�r��planned_isor�rr�rFs           r-rqzProactiveScheduler._run�s$���*�*�#�#�%�
M��(�(�*�����
���9�9�V�$��-�"�.�.�0�G� %�;B�#C�a�A�K�K�M�#C� "��E�
�$�$�U�+��H�H�L�L�%�%�&C�U�9�EU�V��l�l�4�7�7�+��#(�9�9�Y��#;�
0�K�"�e�i�i���&;�;� �&�4�4�[�A�G��g�~�&�|�|�s�4�:�:�>�>�BT�VX�3Y�/Z�Z� �^e�^j�^j�nq� �J�J�N�N�+;�Q�?�o�_��$(�#4�#4�T�#:�������)�)�*D�d�k�k�S[�\����+�+�D�K�K��B�+�O�$�/�/���;�����K�0��(�(��/�
0� 
�J�J�O�O�B��?�*�*�#�#�%�%��$D��*�
M������&�&�'F��L�L��
M�s2�A	I(�&I#�=B$I(�"DI(�#I(�(	J!�1&J�J!�rN)r�r�r�r�r�rtrxrzrrgr�r�rr�r�r�rqr�r/r-r\r\�s���X�L�X��X�$�X����T��
@��@�$�@�:��:��T�(�^��,#��#�$�s�)�#�
  r/r\c��eZdZdeddfd�Zd!d�Zd!d�Zdedefd�Z	ded	ed
e
defd�Zdededdfd
�Z
dededee
eedzffd�Zd"deededefd�Z			d#deded	ededzdededzdeeeeefdzfd�Zdededdfd�Z				d$dedeeded	edzdedzdeddfd�Zdeded	ededzdededdfd�Zdeddfd�Zd!d �Zy)%r^rkrNc
��||_tj|dzj��|_|dz}|j�r#tj|j��ni|_t�}|jdj�|vrYd|jd<d|jd<|jjdi�}t|t�rd|d<d|d	<d
|d<t|j|j�|_
t|jtj |jd��|_|jj%d�d
k(s|jj%d�d
k(r&t'|j|j�|_n�|jj%d�dk(s|jj%d�dk(r&t+|j|j�|_n�|jj%d�dk(s|jj%d�dk(r&t-|j|j�|_n%t/|j|j�|_t1|j�|_t5�|_t9|j�|_|dz}t=|jj%dd��}t?||��|_ tC|j|j�|_"tG|jj%d��|_$|jj%dd�|_%tM||jj%dd�tO|jj%dd����|_(tStO|jj%dd��tO|jj%dd��|jj%d��|_*tVjXj%dd�|_-tOtVjXj%d d!��|_.tVjXj%d"d#�|_/tVjXj%d$d%�|_0|jd|_1tVjXd&|_2|jj%d'|jb�|_3d|_4d(|_5d)|_6tojp�|_9tud*��|_;tutnjp�|_<i|_=tutN�|_>tutnj~�|_@tut��|_BtOtVjXj%d+|jj%d,d-���d.z|_CtOtVjXj%d/|jj%d0d1���d.z|_Dtj |jb�|_E|j�j�d2|jj%d3�|jj%d4�|jj%d5�|j�d.z|j�d.z�t�||j�|_Hd)|_Iy)6Nzpersona.jsonz
voice.jsonr0Tr�r�r�r�r�r��
afk_chance�persona_kind�wife�mentor�
side_chickz
pairs.json.gz�retriever_min_ratiog
ףp=
�?)�	min_ratio�memory_enabledrG�Caleb�memory_max_facts�2)rG�	max_facts�typing_wpm_minr��typing_wpm_maxr��TOC_HOSTz	127.0.0.1�TOC_PORT�9898�
OSCAR_HOSTz157.230.181.24�
OSCAR_PORT�5190�OSCAR_PASSWORD�display_namerFc�"�tt��S)N)�maxlen)r�MAX_HISTORYr�r/r-�<lambda>z%PersonaBot.__init__.<locals>.<lambda>s��U�+�=V�r/�SESSION_RESET_MINUTES�session_reset_minutes�%r��FRESH_TOPIC_MINUTES�fresh_topic_minutesr|z<appearance: %s %s on %s (session reset %dm, fresh topic %dm)r�r�r�)Jrkr3r6r!r�r r��load_always_online_squadr4r(rfr�rr�r�rY�	getLogger�llmr�r�actorrr
r	r
�styler��splitterr�r�r�r�	retrieverr�
burst_plannerr�timing_samplerr�rr�rNr��typingr&r'�host�port�
oscar_host�
oscar_port�usernamerJr�r\�seq_out�	signed_onrm�Lock�	send_lockrr�history_lock�last_message_at�burst_generationrn�burst_cancelr��conversation_closed�
session_reset�fresh_topicr�r9r\rd�_proactive_running)r�rk�
voice_path�squad�tp�
pairs_pathr�s       r-r�zPersonaBot.__init__�s6��&����z�z�;��#?�"J�"J�"L�M��� �<�/�
�;E�;L�;L�;N�T�Z�Z�
� 4� 4� 6�7�TV��
�(�*���<�<�
�&�,�,�.�%�7�04�D�J�J�,�-�/3�D�J�J�+�,����&�&�'7��<�B��"�d�#�+/��'�(�-0��)�*�#&��<� �0����t�z�z�J����T�/�/��1B�1B�4�<�<�P]�C^�1_�`����:�:�>�>�.�)�V�3�t�|�|�7G�7G��7W�[a�7a�"�4�<�<����<�D�J�
�Z�Z�^�^�N�
+�x�
7�4�<�<�;K�;K�N�;[�_g�;g�$�T�\�\�4�:�:�>�D�J�
�Z�Z�^�^�N�
+�|�
;�t�|�|�?O�?O�P^�?_�co�?o�'����d�j�j�A�D�J�%�d�l�l�D�J�J�?�D�J�!�$�*�*�-��
�'�)��
�,�T�Z�Z�8��
� �?�2�
��$�*�*�.�.�)>��E�F�	�'�
�i�H���)�$�*�*�d�l�l�C���+�D�J�J�N�N�;K�,L�M���"�j�j�n�n�-=�t�D���&���
�
���}�g�>��$�*�*�.�.�);�R�@�A�
���
&���
�
���/��4�5���
�
���/��5�6��J�J�N�N�+�,�
����J�J�N�N�:�{�;��	���
�
���z�6�:�;��	��*�*�.�.��7G�H����*�*�.�.��v�>������]�3��
��
�
�#3�4��
� �L�L�,�,�^�T�]�]�K���*.��	�������"���)���)4�5V�)W���7B�9�>�>�7R���13���0;�C�0@���8C�I�O�O�8T���4?��4E�� � ������0G������Xo�qs�It�!u�v�y{�{����r�z�z�~�~�.C�T�Z�Z�^�^�Ti�kl�Em�n�o�rt�t����$�$�T�]�]�3������
�
�J��L�L���\�*��L�L���[�)��L�L���^�,����"�$�����"�
	
�,�D�$�*�*�=���"'��r/c
��tj|j|jfd��|_|jjd�t
|j�\}}}|dk7rtd|����t|j�jd�}t|jddtjdddt|��|z�|_t!|j"�}d	|j$�d
|j&�d
t|j��d
|�d|j(�d�}t|jd
|j|�|_t+j*�dz}d|_t+j*�|kr�|jj/d
�	t
|j�\}}}|d
k7r�R|j3dd��}|j5d�rd|_n|j5d�rt|��t+j*�|kr��|j,std��t7|j8j;d�xsg�}	|j8j;dd�}
|
r5t|
�|	D�chc]
}t|���c}vr|	j=|
�|	rtdd
j?d�|	D��z}t|jd
|j|�|_|j@jCddj?d�|	D���t|jd
|jd�|_|jj/d�|jE�|j@jCd|j(�y#tj0$r|j,rY���Y��XwxYwcc}w) Nr�r(s
FLAPON

rezExpected SIGNON frame, got r`rz!IHHztoc_signon r2z english "TIC:r?ra�Fr5��errorszSIGN_ON:T�ERROR:zSign-on timed out�buddy_subscriptionsrarbztoc_add_buddy c3�2K�|]}t|����y�wr��r6�r��bs  r-r�z%PersonaBot.connect.<locals>.<genexpr>Ys����3O�Q�I�a�L�3O���zsubscribed to buddies: %sz, c3�2K�|]}t|����y�wr�r�r�s  r-r�z%PersonaBot.connect.<locals>.<genexpr>[s����@\�RS��1��@\�r��
toc_init_donezonline as %s)#�socket�create_connectionr�r�r\rkrw�RuntimeErrorr6r�rhrorirjrQr�rXrJr�r�r�r�r��
settimeoutr)r8r$r�r�r�rRrSr�r9�_apply_aim_profile)
r�r]r+�sn�roasted�cmd�deadlinerlr)�subsrfr��	buddy_cmds
             r-�connectzPersonaBot.connect/s���,�,�d�i�i����-C�S�Q��	��	�	���+�,�$�T�Y�Y�/��
�A�q���?��!<�Z�L�I�J�J�
�t�}�}�
%�
,�
,�W�
5�� ����A�q�&�+�+�f�a��C�PR�G�2T�WY�2Y�Z��� ����/���$�/�/�*�!�D�O�O�+<�A�����'�(��'��/�$�BS�BS�AT�TV�
X�	�!����A�t�|�|�S�A����9�9�;��#������i�i�k�H�$��I�I� � ��#�
�)2�4�9�9�)=�&�
�A�w�
�Q����>�>�'�)�>�<�D����z�*�!%�������*�"�4�(�(��i�i�k�H�$��~�~��2�3�3��D�J�J�N�N�#8�9�?�R�@������� 2�4E�F���i��'�d�/K��	�!��/K�K��K�K����(�3�8�8�3O�$�3O�+O�O�I�$�T�Y�Y��4�<�<��K�D�L��H�H�M�M�5�t�y�y�@\�W[�@\�7\�]� ����A�t�|�|�_�M����	�	���T�"����!����
�
�n�d�&7�&7�8��7�>�>�
��>�>���
��"0Ls�-N-�O�-O�Oc
���t|j|j�}|�rWttj
j
dd��}	t|j||��|jjdt|��t|�}t|j d|j"d|�d��|_|jjd	t|��|j j%d
�	t'|j �\}}}|dk(r@|j)dd�
�}|j+d�r|jjd|�|j j%d�|jj
d�}	|	r^t|j d|j"dt|	j5���d��|_|jjd�yy#t$r'}|jjd|�Yd}~���d}~wwxYw#t,j.t0t2f$rY��wxYw#|j j%d�wxYw)N�OSCAR_DBz/var/lib/ras/oscar.sqlite)�db_pathz&persisted AIM profile to DB (%d chars)z#could not persist profile to DB: %sraztoc_set_info "r?zset live AIM profile (%d chars)r�r`r5r�r�ztoc_set_info error: %s�away_messageztoc_set_away "zset away message)rr�r�rr&r'r�rr�r�r9rQr>r<r[ror\r�rrwr8r$rr)rs�OSErrorr#)
r��profile_htmlrrF�escapedr]r+rlr)�aways
          r-rzPersonaBot._apply_aim_profilebs���.�t�z�z�4�<�<�H����2�:�:�>�>�*�6Q�R�S�G�
M�#�D�M�M�<��Q����
�
�F��L�HY�Z�!��.�G�$�T�Y�Y��4�<�<�>�RY�QZ�Z[�A\�]�D�L��H�H�M�M�;�S��=N�O��I�I� � ��%�	
+�)2�4�9�9�)=�&�
�A�w���?�"�>�>�'�)�>�D�D����x�0����(�(�)A�4�H��	�	�$�$�T�*��z�z�~�~�n�-���$��	�	�1�d�l�l�n�Z��
�
��=U�<V�VW�,X��D�L�
�H�H�M�M�,�-�	��#�
M���� � �!F��L�L��
M���N�N�O�W�=�
��
���	�	�$�$�T�*�s=�=G7�AH*�7	H'�H"�"H'�*I�I�
I�I�I+r�c���|j|xxdz
cc<|j|j�tj�|j|<|j|S)zLCancel any in-flight burst/compose for this buddy; return new generation id.re)r�r�rwrmrnr�s  r-�_interrupt_replyzPersonaBot._interrupt_reply�sW�����f�%��*�%����&�!�%�%�'�$-�O�O�$5����&�!��$�$�V�,�,r/�
generationrc�d�tj�|z}tj�|krq|j||k7ry|tj�z
}|dkrnA|j|jt	d|���tj�|kr�q|j||k(S)NFrg���Q��?r()r�r�r�r�r�)r�r�rrr	�	remainings      r-�_wait_or_abortzPersonaBot._wait_or_abort�s����9�9�;��(���i�i�k�H�$��$�$�V�,�
�:�� �4�9�9�;�.�I��A�~�����f�%�*�*�3�t�Y�3G�*�H�
�i�i�k�H�$��$�$�V�,�
�:�:r/�reasonc�&�|j|j�||jjvr|jj|=d|j|<d|j
j|<|jjd||�y)NFr�zconversation reset for %s (%s))	r�clearr��statesr�r�r�r�r9)r�r�rs   r-�_reset_conversationzPersonaBot._reset_conversation�st�����V��"�"�$��T�Z�Z�&�&�&��
�
�!�!�&�)�+0�� � ��(�%(��
�
���6�"����
�
�6���Gr/r�c��tj�}|jj|d�}|r||z
nd}|xsdj�}t	|j
|�}d}d}	|r||jk\r
d}d|dzd�d�}	nb|r||jk\r
d}d	|dzd�d�}	nD|r|d
k\rt|�rd}d}	n-|j|r
|dk\rd}d
}	nt|�r	|dk\rd}d}	||j|<|r&|j||	�|rt|�nd}
|d|
fSt|�rd|j|<|ddfS)z;Returns (gap_seconds, fresh_session, ephemeral_llm_prefix).r�r3FTzidle r�z.0f�mzgap r�zgreeting after pauser'z
after goodbyezafter sign-offN)r�r�r�r#r�rr�r�rr�rrrr)r�r�r�r��last�gap�cleanr�resetr�prefixs           r-�_apply_session_timingz PersonaBot._apply_session_timing�sh���i�i�k���#�#�'�'���4�� �c�D�j�c����R�&�&�(���t�|�|�F�+�,�������C�4�-�-�-��E��S�2�X�c�N�!�,�F�
�c�T�-�-�-��E��C�"�H�S�>��+�F�
�c�R�i�$7��$>��E�+�F�
�
%�
%�f�
-�#��)��E�$�F�
#�G�
,�����E�%�F�'*����V�$���$�$�V�V�4�7;�.�s�3��F���f�$�$��e�$�/3�D�$�$�V�,��E�4��r/r�nc�z�|jjdd�}|jjd|j�}g}||dD]^}|ddk(r|n|}|dj	d�d}|jd	�s|jd
�r�I|j
|�d|����`dj|�S)NrGr�r�rrLr�
���z[Aboutz[Similarz: )r�r�r�r�r}r$rRrS)	r�rr(�friendrh�lines�msg�whors	         r-�_format_recent_contextz!PersonaBot._format_recent_context�s��������
�w�7���|�|�����
�
�>�����A�2�3�<�	.�C���K�6�1�&�t�C��)�n�*�*�4�0��4�G��!�!�(�+�w�/A�/A�*�/M���L�L�C�5��7�)�,�-�	.��y�y���r/r+�session_prefix�
fresh_sessionr�c
�,
�t|�xs|}|xsijdd�}|j|5|j||k7r
	ddd�y|j|}	|	jd|d��|	D�
cgc]
}
t
|
���}}
|}|r
|r|�d|��}n|rtd��d|��}d|d�|d<d}
|jr|s|jj|�}
|jj|�xr|jjd�d	k7}t|	�}ddd�d}}|jj r8|s6|d
k7r1|jj#|��}|r|ddd�d|�d
�d�gz}d}|jj rP|sN|d
k7rI|jj%|��}|r*t'|||�s|j(j+d�d}|r8|j(j+d�|j,j/|�}�nr|j0j3|
t5|jjdd����}|r7|j(j+d�|j,j/|�}n�|jj r�|d
k7r�|jj%|d��}|rt'|||�sd}|r7|j(j+d�|j,j/|�}nu|j(j+d�|j6j9||||��}n:|j(j+d�|j6j9||||��}|j|5|j||k7rN|j|r5|j|dddk(r|j|j;�	ddd�y|j<j?|||��}|j||k7rN|j|r5|j|dddk(r|j|j;�	ddd�y|j@jC|�}djE|�}|j|jd|d��tG|�rd|jH|<|||fcddd�Scc}
w#1swY���xYw#1swYyxYw)Nr�r�rLr
r*rr+r�r�r�)rz

[�]z6reply mode: retriever rejected (incoherent for thread)z%reply mode: retriever (archive match)�llm_temperaturer)rr	zreply mode: llmT)r�relaxedzreply mode: retriever-relaxedzreply mode: actor)�	time_hintr2r)�hesitatez | �	assistant)%rEr�r�r�rrRr�rr�rN�format_for_promptr��should_hesitater�r�r��index�hint_for_llm�
best_replyrr�r9r�r}r�rr�r�r�popr��planr��	apply_allrSrr�)r�r�r+rr1r2r�r$r�rr!�llm_history�llm_userrr8�
hist_snapshot�retriever_hint�	llm_input�	retrievedr~r�
reply_texts                      r-�
compose_partszPersonaBot.compose_parts�s����w�'�2�7����B�#�#�F�F�3��
�
�
�v�
&�	*��$�$�V�,�
�:��	*�	*��l�l�6�*�G��N�N�F�u�=�>�,3�4�q�4��7�4�K�4��H���,�-�R��w�7���7��:�;�2�e�W�E��'-�(�C�K��O�!�N��"�"�=�!%���!>�!>�v�!F���*�*�:�:�4�@�m�T�Z�Z�^�^�Tb�Ec�gm�Em�H� ��M�M�)	*�.���	��>�>���
�$�%�-�!�^�^�8�8��
�8�V�N��'���,�#�8�*�E�.�AQ�QR�0S�T�0��	��	��>�>���
�$�%�-����1�1�%��1�O�I����y�-�!P����
�
�V�W� �	���H�H�M�M�A�B��M�M�'�'�	�2�E��H�H�M�M��-�!�$�*�*�.�.�1B�D�"I�J�"��E�
����
�
�/�0��
�
�+�+�E�2�����%�%�$�%�-� �N�N�5�5�e�]�\`�5�a�	��^�E�9�m�%T� $�I���H�H�M�M�"A�B� �M�M�/�/�	�:�E��H�H�M�M�"5�6� �J�J�,�,��#�"0�&3�	-��E����
�
�1�2��
�
�(�(���,�"/�	)����
�
�v�
&�	,��$�$�V�,�
�:��<�<��'�D�L�L��,@��,D�V�,L�PV�,V��L�L��(�,�,�.��		,�	,��&�&�+�+�E�5�$��+�R�E��$�$�V�,�
�:��<�<��'�D�L�L��,@��,D�V�,L�PV�,V��L�L��(�,�,�.��	,�	,��J�J�(�(��/�E����E�*�J��L�L�� �'�'���(T�U�!�*�-�37��(�(��0��%��+�%	,�	,��I5�	*�	*��V	,�	,�s?�S=�'S=�9S8�BS=�#AT
�A6T
�A+T
�8S=�=T�
T�	recipientc�J�|jsyt||j�}t|�}|j5t|jd|jdt|��d|�d��|_ddd�|jjd||�y#1swY�'xYw)Nraztoc_send_im z "r?z	-> %s: %s)
r\r�r�r[r�ror�r6r�r9)r�rJr+�htmlr.s     r-�_send_im_nowzPersonaBot._send_im_now7s����y�y���w����5������
�^�^�	�$��	�	�1�d�l�l�l�9�Y�;O�:P�PR�SV�RW�WX�,Y��D�L�	�	
���
�
�k�9�g�6�		�	�s�8B�B"r~�skip_initial_delayc	���|�|n|j|}|jj|�}|r�|s~|jj	||�}|j
j
d||xsijdd�|�|j|||�s|j
j
d|�yt|�D�]	\}	}
|j||k7r)|j
j
d||	t|��y|	dkDrW|jj|�}|j|||�s)|j
j
d||	t|��y|jj|
||	��}|j|||�s)|j
j
d||	t|��y|j||
���|jj|�y)Nz timing %s: mode=%s initial=%.1fsr��?z)burst aborted during initial delay for %sz$burst interrupted for %s after %d/%dr)r�)r�r�rAr�r�r�r9r�rrNrQr�r�rMr�r�)
r�rJr~r�rr�rN�gen�delayrU�partr#�typeds
             r-r�zPersonaBot.send_burstBs���'�2�j��8M�8M�i�8X���
�
�$�$�U�+���.��K�K�-�-�h��A�E��H�H�M�M�<�i�(�.�VX�I]�I]�^d�fi�Ij�lq�r��&�&�y�#�u�=����
�
�I�9�U�� ��'�
	/�G�A�t��$�$�Y�/�3�6����
�
�D�i�QR�TW�X]�T^�_���1�u��k�k�2�2�8�<���*�*�9�c�3�?��H�H�M�M�"H�)�UV�X[�\a�Xb�c���K�K�*�*�4��Q�*�G�E��&�&�y�#�u�=����
�
�D�i�QR�TW�X]�T^�_�����i��.�
	/�	
�
�
�'�'�	�2r/c�:�	t|�xs|}|j||||||��}|s|jjd||�y|\}	}
}|j	||	|||d��|j
rl|	ri|j|5|jt|j|��}ddd�|jj|j||
|�yyy#1swY�5xYw#t$r'}
|jjd||
�Yd}
~
yd}
~
wwxYw)N)r1r2r�z!no reply composed for %s (gen=%s)T)r�rr�rN�failed to respond to %s: %s)rErIr�r<r�r�r�r0r�rrN�learn_asyncr�r>r�)r�r�r+rr1r2r�r$rTr~�
user_clean�bot_text�contextrFs              r-�_respond_asynczPersonaBot._respond_asynccs8��!	K�"�7�+�6�w�E��'�'����-�+�!�
(��F����� � �!D�f�j�Y��*0�'�E�:�x��O�O����%�!�#'�

�
��"�"�u��&�&�v�.�V�"�9�9�$�t�|�|�F�?S�:T�U�G�V����'�'��H�H������(-�"�V�V���	K��H�H���<�f�c�J�J��	K�s6�AC*�:C*�(C�*1C*�C'�#C*�*	D�3D�Dr)c���������t|�}|sy|\��t��t�j�k(ryt��xs���jjd���t����j
����jj���t��xs��d������fd�}tj|dd��d�����j�y)Nz	<- %s: %sc
�D��	�	j�
5�	j�
��\}}}ddd��	jj���}�	jjd�
�j
d��j
dd�|�j
d���	j�
�|�s�	jjd�
�y�	j�
��|��y#1swY��xYw#t$r'}�	jjd�
|�Yd}~yd}~wwxYw)Nz7timing %s: mode=%s heat=%.2f read=%.1fs afk=%s fresh=%sr�r�rr�z)reply aborted during initial delay for %srV)r�r'r�r�r�r9r�rr[r>r�)r#�freshr1�initialrFr$rr+r�r�r�s     ������r-�runz#PersonaBot.handle_line.<locals>.run�s���
O��&�&�v�.�[�15�1K�1K�F�TY�1Z�.�C���[��+�+�0�0���A�����
�
�M���L�L��(��L�L���+���L�L��'����*�*�6�:�w�G��H�H�M�M�"M�v�V���#�#�F�G�Z��QV�X`�a�[�[�� �
O����"�"�#@�&�#�N�N��
O�s4�C/�C#�B"C/�C/�#C,�(C/�/	D�8D�DTzreply-�-rer�)rr6r�rEr�r9rr�r�rmrprt)	r�r)rUr`r$rr+r�r�s	`   @@@@@r-�handle_linezPersonaBot.handle_line�s�����$����� �����V��	�$�-�-� 8�8���w�'�2�7�����
�
�k�6�5�1��6�"���*�*�6�2�
��=�=�6�6�v�>���w�'�2�7��	O�	O�*	������&���:�,�/�	
��%�'r/c��d}		|j�|js!|jj�d|_d}t	j�}t|jjdd��}		|jjd�t|j�\}}}t	j�}|jjd�|dk(r�k|dk(r"|j!|j#d	d
�����#tj$rDt	j�|z
|k\r'|jjd|�td��Y��wxYw#t$$r�}|jj'd|�|jj)�d
|_|jr+	|jj+�n#t,$rYnwxYwd|_d|_t	j0|�t3|dzd�}t5||j�|_Yd}~nd}~wwxYw��?)Nr|T�idle_reconnect_seci�
r�u)no TOC traffic for %.0fs — reconnectingzidle timeoutrar`r5r�zconnection error: %sFrr�)rr�rdrtr�r�r�r�r\rrwrr)r�r<rsrbr8r>r�rx�closerr��sleepr�r\)r��backoff�
last_frame�idle_reconnectr]r+rlrFs        r-�run_foreverzPersonaBot.run_forever�s������$
F������.�.��N�N�(�(�*�.2�D�+���!�Y�Y�[�
�!&�t�z�z�~�~�6J�D�'Q�!R���!��	�	�,�,�S�1�1:�4�9�9�1E�.�
�A�w�%)�Y�Y�[�
��I�I�(�(��.�!�Q�� �!�Q���(�(�����	��)R�S���
"�>�>�!��9�9�;��3�~�E� �H�H�,�,�-X�Zh�i�"1�.�"A�A� �	!���

F����"�"�#9�3�?����#�#�%�*/��'��9�9���	�	���)��"����� ��	� ����
�
�7�#��g��k�2�.��!3�D�$�*�*�!E�����

F��1se�A9E*�?AD�A	E*�AE'�$E*�&E'�'E*�*	H>�3A	H9�=G�H9�	G$�!H9�#G$�$AH9�9H>r�)rO)NFN)r3NNF)r�r�r�rr�rrrgr�rr�r�rr�tupler'r�r�r0rIrMr�r[rbrjr�r/r-r^r^�s+��L(�D�L(�T�L(�\19�f.�<-�s�-�s�-�	;�S�	;�c�	;�E�	;�d�	;�H�#�H�s�H�t�H�$ �C�$ �3�$ �5��PT�VY�\`�V`�I`�Ca�$ �L
 �d�4�j�
 �S�
 ��
 �"&*�#� $�i,��i,��i,��	i,�
�d�
�i,��
i,���+�i,�
�t�C�y�#�s�"�	#�d�	*�i,�V	7�c�	7�C�	7�D�	7��!%� $�#(�3��3��C�y�3��	3�
�$�J�3���+�
3�!�3�
�3�B*K��*K��*K��	*K�
�d�
�*K��
*K��*K�
�*K�X(��(��(�T'Fr/r^c��ttj�dkrtdtj��yttjd�}t
|dz�t
td��tjtjdtjtj�g��d	tjvrtjd
�yt|�j!�y)Nraz'Usage: aim_persona_bot.py <persona_dir>)�filerezbot.envz/opt/aim-bots/shared.envz.%(asctime)s %(name)s %(levelname)s %(message)s)�level�format�handlersr�zMissing OSCAR_PASSWORDr)rQ�sys�argv�print�stderrrr.rY�basicConfig�INFO�
StreamHandler�stdoutr&r'r:r^rj)rks r-�mainry�s���
�3�8�8�}�q��
�7�c�j�j�I���s�x�x��{�#�K��[�9�
$�%��T�,�
-�.�����l�l�?��'�'��
�
�3�4��
�r�z�z�)��
�
�.�/���{��'�'�)�r/�__main__)Kr�r3rYr&r�rArrirqrmr��urllib.errorr0�urllib.request�collectionsrrrr�pathlibr�zoneinfor�
persona_actorr	r
rrr
r�	coherencer�reply_retrieverr�buddy_memoryr�aim_profilesrrr�rr�r�conversation_contextrrrrrPr�rr.rgr6rErIrXr[r�rork�bytesrwrr�r�r�r�r�r�r\r^ryr��
SystemExitr�r/r-�<module>r�s���O���	�
�	�
�
�
�����*�(���q�q�$�*�)�E�(�&���	�����
�:�4�:�D�:�0�3�0�3�0�-��-��-������"�S�"�S�"��S��S���F�M�M��s����#��$�F�M�M�$�e�C��e�O�&<�$�"	�3�	�5��c��?�T�1�	�B�#�B��B��B�'�'�6?/�?/�D@�@�Bws�ws�tZ �Z �z@F�@F�F
�c�
�&�z��
�T�V�
��r/

Youez - 2016 - github.com/yon3zu
LinuXploit