o
    <Drj>                     @   s  d dl mZmZ d dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZmZmZmZ ddlmZmZmZmZmZmZ ddlmZ ed	d
ZG dd de
ZG dd de
ZdddddZdd Zdd Zdd Zdd Z dd Z!dd Z"d d! Z#d"ed#e$fd$d%Z%	&dNd"ed'ed(e&d&B fd)d*Z'e(e d"ed+ed'ed,ed-d&f
d.d/Z)e*ej+d0kd1ed+ed'ed-d&fd2d3Z,e*ej+d4kd1ed+ed'ed-d&fd5d6Z-e(ej.d"ed+ed'ed-d&fd7d8Z/e*ej+d9kd1ed+ed'ed-d&fd:d;Z0e*ej+d<kd1ed'ed-d&fd=d>Z1e*ej+2d?d1ed'ed-d&fd@dAZ3e*ej+dBkd1ed+ed'ed-d&fdCdDZ4e*ej+dEkd1ed+ed-d&fdFdEZ5e*ej+dGkd1ed+ed'ed-d&fdHdIZ6e(ej7d"ed'ed-d&fdJdKZ8e( d"ed+ed'ed-d&fdLdMZ9d&S )O    )FRouter)CommandObjectCommandStart)
FSMContext)StateStatesGroup)CallbackQueryInlineKeyboardButtonInlineKeyboardMarkupMessage   )PlatformaAPIErrorget_telegram_statusleave_support_chatlink_telegramsend_ai_messageupdate_notification_settings)BotSettings	platforma)namec                   @      e Zd Ze ZdS )LinkTelegramN)__name__
__module____qualname__r   waiting_for_code r   r   M/var/www/botplatforma_usr/data/www/botplatforma.ilyaolesya.ru/bot/handlers.pyr          
r   c                   @   r   )AIChatN)r   r   r   r   activer   r   r   r   r       r   r    u(   Напоминания об урокахu(   Советы и рекомендацииu&   Новости и обновленияu;   Акции и специальные предложения)lesson_reminderstips_and_recommendationsnews_and_updatesspecial_offersc                   C   s   t dddS )Nu   Меню	main_menutextcallback_data)r
   r   r   r   r   menu_button)   s   r*   c                   C      t tdddggdS )Nu   Привязать Telegramr   r'   inline_keyboardr   r
   r   r   r   r   welcome_keyboard-   s   r/   c                   C   r+   )Nu   Отменаcancel_linkr'   r,   r.   r   r   r   r   cancel_keyboard:      r1   c                   C   s   t t ggdS )Nr,   )r   r*   r   r   r   r   menu_keyboardB   s   r3   c                   C   s"   t tdddgtdddggdS )Nu   ИИ-ассистентai_assistantr'   u   Уведомленияnotificationsr,   r.   r   r   r   r   main_menu_keyboardF   s
   r6   c              
   C   s   g }t  D ]*\}}t| |d}|rdnd}|t| d| d| dt|  dg q|tdd	dg t|d
S )NFu   Выключитьu   Включитьz: notification::r'   u
   Назадr&   r,   )NOTIFICATION_LABELSitemsboolgetappendr
   intr   )settingsrowsfieldlabelenabledactionr   r   r   notifications_keyboardO   s   
rE   c                   C   r+   )Nu   Покинуть чатleave_ai_chatr'   r,   r.   r   r   r   r   leave_chat_keyboard^   r2   rG   messager(   c                    s8   | j r| j||dI d H  d S | j||dI d H  d S )N)captionreply_markup)r(   rJ   )photoedit_caption	edit_text)rH   r(   rJ   r   r   r   edit_menu_messagef   s   rN   Nbot_settingstelegram_user_idc                    s   zt ||p	| jjdI d H }W n ty   ddi}Y nw |d r5| jd|d  dt dI d H  d S | jdt dI d H  d S )	NrP   linkedFu   Привет, display_nameuF   ! Telegram уже привязан к вашему профилю RWL.rJ   u   Привет! Я бот RWL для изучения юридического английского. Я помогу получать напоминания, советы и новости об обучении.)r   	from_userid	Exceptionanswerr3   r/   )rH   rO   rP   statusr   r   r   send_welcomem   s&   
rZ   statecommandreturnc              
      sT  |  I d H  |jpd  }|rt|dks| s*| jdt dI d H  d S z-t|| j	j
dI d H }|d rEt| |I d H  W d S t||| j	j
| j	jpPddI d H }W n5 tyx } z| j| dt dI d H  W Y d }~d S d }~w ty   | jd	t dI d H  Y d S w | jd
|d  dt dI d H  d S t| |I d H  d S )N    u   Ссылка для привязки некорректна или повреждена. Откройте профиль RWL и нажмите «Привязать Telegram» ещё раз.rT   rQ   rR   coderP   telegram_usernameuQ    Откройте профиль RWL и создайте новую ссылку.uy   Не удалось связаться с RWL. Попробуйте открыть ссылку ещё раз позже.   Готово, rS   uM   ! Telegram автоматически привязан к профилю RWL.)clearargsstripupperlenisalnumrX   r/   r   rU   rV   rZ   r   usernamer   rW   r3   )rH   r[   rO   r\   ra   rY   resulterrorr   r   r   start   sX   
rm   r   callbackc                    s   zt || jjdI d H }W n ty   ddi}Y nw |d rB| I d H  | dI d H  | jj|d  dt dI d H  d S |t	j
I d H  |  I d H  | jjdt dI d H  d S )	NrQ   rR   Fu    Telegram уже привязанrS   u9   , Telegram уже привязан к профилю RWL.rT   u   Введите одноразовый код из блока «Уведомления» в профиле RWL. Код действует 10 минут.)r   rU   rV   rW   rd   rX   rH   r3   	set_stater   r   r1   rn   r[   rO   rY   r   r   r   start_linking   s.   rq   r0   c                    sV   |  I d H  | dI d H  | jjdt dI d H  t| j|| jjdI d H  d S )Nu!   Привязка отмененаu+   Привязка Telegram отменена.rT   rQ   )rd   rX   rH   r/   rZ   rU   rV   )rn   r[   rO   r   r   r   cancel_linking   s   rr   c              
      s  | j pd  }t|dks| s!| jdt dI d H  d S zt||| jj	| jj
p-ddI d H }W n4 tyT } z| jt|t dI d H  W Y d }~d S d }~w tyh   | jdt dI d H  Y d S w | I d H  | jd|d  d	t dI d H  d S )
Nr^   r_   u   Код должен состоять из 8 букв и цифр. Проверьте код и попробуйте ещё раз.rT   r`   ]   Не удалось связаться с RWL. Попробуйте ещё раз позже.rc   rS   u  ! Telegram успешно привязан к профилю. Сейчас все четыре настройки уведомлений выключены. Включить нужные уведомления можно в меню бота или профиле RWL.)r(   rf   rg   rh   ri   rX   r1   r   rU   rV   rj   r   strrW   rd   r3   )rH   r[   rO   ra   rk   rl   r   r   r   receive_link_code   s>   
ru   r&   c                    s   |  I d H  zt|| jjdI d H }W n ty)   | jdddI d H  Y d S w |d s:| jdddI d H  d S |  I d H  t| jdt I d H  d S )NrQ   u/   Не удалось загрузить менюT
show_alertrR   *   Сначала привяжите TelegramH   Главное меню RWL. Выберите нужный раздел.)	rd   r   rU   rV   rW   rX   rN   rH   r6   rp   r   r   r   show_main_menu  s(   rz   r5   c                    s   zt || jjdI d H }W n ty"   | jdddI d H  Y d S w |d s3| jdddI d H  d S |  I d H  t| jdt|dpEi I d H  d S )	NrQ   u9   Не удалось загрузить настройкиTrv   rR   rx      Здесь вы можете настроить уведомления RWL. Нажмите на нужный пункт, чтобы включить или выключить его.r?   )	r   rU   rV   rW   rX   rN   rH   rE   r<   )rn   rO   rY   r   r   r   show_notifications-  s&   r|   r7   c              
      s  z| j dd\}}}|tvs|dvrtW n ty+   | jdddI d H  Y d S w zt|| jj||dkdI d H }W n2 ty\ } z| jt	|ddI d H  W Y d }~d S d }~w t
yo   | jd	ddI d H  Y d S w | d
I d H  t| jdt|dpi I d H  d S )Nr8      )01u+   Некорректная настройкаTrv   r   )rP   rA   rC   u9   Не удалось сохранить настройкуu%   Настройка сохраненаr{   r?   )datasplitr9   
ValueErrorrX   r   rU   rV   r   rt   rW   rN   rH   rE   r<   )rn   rO   _rA   raw_enabledrk   rl   r   r   r   toggle_notificationF  s>   r   r4   c                    s   zt || jjdI d H }W n ty+   |  I d H  | jjdt dI d H  Y d S w |d sE|  I d H  | jjdt dI d H  d S |tj	I d H  | dI d H  t
| jdt I d H  d S )NrQ   rs   rT   rR   u   Чтобы пользоваться ИИ-ассистентом, сначала привяжите Telegram к профилю RWL.u   Чат с ИИ открытu   Вы в чате с ИИ-ассистентом RWL. Задайте вопрос о платформе или обучении.)r   rU   rV   rW   rX   rH   r/   ro   r    r!   rN   rG   )rn   r[   rO   telegram_statusr   r   r   enter_ai_chath  s8   r   rF   c                    s:   |  I d H  | dI d H  t| jdt I d H  d S )Nu   Чат закрытry   )rd   rX   rN   rH   r6   )rn   r[   r   r   r   rF     s   r   c              
      s   zt || jjdI d H  W n2 ty- } z| jt|ddI d H  W Y d }~d S d }~w ty@   | jdddI d H  Y d S w | I d H  | dI d H  t| j	dt
 I d H  d S )NrQ   Trv   u-   Не удалось завершить чатu9   Общение с поддержкой завершеноry   )r   rU   rV   r   rX   rt   rW   rd   rN   rH   r6   )rn   r[   rO   rl   r   r   r   leave_admin_chat  s*   r   c              
      s2  | j pd }|s| jdt dI d H  d S | j| jjdI d H  zt|| j	j|dI d H }W n4 t
yQ } z| jt|t dI d H  W Y d }~d S d }~w tye   | jdt dI d H  Y d S w |dpld   sx|dpwd	  fd
dtdt dD }|D ]}| j|t dI d H  qd S )Nr^   uH   Отправьте вопрос текстовым сообщением.rT   typing)rP   rH   uu   Не удалось связаться с ИИ-ассистентом. Попробуйте ещё раз позже.rX   detailuR   Сообщение отправлено специалисту поддержки.c                    s   g | ]
} ||d   qS )  r   ).0indexrX   r   r   
<listcomp>  s    z&receive_ai_message.<locals>.<listcomp>r   r   )r(   rf   rX   rG   botsend_chat_actionchatrV   r   rU   r   rt   rW   r<   rangerh   )rH   rO   r(   rk   rl   chunkschunkr   r   r   receive_ai_message  sH   r   c                    s$   |  I d H  t| |I d H  d S N)rd   rZ   )rH   r[   rO   r   r   r   greet_on_any_message  s   r   r   ):aiogramr   r   aiogram.filtersr   r   aiogram.fsm.contextr   aiogram.fsm.stater   r   aiogram.typesr	   r
   r   r   apir   r   r   r   r   r   configr   routerr   r    r9   r*   r/   r1   r3   r6   rE   rG   rt   rN   r>   rZ   rH   rm   callback_queryr   rq   rr   r   ru   rz   r|   
startswithr   r   rF   r   r!   r   r   r   r   r   r   <module>   s"    
	


3
&!!
'