
    Bi.                         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dS )    messageN)datetime)ListDictSetTuple)	dataclassc                   H    e Zd ZU eed<   eed<   ee         ed<   dZeed<   dS )EmojiPatternemojicategory	responsesTenabledN)__name__
__module____qualname__str__annotations__r   r   bool     Q/var/www/html/web/mlink/mlink_AI_Server/mlink-backend/src/routes/emoji_manager.pyr   r      sD         JJJMMM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dS )EmojiResponseManageru-   이모티콘 응답을 관리하는 클래스Nconfig_filec                 v    g | _         |pd| _        |                                  |                                  d S )Nz./config/emoji_patterns.json)emoji_patternsr   _load_default_patterns_load_from_config)selfr   s     r   __init__zEmojiResponseManager.__init__   sB    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                            |           t          j        dWt          |           dX           dYS )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  k.
   /I  .J  LP  Q  Q	.

   /P  .Q  SW  X  X.
   /N  .O  QU  V  V.
   /c  .d  fj  k  k.
 .p-qswxx.
   .G  -H  JN  O  O.
   /E  .F  HL  M  M.
   /i  .j  lp  q  q.
 .w-xz~.
   /f  .g  im  n  n.
   .^  -_  ae  f  f.
 -u,vx|}}.
    .h  -i  ko  p  p!.
"   /a  .b  dh  i  i#.
&   /e  .f  hl  m  m'.
(   /^  ._  ae  f  f).
*   .G  -H  JN  O  O+.
,   /c  .d  fj  k  k-.
.   /[  .\  ^b  c  c/.
0   /_  .`  bf  g  g1.
4   -B  ,C  EI  J  J5.
6   -X  ,Y  [_  `  `7.
:   +W  *X  Z^  _  _;.
<   +D  *E  GK  L  L=.
> )x(y{  A  A?.
B 6  -P  ,Q  SW  X  XC.
D   +E  *F  HL  M  ME.
F   +L  *M  OS  T  TG.
H   +O  *P  RV  W  WI.
L   2D  1E  GK  L  LM.
N   2G  1H  JN  O  OO.
P   2V  1W  Y]  ^  ^Q.
T   1C  0D  FJ  K  KU.
V   1U  0V  X\  ]  ]W.
X   2I  1J  LP  Q  QY.
Z   2N  1O  QU  V  V[.
` 	"">222Z#nBUBUZZZ[[[[[r   c           
         t           j                            | j                  s|                                  dS 	 t          | j        dd          5 }t          j        |          }ddd           n# 1 swxY w Y   |                    dg           D ]}t          |d         |d         |d         |                    d	d
                    t          fd| j        D                       s6| j                                       t          j        dj                    dS # t           $ r"}t          j        d|            Y d}~dS d}~ww xY w)u!   설정 파일에서 패턴 로드Nrutf-8encodingr   r   r   r   r   Tr   r   r   r   c              3   8   K   | ]}|j         j         k    V  d S N)r   ).0ppatterns     r   	<genexpr>z9EmojiResponseManager._load_from_config.<locals>.<genexpr>e   s,      QQ17gm3QQQQQQr   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   w~~d.// 	  """F	Ud&g>>> +!"ill+ + + + + + + + + + + + + + + *oo.>CC 	e 	e
&$W-'
3(5&NN9d;;	   QQQQT=PQQQQQ e'..w777L!cT[Ta!c!cddd	e 	e  	U 	U 	UOSPQSSTTTTTTTTT	Us<   D* A5)D* 5A99D* <A9=B+D* *
E4EEc                 
   	 t          j        t           j                            | j                  d           d | j        D             t          j                                                    d}t          | j        dd          5 }t          j        ||dd	
           ddd           n# 1 swxY w Y   t          j        d| j                    dS # t          $ r"}t          j        d|            Y d}~dS d}~ww xY w)u(   현재 패턴을 설정 파일에 저장T)exist_okc                 D    g | ]}|j         |j        |j        |j        d S )r6   r6   r9   r:   s     r   
<listcomp>z8EmojiResponseManager._save_to_config.<locals>.<listcomp>q   sE     # # #  "#$%J%&[#$9	 # # #r   )r   last_updatedwr3   r4   F   )ensure_asciiindentNu*   이모티콘 패턴 설정 저장 완료: u1   이모티콘 패턴 설정 파일 저장 실패: )r=   makedirsr>   dirnamer   r   r   now	isoformatrA   rB   dumpr.   r/   rG   error)r!   rJ   rI   rL   s       r   r@   z$EmojiResponseManager._save_to_configl   sy   	SK(899DIIII# # "0# # # !) 8 8 : : K d&g>>> H!	+quQGGGGH H H H H H H H H H H H H H H LXdFVXXYYYYY 	S 	S 	SMQaQQRRRRRRRRR	Ss<   BC B-!C -B11C 4B15C 
D C==Dtextreturnc                     |                                 sdS |                    dd          }t          d |D                       S )uG   문자열이 이모티콘(emoji)만으로 구성되어 있는지 확인F  c              3   d   K   | ]+}t          j        |                              d           V  ,dS )SoN)unicodedatar   
startswith)r9   chs     r   r<   z=EmojiResponseManager.is_emoji_only_message.<locals>.<genexpr>   s;      RR;'++66t<<RRRRRRr   )stripreplaceall)r!   r]   
clean_texts      r   is_emoji_only_messagez*EmojiResponseManager.is_emoji_only_message   sG    zz|| 	5\\#r**
RRzRRRRRRr   r   c           
         g }g } |j                     D ]}t          j        |                              d          r_|                    |           | j        D ]B}|j        r9||j        k    r.|                    t          j	        |j
                              nC|sdg g g dddddd	S d                    |          |g g dddddd	S )uA   이모티콘 전용 메시지 처리 (복수 이모티콘 지원)rc   u-   이모티콘을 인식하지 못했습니다.ra   )	final_answeremojisoriginal_paragraphs_openoriginal_paragraphs_collapsedcollapsed_labelexpanded_label
referencesreference_labelreference_hide_labelr`   )rg   rd   r   re   rF   r   r   r   randomchoicer   join)r!   r   r   rn   rf   r;   s         r   handle_emoji_messagez)EmojiResponseManager.handle_emoji_message   s   	'-// 	 	B#B''22488 b!!!#2  G 2+>+>!((w7H)I)IJJJ 	 O,.13#%"$ #%(*
 
 
  HHY//(*-/! !$&

 

 
	
r   c                 $   i }| j         D ]/}|j        r&|                    |j        d          dz   ||j        <   0t	          | j                   t	          d | j         D                       |t          j                                                    dS )u   패턴 통계r      c                      g | ]}|j         	|S r   )r   rP   s     r   rQ   z7EmojiResponseManager.get_statistics.<locals>.<listcomp>   s    $Q$Q$Q1qy$QQ$Q$Q$Qr   )total_patternsenabled_patterns
categoriesrR   )r   r   rD   r   r0   r   rY   rZ   )r!   category_statsr;   s      r   get_statisticsz#EmojiResponseManager.get_statistics   s    * 	_ 	_G _3A3E3EgFVXY3Z3Z]^3^w/0 "$"566 #$Q$Q0C$Q$Q$Q R R($LNN4466	
 
 	
r   r8   )r   r   r   __doc__r   r"   r   r    r@   r   rk   dictry   r   r   r   r   r   r   r      s        77! !C ! ! ! !3\ 3\ 3\jU U U0S S S0S# S$ S 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"8""r   r]   c                 D    t                                          |           S r8   )r   rk   )r]   s    r   rk   rk      s    ??00666r   r   c                 D    t                                          |           S r8   )r   ry   r   s    r   ry   ry      s    ??//888r   )
email.mimer   r=   rB   rer.   rd   r   typingr   r   r   r	   dataclassesr
   rv   r   r   r   r   r   r   r   rk   r   ry   r   r   r   <module>r      s|          				  				            ) ) ) ) ) ) ) ) ) ) ) ) ! ! ! ! ! ! 
       f
 f
 f
 f
 f
 f
 f
 f
V 15 - 4 4 4#+ # # # #7 7 7 7 7 79# 9$ 9 9 9 9 9 9r   