
    h              	          d dl Z d dlmZmZmZmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZ d d
lmZ d dlmZ d dlmZmZ d dlm Z m!Z!m"Z" d dl#m$Z$ d dl%m&Z&  e       Z'e'jQ                   ed            dejR                  dedefd       Z*e'jQ                   e             dejR                  dededdfd       Z+e'jQ                  e$jX                        dejR                  dededdfd       Z-e'j]                  ej^                  ja                  d      e$jb                        dejd                  dededdfd       Z3e'jQ                  e$jh                        dejR                  dededdfd       Z5e'j]                  ej^                  ja                  d      e$jl                        dejd                  dededdfd       Z7e'j]                  ej^                  ja                  d      e$jp                        dejd                  dededdfd        Z9e'j]                  ej^                  ja                  d!      e$jt                        dejd                  dededdfd"       Z;e'j]                  ej^                  ja                  d#      e$jx                        dejd                  dedefd$       Z=e'j]                  ej^                  ja                  d%      e$j|                        dejd                  dededdfd&       Z>g d'Z?dejR                  dedefd(Z@e'j]                  ej^                  d)k(        dejd                  defd*       ZAe'j]                  ej^                  d+k(        dejd                  defd,       ZBe'j]                  ej^                  d-k(        dejd                  defd.       ZCe'jQ                  e$j                        dejR                  dedefd/       ZEdefd0ZFe'jQ                  e$j                        dejR                  dedefd1       ZHe'jQ                  ej                        dejR                  dedefd2       ZJy)3    N)RoutertypesFBot)
ChatAction)TelegramBadRequest)CommandStartCommand)
FSMContext)InlineKeyboardBuilder)sessionmaker)create_userget_userdelete_userget_user_perm)	UserAddDB)client)add_new_userdelete_user_from_sheet)save_user_strategyget_user_strategyupdate_user_strategy)CreateUserFSM)_
clear_usermessagesession_makerbotc                   K   | j                  d       d {   }t        | j                  j                  |       d {    t	        | j                  j                         d {    	 t        | j                  dd      D ]1  }|j                  | j                  j                  |       d {    3 	 |j                          d {    y 7 7 7 n7 &# t        $ r$}|j                  dk(  rt        d       Y d }~Id }~ww xY w7 =w)Nu   очистка...r   )chat_id
message_idz(Bad Request: message to delete not foundu(   Все сообщения удалены)answerr   chatidr   ranger"   delete_messager   r   printdelete)r   r   r   msgiexs         /app/bot/handlers/main.py	cmd_clearr.      s      C glloo}
555
 
111	>w))1b1A$$A % 7 7 7 2 **,% 617 > ::CC<=	> s{   DC'DC &D&C'D,AC 0C1C 7DD	DDDC 	D"D<DDDstatereturnc                   K   t        | j                  j                  |       d {   }t        |       |s| j	                  d       d {    y t        | j                  j                  |       d {   }|| j	                  t        d| j                  j                  |       d {          d {    | j	                  t        d| j                  j                  |       d {          d {    |j                  t        j                         d {    y | j	                  d       d {    |j                  t        j                         d {    y 7 ?7 7 7 7 7 7 {7 V7 >7 w)Nu    У вас нет доступа!START_MESSAGEMSG_QUESTION_NAMEu-   Вы уже зарегистрированы!)r   	from_userusernamer(   r#   r   r$   r%   r   	set_stater   namefinish)r   r   r/   permusers        r-   	cmd_startr;   -   sM    w0099=IID	$Knn.
 	
 	
 	',,//=99D|nnOW\\__mDD
 	
 	
 nn'-HH
 	
 	
 oom00111nn;
 	
 	
 oom22333) J	
 : E	
 I	
 	2	
 	4s   $E;E%%E;E((E;5E+65E;+E-,E;7E/83E;+E1,E;7E38&E;E5E;8E79&E;E9 E;(E;+E;-E;/E;1E;3E;5E;7E;9E;c           	        K   |j                  | j                         d {    |j                  t        j                         d {    t               }|j                  t        j                  t        d| j                  j                  |       d {   d             |j                  t        j                  t        d| j                  j                  |       d {   d             | j                  t        d| j                  j                  |       d {   |j                                d {    y 7 !7 7 7 f7 *7 w)	N)r7   MAN
gender_MANtextcallback_dataWOMENgender_WOMENMSG_QUESTION_GENDERreply_markup)update_datar@   r6   r   genderr   rowr   InlineKeyboardButtonr   r$   r%   r#   	as_markup)r   r/   r   gender_markups       r-   	name_userrM   F   s    




...
//-..
///)+M""??&	
 ""',,//=AA(	
 ..%w||FF",,.     // @ B
 	Gsk    EE&E	E
AEEAE#E
$=E!E"E=E>EEE
EEEgender_callc                   K   | j                   dd  }|j                  |       d {    |j                  t        j                         d {    | j
                  j                  t        d| j
                  j                  j                  |       d {   dz   t        || j
                  j                  j                  |       d {   z          d {    |j                          d {   }| j
                  j                  t        d| j
                  j                  j                  |       d {   j                  |d                d {    t        j                  d       d {    | j
                  j                  t        d| j
                  j                  j                  |       d {          d {    y 7 7 7 >7 7 7 7 7 7 n7 (7 w)	N   )rH   rD    GREETINGr7      MSG_QUESTION_CITY)datarG   r6   r   cityr   	edit_textr   r$   r%   get_datar#   formatasynciosleep)rO   r/   r   rH   rV   s        r-   gender_userr]   ]   s    YYqr]F


6

***
//-,,
---
,,
 
 %t||'8'8';';]KKcQ)),,m<<	=   !!D
,,

T\\..11=A	AII$v,W   --

,,

#T\\%6%6%9%9=II   +-K< "	A Is   %G)G&G)GAG)G4G)G
G)GG)1G2AG)9G:G)G!G)4G#5AG)<G%=G)G'	G)G)G)G)G)G)G)!G)#G)%G)'G)c           	        K   | j                   }|j                  |       d {    |j                  t        j                         d {    t               }|j                  t        j                  t        d| j                  j                  |       d {   d             |j                  t        j                  t        d| j                  j                  |       d {   d             |j                  t        j                  t        d| j                  j                  |       d {   d             |j                  t        j                  t        d	| j                  j                  |       d {   d
             | j                  t        d| j                  j                  |       d {   |j                                d {    y 7 7 7 M7 7 7 m7 17 w)N)rW   HOUSEwhere_practicing_HOUSEr?   	DEPARTUREwhere_practicing_DEPARTUREOFFICEwhere_practicing_OFFICENOWHEREwhere_practicing_NOWHEREMSG_PRACTICErE   )r@   rG   r6   r   where_practicingr   rI   r   rJ   r   r$   r%   r#   rK   )r   r/   r   rW   where_practicing_markups        r-   	city_userrj   p   s    <<D




&&&
//-88
99935""',,//=AA2	
 ""glloo}EE6	
 ""7<<??MBB3	
 ""GLLOO]CC4	
 ..??,668    7 '9 B F C D
 	@s   "G3G&G3G"AG3G%AG3%G(&AG32G+3AG3?G- =G3=G/>G3G1G3"G3%G3(G3+G3-G3/G31G3where_practicing_c           	        K   | j                   dd  }|j                  |       d {    |j                  t        j                         d {    | j
                  j                  t        d| j
                  j                  j                  |       d {   dz   t        || j
                  j                  j                  |       d {   z          d {    t               }|j                  t        j                  t        d| j
                  j                  j                  |       d {   d             |j                  t        j                  t        d| j
                  j                  j                  |       d {   d	             |j                  t        j                  t        d
| j
                  j                  j                  |       d {   d             |j                  t        j                  t        d| j
                  j                  j                  |       d {   d             | j
                  j                  t        d| j
                  j                  j                  |       d {   |j                                d {    y 7 7 ^7 7 7 7 7 47 7 7 :7  w)N   )rh   rg   
NOwere_clients_NOr?   zWERE_1-2zwere_clients_WERE_1-2NO_REGULARLYwere_clients_NO_REGULARLY	REGULARLYwere_clients_REGULARLYMSG_QUESTION_CLIENTSrE   )rV   rG   r6   r   were_clientsr   rX   r   r$   r%   r   rI   r   rJ   r#   rK   )rO   r/   r   rh   were_clients_markups        r-   where_practicing_userrx      sD    yy~


-=

>>>
//-44
555
,,
 
  1 1 4 4mDDtK $,,"3"3"6"6FF	G   01""t||0033]CC+	
 ""T\\%6%6%9%9=II1	
 ""):):)=)=}MM5	
 ""dll&7&7&:&:MJJ2	
 ,,

&(9(9(<(<mLL(224    ? ?5DF D J N K
 	M   %KJ)&KJ,AKJ/4KJ2
KJ5AK0J81AKJ;AKJ>AK5K 6AKKK#K$K,K/K2K5K8K;K>K KKKwere_clients_c           	        K   | j                   dd  }|j                  |       d {    |j                  t        j                         d {    | j
                  j                  t        d| j
                  j                  j                  |       d {   dz   t        || j
                  j                  j                  |       d {   z          d {    t               }|j                  t        j                  t        d| j
                  j                  j                  |       d {   d             |j                  t        j                  t        d| j
                  j                  j                  |       d {   d	             |j                  t        j                  t        d
| j
                  j                  j                  |       d {   d             |j                  t        j                  t        d| j
                  j                  j                  |       d {   d             | j
                  j                  t        d| j
                  j                  j                  |       d {   |j                                d {    y 7 7 ^7 7 7 7 7 47 7 7 :7  w)N   )rv   ru   rn   FACEmassage_technique_FACEr?   BODYmassage_technique_BODYFOOTmassage_technique_FOOT	LYMPHATICmassage_technique_LYMPHATICMSG_QUESTION_TECHNIQUErE   )rV   rG   r6   r   massage_techniquer   rX   r   r$   r%   r   rI   r   rJ   r#   rK   )rO   r/   r   rv   massage_technique_markups        r-   were_clients_userr      sB    99RS>L




666
//-99
:::
,,
 
 &(9(9(<(<mLLtSdll//22MBB	C    56  ""!2!2!5!5}EE2	
   ""!2!2!5!5}EE2	
   ""!2!2!5!5}EE2	
   ""dll&7&7&:&:MJJ7	
 ,,

($,,*;*;*>*>NN-779    ? 7:LB F F F K
 	Ory   massage_technique_c           	        K   | j                   dd  }|j                  |       d {    |j                  t        j                         d {    | j
                  j                  t        d| j
                  j                  j                  |       d {   dz   t        || j
                  j                  j                  |       d {   z          d {    t               }|j                  t        j                  t        d| j
                  j                  j                  |       d {   d             |j                  t        j                  t        d| j
                  j                  j                  |       d {   d	             |j                  t        j                  t        d
| j
                  j                  j                  |       d {   d             | j
                  j                  t        d| j
                  j                  j                  |       d {   |j                                d {    y 7 +7 7 7 7 7 17 7 7 77 w)N   )r   r   rn   GOODusing_social_GOODr?   
LITTLE_BIGusing_social_LITTLE_BIGWITHOUT_THEMusing_social_WITHOUT_THEMMSG_QUESTION_SNWrE   )rV   rG   r6   r   using_socialr   rX   r   r$   r%   r   rI   r   rJ   r#   rK   )rO   r/   r   r   using_social_markups        r-   massage_technique_userr      s     		"#


.?

@@@
//-44
555
,,
 
 ($,,*;*;*>*>NNQUU!4<<#4#4#7#7GG	H   01""!2!2!5!5}EE-	
 ""t||'8'8';';]KK3	
 ""):):)=)=}MM5	
 ,,

"DLL$5$5$8$8-HH(224    3 A5NG F L N
 	I   %I,I&I,IAI,I4I,I
I,IAI,0I!1AI,I$AI,I&AI,0I(1I,I*I,I,I,I,I,!I,$I,&I,(I,*I,using_social_c           	        K   | j                   dd  }|j                  |       d {    |j                  t        j                         d {    | j
                  j                  t        d| j
                  j                  j                  |       d {   dz   t        || j
                  j                  j                  |       d {   z          d {    t               }|j                  t        j                  t        d| j
                  j                  j                  |       d {   d             |j                  t        j                  t        d| j
                  j                  j                  |       d {   d	             |j                  t        j                  t        d
| j
                  j                  j                  |       d {   d             | j
                  j                  t        d| j
                  j                  j                  |       d {   |j                                d {    y 7 +7 7 7 7 7 17 7 7 77 w)Nr|   )r   r   rn   EASY'is_easy_to_communicate_with_people_EASYr?   NORMAL)is_easy_to_communicate_with_people_NORMALHARD'is_easy_to_communicate_with_people_HARD&MSG_IS_EASY_TO_COMMUNICATE_WITH_PEOPLErE   )rV   rG   r6   r   "is_easy_to_communicate_with_peopler   rX   r   r$   r%   r   rI   r   rJ   r#   rK   )rO   r/   r   r   using_people_communicate_markups        r-   using_social_userr     s    99RS>L




666
//-JJ
KKK
,,
 
 "DLL$5$5$8$8-HH4Odll//22MBB	C  
 '<&=##''""!2!2!5!5}EEC	
 $''""4<<#4#4#7#7GGE	
 $''""!2!2!5!5}EEC	
 ,,

8$,,:K:K:N:NP]^^4>>@    5 7KHB F H F
 	_r   #is_easy_to_communicate_with_people_c                   K   | j                   dd  }|j                  |       d {    | j                  j                  t	        d| j                  j
                  j                  |       d {   dz   t	        || j                  j
                  j                  |       d {   z          d {    | j                  j                  | j                  j
                  j                  t        j                         d {    t        j                  d       d {    |j                          d {   }| j                  j
                  j                  |j                  d      t	        |j                  d      | j                  j
                  j                  |       d {   |j                  d      t	        |j                  d	      | j                  j
                  j                  |       d {   t	        |j                  d
      | j                  j
                  j                  |       d {   t	        |j                  d      | j                  j
                  j                  |       d {   t	        |j                  d      | j                  j
                  j                  |       d {   t	        || j                  j
                  j                  |       d {   g	}t        |       d {   }t!        |d   |d   |d   |d   |d   |d   |d   |d   |d   |
      }t#        ||       d {    | j                  j%                  d       d {    | j                  j                  | j                  j
                  j                  t        j                         d {    t        j                  d       d {    |j                  di        d {    |j'                  t(        j*                         d {    t-        | j                  ||       d {    y 7 7 7 7 7 G7 -7 7 7 \7 7 7 7 s7 b7 !7 7 7 7 7 Z7 =w)N#   )r   r   rn      r7   rH   rW   rh   rv   r   r   r   rT               rQ      )
r!   r5   rH   rW   rh   rv   r   r   r   	row_sheetu   ✅ Анкета соханена. Теперь вместе сформируем стратегию продвижения за 5 ходов.)strategy_stepstrategy_answers)rV   rG   r   rX   r   r$   r%   r   send_chat_actionr   TYPINGr[   r\   rY   getr   r   r   r#   r6   r   strategy_questionask_next_strategy_question)rO   r/   r   easy_to_communicate_with_peoplerV   resultsrI   new_users           r-   r   r   )  s     '+iin#


?^

___
,,
 
 8$,,:K:K:N:NP]^^aee/1B1B1E1E}UU	V  
 ((
#
#DLL$5$5$8$8*:K:K
LLL
--
!!D"DLL$5$5$8$8-HH+,dll.?.?.B.BMRR($,,*;*;*>*>NN,-t||/@/@/C/C]SS($,,*;*;*>*>NN/1B1B1E1E}UU
G W%
%C
qzQZ QZ!!*QZ+21:H h
...
,,

 	Y   ((
#
#DLL$5$5$8$8*:K:K
LLL
--



!b

AAA
//-99
:::
$T\\5-
HHH[ ` 	_U
 M! 	IRNSNU
% / MA:Hs  %Q7P=AQ7/Q 04Q7$Q
%Q72Q3AQ7Q	Q7Q Q77Q8A0Q7(Q)AQ79Q:A Q7:Q;A Q7;Q<A Q7<Q=1Q7.Q!/Q7Q$AQ7Q'"Q7)Q**AQ79Q-:Q7Q/Q71Q12&Q7Q3Q77Q58Q7 Q7Q7Q7	Q7Q7Q7Q7Q7Q7Q7Q7!Q7$Q7'Q7*Q7-Q7/Q71Q73Q75Q7)u   Боль клиентаu!   Целевая аудиторияu   Канал трафикаu   Конвертерu<   Уникальное торговое предложениеc                   K   |j                          d {   }|j                  dd      }|j                  di       }|t        t              k\  r| j	                  d       d {    | j
                  j                  | j                  j                  t        j                         d {    |j                  t        j                         d {    t        | |       d {    y t        |   }d|j                  d       d|j                  d       d	|j                  d
       d|j                  d       d|j                  d       d|j                  d       d|j                  d       d|j                  d       d|j                  d       ddj                  |j!                         D cg c]  \  }}d| d|  c}}      z   dz   d| dz   }	| j
                  j                  | j                  j                  t        j                         d {    t"        j                  j$                  j'                  dd|	d gd!"       d {   }
|
j(                  d   j*                  j,                  j/                         }|j1                  |g #       d {    t3        j4                  d$       d {    | j	                  |d%&       d {    y 7 7 ~7 ;7 7 c c}}w 7 7 7 V7 ;7 "w)'Nr   r   r   u(   Составляю стратегию...u8  Ты — <b>Telegram-помощник по продвижению массажиста</b>. Работаешь пошагово, помогая выстроить стратегию привлечения клиентов на основе анкеты.

📋 <b>Анкета массажиста</b>:
- Имя: r7   u   
- Пол: rH   u   
- Город: rW   u"   
- Техника массажа: r   u/   
- Где принимает клиентов: rh   u"   
- Цифровые навыки: r   u+   
- Отношение к соцсетям: social_attitudeu!   
- Есть ли клиенты: rv   uH   

- Легко ли взаимодействовать с людьми: r   uH   

📌 <b>Подтверждённые шаги стратегии</b>:
rn   - : 

u#   🔄 <b>Текущий шаг</b>: u  

🎯 Построй стратегию по 5 шагам:
1. Определи <b>боль клиента</b>, с которой массажист помогает
2. Сформулируй <b>целевую аудиторию</b>
3. Подбери <b>3 места, где искать заявки</b> на массаж от этой аудитории (не включай соцсети, если пользователь против)
4. Подбери <b>5 сильных конвертеров</b> — то есть конкретных способов превратить интерес (заявку, лайк, вопрос в чате, просмотр профиля) в запись и оплату. Это могут быть:– быстрые триггеры («анализ по фото», «диагностика», «пробный сеанс»)– бонусы или временные предложения (скидки, подарки, акции)– нестандартные фишки, которые отличают массажиста от других– действия, которые повышают доверие клиента (обратная связь, до/после, опросы)Важно: выбирай предложения, которые действительно подталкивают человека к решению записаться. Избегай общих фраз — нужны именно крючки, выгоды и поводы.
5. Сформулируй <b>уникальное торговое предложение</b> — в 1 фразе с упором на технику массажа, без рекламных клише

⚠️ <b>Ограничения</b>:
- Не упоминай соцсети, если в анкете указано, что массажист не хочет их использовать
- Не предлагай ТЦ, если приём ведётся на дому
- Если выбрано 'лучше без соцсетей' обязательно предложи как вариант Avito.ru- Если техника — массаж лица, акценты на внешность, тревожность, стресс, но не боль в спине
- Избегай слов: 'в будущем', 'можно потом', 'попробуйте когда-нибудь' — только настоящее время

📝 <b>Формат ответа</b>:
- Telegram-сообщение в HTML
- Используй только теги: <b>, <i>, <u>, <s>, <a href='...'>
- <b> — для акцентов
- Не пиши приветствий
- Не используй тег pre
- Можно обращаться по имени
- Объясни, зачем нужен шаг
- Сформулируй вопрос
- Дай 3–6 релевантных примеров
- В конце скажи что необходимо выбрать один, чтобы не распылять училия и выбрать сильное позиционирование или предложи ввести свой
- Отобрази предыдущие шаги и фразой «Переходим дальше...» переведи к следующему
gpt-4or:   rolecontent      ?modelmessagestemperature)current_questioncurrent_optionsr   HTML
parse_mode)rY   r   lenSTRATEGY_STEPSr#   r   r   r$   r%   r   r   r6   r   r8   generate_and_send_planjoinitemsr   completionscreatechoicesr   r   striprG   r[   r\   )r   r/   r   rV   stepanswerscurrent_blockkvprompt
completionr@   s               r-   r   r   g  s    !!D88OQ'Dhh)2.Gs>""nnGHHHkk**7<<??J<M<MNNNoom22333$We444"4(M &)* +(+, -!XXf-. /0049L0M/N O==AXXFX=Y<Z [0040H/I J99=BS9T8U V//3xx/G.H IUUYU]U]  _C  VD  UE EVV IIAAA3b}ABC FLL" 2-  Aa  a#1a j ++
&
&w||
8I8I
JJJ{{..55!f56 6  J a ((00668D


T2

FFF
--

..&.
111] "
 	IN34* BJ K G1s   K?K AK?%K#&AK?+K&,&K?K)K?&K,'CK?7K/	AK?K57K?K7AK?"K9#K??K; K?K=K?#K?&K?)K?,K?/K?7K?9K?;K?=K?strategy_donec                 ^  K   t        | j                  j                  j                        }|s| j	                  d       d {    y |d   j                  d       |dxx   dz  cc<   t        | j                  j                  j                  |d   |d          | j                  j                  | j                  j                  j                  d       d {    | j                  j                  d        d {    | j                  j	                  d	       d {    y 7 7 N7 ,7 w)
Nu   План не найден.historydone
day_numberr   r   typingrE   uT   ✅ Отлично! Жду вас завтра для следующего шага.)
r   r   r$   r%   r#   appendr   r   r   edit_reply_markup)rO   r   strats      r-   r   r     s     dll//223Ekk7888	)F#	,1**--u\/BER[L\]
((
#
#DLL$5$5$8$8(
CCC
,,
(
(d
(
;;;
,,

t
uuu 	9 D;usI   A D-D%BD-D'#D-<D)="D-D+ D-'D-)D-+D-strategy_failc                   K   | j                   j                          d {    t        | j                   j                  j                        }|sy |d   |d      }| j
                  j                  | j                   j                  j                  d       d {    d| d}t        j                  j                  j                  dd|dgd	
       d {   }|j                  d   j                   j                  j                         }|d   dz   t        |d         k  r||d   |d   dz   <   |d   j                  d       |dxx   dz  cc<   t        | j                   j                  j                  |d   |d   |d          | j                   j!                  d        d {    | j                   j#                  d       d {    y 7 7 ;7 7 07 w)Nplanr   r   u>   Это задание не удалось выполнить:
u   
Придумай более простой вариант этого задания для массажиста, коротко и понятно (1-2 предложения).r   r:   r   r   r   r   r   r   fail)r   r   r   rE   uo   Я учёл твой ответ. На завтра подготовлю более лёгкое задание!)r   r)   r   r$   r%   r   r   r   r   r   r   r   r   r   r   r   r   r#   )rO   r   r   previous_stepr   r   easiers          r-   r   r     s    
,,


dll//223E&M%"56M
((
#
#DLL$5$5$8$8(
CCC J/ z	{  {{..55!f56 6  J
 "**2288:F\QU6]!3317feL)A-.	)F#	,1&6]i 	 ,,
(
(d
(
;;;
,,

y  G   D$ <sY   GGA8GG=GGCG(G)"GGGGGGGstrategy_hintc                 Z  K   | j                   j                          d {    t        | j                   j                  j                        }|sy |d   |d      }| j
                  j                  | j                   j                  j                  d       d {    d| }t        j                  j                  j                  dd|dgd	       d {   }|j                  d
   j                   j                  j                         }|d   j                  d       t        | j                   j                  j                  |d          t        j                   d       d {    t#               }|j%                  t'        j(                  dd             |j%                  t'        j(                  dd             |j%                  t'        j(                  dd             | j                   j+                  d| |j-                                d {    y 7 7 7 N7 7 w)Nr   r   r   u   Дай очень короткую (2-3 предложения) полезную подсказку массажисту по выполнению этого задания:
r   r:   r   r   r   r   r   hintr   rT      ✅ Сделалr   r?      ❌ Не сделалr       🤔 Хочу подсказкуr   u6   Вот твоя короткая подсказка:

rE   )r   r)   r   r$   r%   r   r   r   r   r   r   r   r   r   r   r[   r\   r   rI   r   rJ   r#   rK   )rO   r   r   current_stepr   r   r   markups           r-   r   r     s    
,,


dll//223E=|!45L
((
#
#DLL$5$5$8$8(
CCCAAM	P 
 {{..55!f56 6  J
 a ((00668D	)F#**--uY7GH
--
"$F
JJu))/AQ`ab
JJu))/FVefg
JJu))/Qapqr
,,


B4&I%%'    A   D sZ   H+HA8H+H!<H+H$BH+&H''B1H+H)H+!H+$H+'H+)H+c                 ,  K   |j                          d {   }|j                  dg       }|j                  di       }t        |      }|t        |      k\  r| j                  d       d {    y ||   }|j                  dd      j	                         }| j
                  j	                         ||<   |j                  |       d {    |dz  }|t        |      k\  rU| j                  d       d {    |j                  t        j                         d {    t        | |       d {    y ||   }	|	j                  dd      j	                         }
|	j                  d	g       }|r4t        |      r)d
dj                  |D cg c]
  }|sd|  c}      z   }nd}d|dz    d|
 }|r|d|z   z  }| j                  |       d {    |j                  t        j                         d {    y 7 7 7 87 7 7 c c}w 7 A7 w)Nextra_questionsextra_answersu;   ❗️ Ошибка: вопросы закончились.question )r   r   uV   ✅ Спасибо! Все ответы собраны. Генерирую план...optionsu   Например:
rn      • u   📌 Доп. вопрос z:
r   )rY   r   r   r#   r   r@   rG   r6   r   r8   r   anyr   asking_extra)r   r/   r   rV   	questionsr   answered_countcurrent_datar   	next_datanext_q	next_optsoptexamples_texttext_to_sends                  r-   ask_extra_questionr    s    !!D*B/Ihh+G\NY'nnZ[[[ ^,L#''
B7==? ' 2 2 4G


'

222aNY'nnuvvvoom22333$We444 n-	z2.446MM)R0	 Y1DIIW`>hW`PSdgcU|W`>h4iiMM 4NQ4F3Gs6(SF]22Lnn\***oom88999Q " 	\ 3
 	w34 ?i 	+9s   HG;AH,G>-AH	H
+H5H6&HHH0H	1AH
H
H
5HH&H5H6H>HHHH	HHHc                 P  K   t        d       |j                          d {   }d|j                  d       d|j                  d       d|j                  d       d|j                  d	       d
|j                  d       d|j                  d       d|j                  d       d}|j                  di       }|r)|dz  }|j                         D ]  \  }}|d| d| dz  } |j                  di       }|r)|dz  }|j                         D ]  \  }}|d| d| dz  } d| d}	t        j
                  j                  j                  dd|	dgd       d {   }
|
j                  d   j                  j                  }|j                         j                  d      D cg c]2  }|j                         s|j                  d      j                         4 }}|d d  }t        | j
                  j                  |       |d d! }dj                  |      }t!        |      d!kD  r|d"z  }| j#                  d#|        d {    t%        | j
                  j                        }|d$   d   }t'               }|j)                  t+        j,                  d%d&'             |j)                  t+        j,                  d(d)'             |j)                  t+        j,                  d*d+'             | j#                  d,| d-|j/                         .       d {    y 7 7 c c}w 7 7 w)/Nu2   [DEBUG] Запуск генерации плана   Имя: r7   	   
Пол: rH      
Город: rW   u   
Где практикует: rh   u   
Были ли клиенты: rv       
Техника массажа: r   #   
Навыки в соцсетях: r   rn   r   E   
Дополнительные ответы пользователя:
r   r   r   @   
Ответы на стратегические вопросы:
uK  Ты — профессиональный бизнес-консультант для массажистов.
На основе всех данных пользователя (анкета, дополнительные вопросы и стратегические ответы), составь персональную стратегию продвижения на 30 дней.
Каждое задание должно быть конкретным, понятным и применимым, без вводных и заключительных слов.

Вот все данные:
u  

Если юзер попросил без соцсетей, то не предлагать в стратегии соцсети вообще.
Задания должны быть понятными, но не больше 3 предложенийЗадания должны занимать не более 20 минут в деньВерни список из 30 заданий — одно на каждый день. Только список, без лишнего текста.r   r:   r   gffffff?r   r   u   -•    rQ   u7   
...
и ещё задания на весь месяц!uI   ✅ Вот твой персональный план на 30 дней!

r   r   r   r?   r   r   r   r   u*   📌 Задание на сегодня:

uc   

Напиши что у тебя получилось и я тебе помогу улучшитьrE   )r(   rY   r   r   r   r$   r   r   r   r   r   r   splitr   r%   r   r   r#   r   r   rI   r   rJ   rK   )r   r/   rV   user_text_blockr   r   r#   r   blockr   r   r@   liner   preview_linespreview_textr   first_day_taskr   s                      r-   r   r   H  sY    	
>?!!D 488F#$ %88H%& 'xx'( )((,1C(D'E F))-.)A(B C**.((3F*G)H I--1XXn-E,Fb	J  HH_b1Mdd - 3 3 5HfH:Rxr::O !6 xx 2B7__-335ME6E7"VHB77O 6
	( )8'8 9a		a  {{..55!f56 6  J a ((00D48JJL4F4Ft4L]4LDPTPZPZP\DJJw%%'4LD]9Dw||-!HM99]+L
4y1}SS
..
UVbUcd   glloo.E6]1%N"$F
JJu))/AQ`ab
JJu))/FVefg
JJu))/Qapqr
..
6~6F  Gl  	m%%'    I "N ^s[   L&LD8L&LAL&#L9!LA'L&L"CL&L$L&L&L&$L&c           	        K   | j                   j                         }|j                          d {   }|j                  dd      }|j                  di       }t        |   }|j                  dd      }|j                  dg       }	|	r5dj                  t        |	      D 
cg c]  \  }
}|
dz    d	|  c}}
      nd}d
| d| d| d}| j                  j                  | j                  j                  t        j                         d {    t        j                  j                  j                  dd|dgd       d {   }|j                   d   j"                  j$                  j                         }|j'                  d      r|j)                  d      j                         }|	r"dj                  |	D cg c]  }d| 	 c}      nd}| j+                  |d       d {    t-        j.                  d       d {    | j+                  d| d| d       d {    y |j'                  d      rEd|v rAd|v r=dd l}	 |j3                  |      }|d   j                         }|d   j                         }n"|}|j7                  dd      j                         }|||<   |j9                  |       d {    |j9                  |dz          d {    | j+                  |d       d {    t;        | ||       d {    y 7 c c}}
w 7 7 c c}w 7 =7 #7 # t4        $ r | j+                  d       d {  7   Y y w xY w7 7 }7 d7 Qw) Nr   r   r   r   r   r   rn   r   z. u  Ты — Telegram-ассистент по продвижению массажиста. Проанализируй ответ пользователя на текущий стратегический вопрос и верни один из вариантов:

📌 Вопрос: u   
Варианты:
u&   
Ответ пользователя: u  

🔎 Формат ответа:
• Если пользователь ввёл цифру (например, «2»), подставь текст варианта и верни JSON ровно такого вида:
{"DIGITAL": "Текст ответа", "VALID": "Короткий, позитивный фидбек по выбору <i>Переходим дальше…</i>"}

• Если ответ адекватный текстом — верни строку:
VALID: Короткий, позитивный фидбек по выбору <i>Переходим дальше…</i>

• Если ответ не по теме — верни строку:
INVALID: (кратко, по-дружески поясни, что непонятно, и переформулируй вопрос)

⚠️ Только текст или JSON, никаких Markdown или комментариев. Используй HTML-теги Telegram: <b>, <i>, <u>, <s>, <a href='...'>, <pre>.r   r:   r   g?r   zINVALID:r   r   r   u   Давай ещё раз:
r   {DIGITALVALIDuP   ⚠️ Ошибка разбора ответа. Попробуй ещё раз.zVALID:)r   )r   )r@   r   rY   r   r   r   	enumerater   r   r$   r%   r   r   r   r   r   r   r   r   
startswithremoveprefixr#   r[   r\   jsonloads	ExceptionreplacerG   r   )r   r/   r   user_answerrV   r   r   r   r   r   r+   r  options_textr   r   r@   feedbackxexample_blockr  parsed	confirmeds                         r-   handle_strategy_answerr'    sC    ,,$$&K!!D88OQ'Dhh)2.G"4(Mxx 2B7hh("-GV]499i>PQ>PFAsQr#/>PQRceL	./ 0*^ ,00;} =E		E   ++
&
&w||
8I8I
JJJ{{..55!f56 6  J a ((00668D z"$$Z0668DK		w"?w!T!:w"?@QSnnX&n999mmAnn:;K:LDQ^P_`msnttts	T 1go	ZZ%Fy)//1Ig,,.H
  	<<"-335&GM


W

555


$(

333
..f.
555
$We]
CCC} " R$ K #@9t  	..!sttt	 635Cs   .MLA0M!L
5AML7MLA6M;LM&L#'ML& M$L)%"M7L, ?=M<M=MMM4M5M	M
MMMM&M)M,M	M
MMMMMMMc                   K   | j                   j                         }t        | j                  j                  |       d {   }|s| j                  d       d {    y t        | j                  j                        }|j                          d {   }d|j                   d|j                   d|j                   d|j                   d|j                   d|j                   d|j                   d	}d
}d|v r,|dz  }|d   j                         D ]  \  }	}
|d|	 d|
 d	z  } d
}d|v r,|dz  }|d   j                         D ]  \  }}|d| d| d	z  } d
}|r:|j!                  dd      }|j!                  dg       }|t#        |      k  rd||    }d|z   |z   |z   |z   d| dz   }| j$                  j'                  | j                  j                  t(        j*                         d {    	 t,        j                  j.                  j1                  dd|dgd       d {   }|j2                  d   j4                  j6                  j                         }| j                  |d       d {    y 7 97 !7 7 7 \7 # t8        $ r2}t;        d|        | j                  d        d {  7   Y d }~y d }~ww xY ww)!Nuk   ⚠️ Пожалуйста, сначала пройдите анкету — используйте /startr  r  r  u-   
Где принимает клиентов: u   
Есть ли клиенты: r	  r
  rn   r   r   r  r   r   r   r  r   r   r   u    
Текущее задание:
u  Ты — умный и дружелюбный Telegram-ассистент, помогающий массажисту продвигать свои услуги.
Отвечай на его вопросы как живой человек, но с опорой на маркетинг, логику и опыт в сфере массажа.

Если вопрос не относится к массажу или продвижению массажиста — ответь вежливо, что ты не можешь с этим помочь, но с радостью ответишь на вопрос по теме массажа.Вот вся информация о пользователе:
u$   

Теперь его вопрос:
u  

❗️Ответ верни ТОЛЬКО в виде обычного Telegram-сообщения с HTML-разметкой.
❗️Не используй <code>, <br>, <ul>, <li>, <ol>, <span>, <div> или другие неподдерживаемые Telegram теги.
❗️Если ты их используешь — бот не сможет отправить сообщение, и пользователь ничего не увидит.
❗️Форматируй только с помощью: <b>, <i>, <u>, <s>, <a href='...'>, <pre>.
Можно использовать <b> для акцентов и выделений, если уместно.

r   r:   r   g333333?r   r   r   z[GPT CHAT ERROR] uO   ⚠️ Ошибка при обращении. Попробуйте позже.)r@   r   r   r$   r%   r#   r   rY   r5   rH   rW   rh   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r(   )r   r/   r   	user_textr:   r   
state_data
user_blockextra_blockqastrat_blockr   r   active_taskdayr   r   r   replyes                        r-   gpt_direct_chatr4    s    ""$I',,//=99Dnn  K  L  	L  	Lglloo.E~~''J 4==/ ";;-  yyk "77;7L7L6M N))-):):(; <**.*@*@)A B--1->->,?r	C  K*$``/557DAqRs"QCr?*K 8 KZ'[[1288:DAqRs"QCr?*K ; Kiia(yy$T?>tCykJKP 	
    6i[ AB BB " ++
&
&w||
8I8I
JJJ
p!;;2299%&9: : 
 


 ""1%--55;;=nnUvn666G : 	L (h K
 	7 p!!%&nnnooops   >K I9KI<7KI?EK.J/K43J 'J(AJ 3J4J 8K<K?KKJ J 	K"J>3J64J>9K>KK)Kr[   aiogramr   r   r   r   aiogram.enumsr   aiogram.exceptionsr   aiogram.filtersr	   r
   aiogram.fsm.contextr   aiogram.utils.keyboardr   sqlalchemy.ormr   bot.db.requestsr   r   r   r   bot.db.schemas.usersr   bot.handlers.chat_GPTr   bot.handlers.google_sheet_apir   r   bot.handlers.strategy_storager   r   r   bot.structures.fsm_groupsr   bot.translationsr   routerr   Messager.   r;   r7   rM   callback_queryrV   r  rH   CallbackQueryr]   rW   rj   rh   rx   rv   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r'  r@   r4       r-   <module>rI     s2    ) ) $ 1 1 * 8 ' M M * ( N e e 3 	 %&U]] < c  ', 4U]] 4< 4PZ 4_c 4  40 ""#U]] : l _c  $, qvv((3]5I5IJE// 
 S_ dh  K$ ""# U]]  :  l  _c   $ F qvv(()<=}?]?]^$e&9&9 $* $]i $nr $ _$N qvv((9=;U;UV$%"5"5 $j $Ye $jn $ W$N qvv(()=>@_@_`u':': : ^j os  aB qvv((9=;U;UV%"5"5 j Ye  WD qvv(()NO$GGI0I53F3F 0Iz 0I<H0IMQ0II0IfO2emm O2J O2_k O2d qvv01ve11 v, v 2v qvv01&e11 &, & 2&R qvv01$e11 $, $ 2$N **+):emm ):J ):Wc ): ,):XI IX //0@D%-- @D
 @D[g @D 1@DF Ip5== Ip IpT` Ip IprH  