
    i.                         U d dl mZ d dl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	m
Z
mZmZ d dlmZ d dlZe G d d             Z G d d	      Zdaeed
<   defdZdedefdZdedefdZy)    messageN)datetime)ListDictSetTuple)	dataclassc                   @    e Zd ZU eed<   eed<   ee   ed<   dZeed<   y)EmojiPatternemojicategory	responsesTenabledN)__name__
__module____qualname__str__annotations__r   r   bool     M/home/kdj-ubuntu1/mlink_AI_Server/mlink-backend/./src/routes/emoji_manager.pyr   r      s     JMCyGTr   r   c                   \    e Zd ZdZddefdZd Zd Zd Zded	e	fd
Z
ded	efdZd	efdZy)EmojiResponseManageru-   이모티콘 응답을 관리하는 클래스Nconfig_filec                 h    g | _         |xs d| _        | j                          | j                          y )Nz./config/emoji_patterns.json)emoji_patternsr   _load_default_patterns_load_from_config)selfr   s     r   __init__zEmojiResponseManager.__init__   s0    24&H*H##% r   c                    g t        dddgd      t        dddgd      t        ddd	gd      t        d
ddgd      t        dddgd      t        dddgd      t        dddgd      t        dddgd      t        dddgd      t        dddgd      t        dddgd      t        dddgd      t        dddgd      t        ddd gd      t        d!dd"gd      t        d#dd$gd      t        d%dd&gd      t        d'dd(gd      t        d)dd*gd      t        d+dd,gd      t        d-dd.gd      t        d/dd0gd      t        d1d2d3gd      t        d4d2d5gd      t        d6d7d8gd      t        d9d7d:gd      t        d;d7d<gd      t        d=d>d?gd      t        d@d>dAgd      t        dBd>dCgd      t        dDd>dEgd      t        dFdGdHgd      t        dIdGdJgd      t        dKdGdLgd      t        dMdNdOgd      t        dPdQdRgd      t        dSdGdTgd      t        dUdQdVgd      }| j                  j                  |       t        j                  dWt        |       dX       yY)Zu!   기본 이모티콘 패턴 로드u   👍positiveue   좋은 의견이네요! 😊 MLink에 대해 궁금한 점이 있으시면 언제든 물어보세요.Tu   👎negativeur   아쉬운 부분이 있으신가요? 😔 어떤 점이 불편하셨는지 알려주시면 도움을 드릴게요.u   😊uX   기분이 좋으시군요! 😄 오늘도 MLink와 함께 즐거운 하루 보내세요!u   😍u_   정말 마음에 드시나 봐요! 💕 MLink의 어떤 기능이 가장 인상적이었나요?u   😄u]   웃음이 가득하네요! 😊 MLink 사용하시면서 즐거운 경험이 있으셨나요?u   🤣ur   정말 재미있으신가봐요! 😆 혹시 MLink 관련해서 궁금한 점이 있으시면 말씀해 주세요.u   😉u@   윙크까지! 😄 MLink에 대해 무엇이든 물어보세요!u   😅neutraluW   조금 어색하신가요? 😊 천천히 MLink 기능들을 알아가시면 됩니다!u   😂uT   웃음이 터지셨나요? 😄 즐거운 마음으로 MLink를 사용해 보세요!u   🙃ux   장난스러우시네요! 😊 MLink에 대한 질문이나 궁금한 점이 있으시면 언제든 말씀해 주세요.u   😀uG   밝은 미소네요! 😊 오늘 MLink로 무엇을 도와드릴까요?u   😁uu   환한 웃음이군요! 😄 MLink 사용하시면서 도움이 필요한 부분이 있으시면 말씀해 주세요.u   🤔un   무언가 고민중이신가요? 🤗 MLink 관련해서 궁금한 점이 있으시면 도움을 드릴게요!u   😮uF   놀라셨나요? 😲 MLink의 새로운 기능을 발견하셨나요?u   🤨ux   의심스러운 표정이시네요? 🧐 MLink에 대해 확인하고 싶은 내용이 있으시면 말씀해 주세요!u   😇up   천사 같은 미소네요! 😇 MLink 사용에 대해 궁금한 점이 있으시면 언제든 물어보세요!u   😢ut   속상하신 일이 있으셨나요? 😔 MLink 사용에 어려움이 있으시면 차근차근 도와드릴게요.u   😞um   기분이 안 좋으신 것 같아요. 😟 MLink 관련해서 문제가 있으시면 해결해 드릴게요!u   😐uW   무표정이시네요. 😅 MLink에 대해 특별히 궁금한 점이 있으신가요?u   😠ur   화가 나셨나요? 😰 MLink 사용에 불편함이 있으셨다면 개선할 수 있도록 도와드릴게요!u   😤uj   답답하신가 봐요! 😮‍💨 어떤 부분에서 어려움을 겪고 계신지 말씀해 주세요.u   😭un   많이 속상하신가 봐요. 😢 MLink 사용에 어려움이 있으시면 언제든지 도와드릴게요!u   🐶animaluS   귀여운 강아지네요! 🐕 MLink도 충실한 파트너가 되어드릴게요!u   🐱ui   고양이를 좋아하시나요? 😸 MLink도 고양이처럼 유연하고 편리한 서비스입니다!u   🍎fooduj   사과 좋아하시나요? 🍏 MLink도 신선하고 건강한 비즈니스 솔루션을 제공합니다!u   🍕uW   피자 드시고 계신가요? 🍽️ MLink로 맛있는 성과를 만들어보세요!u   ☕uM   커피 한 잔 하시면서 MLink와 함께 생산성을 높여보세요! ☕u   ❤️loveua   사랑을 표현해 주셨네요! 💕 MLink도 고객님을 위해 최선을 다하겠습니다!u   💕uX   다정한 마음 감사해요! 🥰 MLink 사용에 대해 무엇이든 물어보세요!u   💖u_   반짝이는 마음이네요! ✨ MLink와 함께 빛나는 비즈니스를 만들어보세요!u   💙ub   푸른 하트가 멋지네요! 💙 MLink도 신뢰할 수 있는 파트너가 되어드릴게요!u   👏celebrationuP   박수를 쳐주시네요! 🎉 MLink의 어떤 부분이 인상적이었나요?u   🙌uS   만세를 부르시는군요! 🎊 MLink로 성공적인 결과를 얻으셨나요?u   🤝ub   함께하는 마음이 느껴지네요! 🤗 MLink와 함께 더 큰 성과를 만들어보세요!u   🔥
enthusiasmuP   열정이 넘치시네요! 🚀 MLink로 뜨거운 성과를 만들어보세요!u   ⭐achievementub   별처럼 빛나시네요! ✨ MLink도 여러분의 비즈니스를 빛나게 도워드릴게요!u   🎉uU   축하 기분이신가요? 🎊 MLink와 함께 더 많은 성취를 이뤄보세요!u   💯uZ   완벽하시네요! 👌 MLink도 100% 만족스러운 서비스를 제공하겠습니다!u*   기본 이모티콘 패턴 로드 완료: u   개N)r   r   extendlogginginfolen)r!   r   s     r   r   z+EmojiResponseManager._load_default_patterns   s   .
  /V  .W  Y]  ^.
   /c  .d  fj  k.
   /I  .J  LP  Q	.

   /P  .Q  SW  X.
   /N  .O  QU  V.
   /c  .d  fj  k.
 .p-qswx.
   .G  -H  JN  O.
   /E  .F  HL  M.
   /i  .j  lp  q.
 .w-xz~.
   /f  .g  im  n.
   .^  -_  ae  f.
 -u,vx|}.
    .h  -i  ko  p!.
"   /a  .b  dh  i#.
&   /e  .f  hl  m'.
(   /^  ._  ae  f).
*   .G  -H  JN  O+.
,   /c  .d  fj  k-.
.   /[  .\  ^b  c/.
0   /_  .`  bf  g1.
4   -B  ,C  EI  J5.
6   -X  ,Y  [_  `7.
:   +W  *X  Z^  _;.
<   +D  *E  GK  L=.
> )x(y{  A?.
B 6  -P  ,Q  SW  XC.
D   +E  *F  HL  ME.
F   +L  *M  OS  TG.
H   +O  *P  RV  WI.
L   2D  1E  GK  LM.
N   2G  1H  JN  OO.
P   2V  1W  Y]  ^Q.
T   1C  0D  FJ  KU.
V   1U  0V  X\  ]W.
X   2I  1J  LP  QY.
Z   2N  1O  QU  V[.
` 	"">2A#nBUAVVYZ[r   c           
         t         j                  j                  | j                        s| j	                          y	 t        | j                  dd      5 }t        j                  |      }ddd       j                  dg       D ]  }t        |d   |d   |d   |j                  d	d
            t        fd| j                  D              rJ| j                  j                         t        j                  dj                           y# 1 sw Y   xY w# t         $ r"}t        j"                  d|        Y d}~yd}~ww xY w)u!   설정 파일에서 패턴 로드Nrutf-8encodingr   r   r   r   r   Tr   r   r   r   c              3   P   K   | ]  }|j                   j                   k(    y wN)r   ).0ppatterns     r   	<genexpr>z9EmojiResponseManager._load_from_config.<locals>.<genexpr>e   s!     Q=P177gmm3=Ps   #&u0   설정 파일에서 이모티콘 패턴 로드: u1   이모티콘 패턴 설정 파일 로드 실패: )ospathexistsr   _save_to_configopenjsonloadgetr   anyr   appendr.   r/   r   	Exceptionwarning)r!   fconfig_data
emoji_dataer;   s        @r   r    z&EmojiResponseManager._load_from_configT   s   ww~~d../  "	Ud&&g>!"iil ? *oo.>C
&$W-'
3(5&NN9d;	 QT=P=PQQ''..w7LL#ST[TaTaSb!cd D ?>  	UOOOPQsSTT	Us6   D D+A#D ?D DD 	E$EEc                    	 t        j                  t         j                  j                  | j                        d       | j
                  D cg c]1  }|j                  |j                  |j                  |j                  d3 c}t        j                         j                         d}t        | j                  dd      5 }t        j                  ||dd	
       ddd       t!        j"                  d| j                          yc c}w # 1 sw Y   1xY w# t$        $ r"}t!        j&                  d|        Y d}~yd}~ww xY w)u(   현재 패턴을 설정 파일에 저장T)exist_okr6   )r   last_updatedwr3   r4   F   )ensure_asciiindentNu*   이모티콘 패턴 설정 저장 완료: u1   이모티콘 패턴 설정 파일 저장 실패: )r=   makedirsr>   dirnamer   r   r   r   r   r   r   now	isoformatrA   rB   dumpr.   r/   rG   error)r!   r:   rJ   rI   rL   s        r   r@   z$EmojiResponseManager._save_to_configl   s   	SKK(8(89DI "00# 1 "#$%JJ%&[[#$99	 1# !) 8 8 :K d&&g>!		+quQG ? LLEdFVFVEWXY# ?>  	SMMMaSQRR	SsB   AD 6D>D D*D D DD 	E!D>>Etextreturnc                 l    |j                         sy|j                  dd      }t        d |D              S )uG   문자열이 이모티콘(emoji)만으로 구성되어 있는지 확인F  c              3   d   K   | ](  }t        j                  |      j                  d        * yw)SoN)unicodedatar   
startswith)r9   chs     r   r<   z=EmojiResponseManager.is_emoji_only_message.<locals>.<genexpr>   s'     Rz;''+66t<zs   .0)stripreplaceall)r!   rZ   
clean_texts      r   is_emoji_only_messagez*EmojiResponseManager.is_emoji_only_message   s/    zz|\\#r*
RzRRRr   r   c           
         g }g } |j                          D ]  }t        j                  |      j                  d      s(|j	                  |       | j
                  D ]N  }|j                  s||j                  k(  s |j	                  t        j                  |j                                  |sdg g g dddddd	S dj                  |      |g g dddddd	S )uA   이모티콘 전용 메시지 처리 (복수 이모티콘 지원)r`   u-   이모티콘을 인식하지 못했습니다.r^   )	final_answeremojisoriginal_paragraphs_openoriginal_paragraphs_collapsedcollapsed_labelexpanded_label
referencesreference_labelreference_hide_labelr]   )rd   ra   r   rb   rF   r   r   r   randomchoicer   join)r!   r   r   rk   rc   r;   s         r   handle_emoji_messagez)EmojiResponseManager.handle_emoji_message   s    	'--/B##B'2248b!#22G2+>!((w7H7H)IJ  3 "  O,.13#%"$ #%(*
 
  HHY/(*-/! !$&

 
	
r   c                 t   i }| j                   D ];  }|j                  s|j                  |j                  d      dz   ||j                  <   = t	        | j                         t	        | j                   D cg c]  }|j                  s| c}      |t        j                         j                         dS c c}w )u   패턴 통계r      )total_patternsenabled_patterns
categoriesrO   )r   r   rD   r   r0   r   rV   rW   )r!   category_statsr;   r:   s       r   get_statisticsz#EmojiResponseManager.get_statistics   s    **G3A3E3EgFVFVXY3Z]^3^w//0 +
 "$"5"56 #0C0C$Q0C1qyyQ0C$Q R($LLN446	
 	
$Qs   4B5
B5
r8   )r   r   r   __doc__r   r"   r   r    r@   r   rh   dictrv   r   r}   r   r   r   r   r      sZ    7!C !3\jU0S0S# S$ S#
C #
D #
J
 
r   r   _emoji_manager_instancer[   c                  .    t         
t               a t         S r8   )r   r   r   r   r   _get_instancer      s    &"6"8""r   rZ   c                 4    t               j                  |       S r8   )r   rh   )rZ   s    r   rh   rh      s    ?0066r   r   c                 4    t               j                  |       S r8   )r   rv   r   s    r   rv   rv      s    ?//88r   )
email.mimer   r=   rB   rer.   ra   r   typingr   r   r   r	   dataclassesr
   rs   r   r   r   r   r   r   r   rh   r   rv   r   r   r   <module>r      s     	  	    ) ) ! 
  f
 f
V 15 - 4#+ #7 7 79# 9$ 9r   