§
    L¼©j©+  ã                   óÖ   — d 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	 ddl
mZmZ ddlZe G d„ d¦  «        ¦   «         Z G d„ d	¦  «        Z G d
„ d¦  «        Z G d„ d¦  «        ZdS )ug  
Module GiÃ¡m SÃ¡t & PhÃ¢n TÃ­ch GiÃ¡ Tin Nháº¯n Trade Tá»« Discord (Discord Trade Monitor)
Há»— trá»£ cáº£ 2 cÆ¡ cháº¿:
1. Tá»± Ä‘á»™ng qua Clipboard Sniffer (Báº¥m Ctrl+C báº¥t ká»³ tin nháº¯n nÃ o trong Discord -> Tool tá»± phÃ¢n tÃ­ch ngay).
2. Tá»± Ä‘á»™ng qua Discord Bot Gateway (Láº¯ng nghe 24/7 cÃ¡c kÃªnh trade Discord náº¿u cáº¥u hÃ¬nh Bot Token).
é    N)Ú	dataclass)ÚBaseHTTPRequestHandlerÚ
HTTPServer)ÚCallableÚOptionalc                   ót   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed	<   eed
<   dS )ÚDiscordTradeOfferÚraw_textÚactionÚ	item_nameÚquantityÚ
price_unitÚprice_currencyÚ
evaluationÚprofit_estimate_divÚgold_tax_neededÚsourceN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloat© ó    ú:C:\Projects\AutoPOE2\src\assistant_tool\discord_monitor.pyr	   r	      sv   € € € € € € à€M€M�MØ€K€K�KØ€N€N�NØ€M€M�MØÐÐÑØÐÐÑØ€O€O�OØÐÐÑØÐÐÑØ€K€K�K€K€Kr   r	   c            	       óD   — e Zd ZdZeddededee         fd„¦   «         ZdS )	ÚDiscordTradeParseruR   BÃ³c tÃ¡ch cÃº phÃ¡p tin nháº¯n mua bÃ¡n chuáº©n cá»™ng Ä‘á»“ng Discord PoE / TFT.úForbidden RiteÚtextÚcurrent_leagueÚreturnc                 óZ  — |                       ¦   «         }|                     ¦   «         }d }d|v sd|v rd}nd|v sd|v rd}nd S d|v rûd}t          j        d	|¦  «        }|r"t	          |                     d
¦  «        ¦  «        nd}t          j        d|¦  «        }|r"t          |                     d
¦  «        ¦  «        nd
}	|dk    rdnd}
d}|dk    r4|
|z
  }|dk    rd|› d|d›d�}||	z  }n:|dk     rd|› d| d›d�}n(d|› d�}n!||
z
  }|dk    rd|› d|d›d�}||	z  }nd |› d!�}t          ||||	|d"||d#|	z  d$¬%¦
  «
        S d&|v sd'|v råt          j        d(|¦  «        }t          j        d)|¦  «        }|r¹|r·t	          |                     d
¦  «        ¦  «        }t          |                     d
¦  «        ¦  «        }	|dk    rd*nd+}d}|dk    r#|d,k    r||z
  |	z  |z  }d-|› d.|d/›d0�}n)d1|› d2�}n"|d3k    r|d4z
  |	z  d4z  }d5|› d6|d/›d7�}nd8|› d9�}t          ||d:|	|d;||d<|	z  d$¬%¦
  «
        S d=|v rxt          j        d	|¦  «        }|r"t	          |                     d
¦  «        ¦  «        nd>}d?}
|
|z
  }t          d|¦  «        }d@|› dA|
› dB|d›dC�}t          ||dDd
|d"||dEd$¬%¦
  «
        S d S )FNÚwtsu   bÃ¡nÚWTSÚwtbÚmuaÚWTBÚsekhemazSekhema Keyz (\d+(?:\.\d+)?)\s*(?:div|divine)é   gÍÌÌÌÌÌ@u0   (?:wts|wtb|bÃ¡n|mua)?\s*(\d+)\s*(?:x\s*)?sekhemar    g333333@g333333@g        g333333Ó?u"   ðŸ”¥ KÃˆO Ráºº: NgÆ°á»�i bÃ¡n rao u    Div (Ráº» hÆ¡n giÃ¡ sÃ n z.1fu,    Div/chÃ¬a). Mua ngay bÃ¡n láº¡i Äƒn chÃªnh!g333333Ó¿u&   âš ï¸� GIÃ� Ä�áº®T: NgÆ°á»�i bÃ¡n rao u    Div (Ä�áº¯t hÆ¡n giÃ¡ sÃ n u    Div). KhÃ´ng nÃªn mua!u<   â„¹ï¸� GIÃ� CHUáº¨N: BÃ¡n Ä‘Ãºng giÃ¡ sÃ n thá»‹ trÆ°á»�ng (z Div).gš™™™™™É?u)   ðŸ’° KÃˆO Há»œI: KhÃ¡ch WTB mua giÃ¡ cao u    Div (Cao hÆ¡n sÃ n u    Div). HÃ£y bÃ¡n ngay!u   â„¹ï¸� KhÃ¡ch tráº£ u+    Div (Tháº¥p hÆ¡n hoáº·c báº±ng giÃ¡ sÃ n).ÚDivineiÂ  ÚDiscord)
r
   r   r   r   r   r   r   r   r   r   ÚdivineÚdivz(\d{2,3})\s*(?:c|chaos)z(\d+)\s*(?:div|divine)éŽ   éÃ   é„   u"   ðŸ”¥ KÃˆO Há»�I Ä�OÃ�I Ráºº: BÃ¡n u3   c/Div (Gom láº¡i rá»“i bÃ¡n sá»‰ 142c kiáº¿m lÃ£i ~z.2fz Div)!u   â„¹ï¸� Tá»· giÃ¡ u   c/Div (BÃ¬nh thÆ°á»�ng).éŒ   é‚   u   ðŸ’° KhÃ¡ch mua sá»‰ giÃ¡ cao u   c/Div. BÃ¡n ngay thu lÃ£i ~z Div!u!   â„¹ï¸� KhÃ¡ch tÃ¬m mua tá»· giÃ¡ zc/Div.zDivine Orb (Bulk)ÚChaosi^  Úomengš™™™™™	@gffffff@u!   ðŸ”® Ä�iá»�m BÃ¡o Omen: GiÃ¡ rao u     Div (Thá»‹ trÆ°á»�ng bÃ¡n sá»‰ u    Div. LÃ£i rÃ²ng ~u    Div/cÃ¡i)!zOmen of Greater Exaltationi,  )	ÚstripÚlowerÚreÚsearchr   Úgroupr   r	   Úmax)r!   r"   Ú
text_cleanÚ
text_lowerr   ÚitemÚm_priceÚpriceÚm_qtyÚqtyÚmarket_priceÚprofitÚdiffÚeval_strÚm_chaosÚ	m_div_qtyÚrateÚmarket_rates                     r   Úparse_messagez DiscordTradeParser.parse_message#   s¡  € à—Z’Z‘\”\ˆ
Ø×%Ò%Ñ'Ô'ˆ
ð ˆØ�JÐÐ &¨JÐ"6Ð"6ØˆFˆFØ�jÐ Ð  E¨ZÐ$7Ð$7ØˆFˆFà�4ð ˜
Ð"Ð"Ø ˆDå”iÐ CÀZÑPÔPˆGØ/6Ð?•E˜'Ÿ-š-¨Ñ*Ô*Ñ+Ô+Ð+¸CˆEå”IÐQÐS]Ñ^Ô^ˆEØ).Ð5•#�e—k’k !‘n”nÑ%Ô%Ð%°AˆCð #1Ð4DÒ"DÐ"D˜3˜3È#ˆLØˆFØ˜ŠˆØ# eÑ+�Ø˜#’:�:ð  \ÀEð   \ð   \Ðeið   \ð   \ð   \ð   \�HØ! C™Z�F�FØ˜D’[�[ð  NÈð   Nð   NÐlpÐkpð   Nð   Nð   Nð   N�H�HàkÐ^cÐkÐkÐk�H�Hà˜|Ñ+�Ø˜#’:�:ð  GÈ5ð   Gð   GÐfjð   Gð   Gð   Gð   G�HØ! C™Z�F�Fàh°eÐhÐhÐh�Hå$Ø#ØØØØ Ø'Ø#Ø$*Ø # c¡	Ø ðñ ô ð ð �zÐ!Ð! U¨jÐ%8Ð%8Ý”iÐ :¸JÑGÔGˆGÝœ	Ð";¸ZÑHÔHˆIØð ˜9ð Ý˜WŸ]š]¨1Ñ-Ô-Ñ.Ô.�Ý˜)Ÿ/š/¨!Ñ,Ô,Ñ-Ô-�Ø%3Ð7GÒ%GÐ%G˜c˜cÈS�à�Ø˜U’?�?Ø˜s’{�{Ø#.°Ñ#5¸Ñ"<ÀÑ!K˜ð $TÈð  $Tð  $Tð  BHð  $Tð  $Tð  $Tð  $T˜˜à#U°tÐ#UÐ#UÐ#U˜˜à˜s’{�{Ø#'¨#¡:°Ñ"4¸Ñ!;˜Ø#vÀDÐ#vÐ#vÐekÐ#vÐ#vÐ#vÐ#v˜˜à#SÀtÐ#SÐ#SÐ#S˜å(Ø'Ø!Ø1Ø Ø#Ø#*Ø'Ø(.Ø$'¨#¡IØ$ðñ ô ð ð �ZÐÐÝ”iÐ CÀZÑPÔPˆGØ/6Ð?•E˜'Ÿ-š-¨Ñ*Ô*Ñ+Ô+Ð+¸CˆEØˆLØ %Ñ'ˆDÝ˜˜d‘^”^ˆFð Z¸5ð  Zð  ZÐbnð  Zð  Zð  CIð  Zð  Zð  Zð  ZˆHÝ$Ø#ØØ6ØØ Ø'Ø#Ø$*Ø #Ø ðñ ô ð ð ˆtr   N)r    )	r   r   r   Ú__doc__Ústaticmethodr   r   r	   rL   r   r   r   r   r       sb   € € € € € Ø\Ð\àðrð r˜Cð r°ð rÈHÐUfÔLgð rð rð rñ „\ðrð rð rr   r   c                   óV   — e Zd ZdZdeegdf         deg ef         fd„Zd„ Zd„ Z	d„ Z
dS )	ÚClipboardTradeSnifferuw   Luá»“ng ngáº§m theo dÃµi Clipboard: Khi ngÆ°á»�i dÃ¹ng báº¥m Ctrl+C tin nháº¯n trÃªn Discord -> PhÃ¢n tÃ­ch tá»©c thÃ¬!ÚcallbackNÚget_league_fnc                 óL   — || _         || _        d| _        d | _        d| _        d S )NFÚ )rQ   rR   Ú_runningÚ_threadÚ
_last_text)ÚselfrQ   rR   s      r   Ú__init__zClipboardTradeSniffer.__init__œ   s*   € Ø ˆŒØ*ˆÔØˆŒØ37ˆŒØˆŒˆˆr   c                 ó†   — d| _         t          j        | j        d¬¦  «        | _        | j                             ¦   «          d S )NT©ÚtargetÚdaemon)rU   Ú	threadingÚThreadÚ_looprV   Ústart©rX   s    r   ra   zClipboardTradeSniffer.start£   s<   € ØˆŒÝ Ô'¨t¬zÀ$ÐGÑGÔGˆŒØŒ×ÒÑÔÐÐÐr   c                 ó   — d| _         d S )NF)rU   rb   s    r   ÚstopzClipboardTradeSniffer.stop¨   s   € ØˆŒˆˆr   c                 ó  — 	 dd l }dd l}dd l}|                     ddd|j        ¦  «        }|j        j                             t          |¦  «        ¦  «         n# t          $ r Y nw xY w| j
        �r	 t          j        ¦   «          t          j        t          j        ¦  «        rt          j        t          j        ¦  «        }nd }t          j        ¦   «          |rY|| j        k    rN|| _        |                      ¦   «         }t&                               ||¬¦  «        }|r|                      |¦  «         n5# t          $ r( 	 t          j        ¦   «          n# t          $ r Y nw xY wY nw xY wt-          j        d¦  «         | j
        �°d S d S )Nr   ÚDefaultF©r"   gš™™™™™Ù?)ÚctypesÚwin32conÚwin32serviceÚOpenDesktopÚGENERIC_ALLÚwindllÚuser32ÚSetThreadDesktopr   Ú	ExceptionrU   Úwin32clipboardÚOpenClipboardÚIsClipboardFormatAvailableÚCF_UNICODETEXTÚGetClipboardDataÚCloseClipboardrW   rR   r   rL   rQ   ÚtimeÚsleep)rX   rh   ri   rj   Úh_deskÚdataÚleagueÚoffers           r   r`   zClipboardTradeSniffer._loop«   sÅ  € ð	ØˆMˆMˆMàˆOˆOˆOØÐÐÐØ!×-Ò-¨i¸¸EÀ8ÔCWÑXÔXˆFØŒMÔ ×1Ò1µ#°f±+´+Ñ>Ô>Ð>Ð>øÝð 	ð 	ð 	ØˆDð	øøøð Œmñ 	ðÝÔ,Ñ.Ô.Ð.Ý!Ô<½^Ô=ZÑ[Ô[ð  Ý)Ô:½>Ô;XÑYÔY�D�Dà�DÝÔ-Ñ/Ô/Ð/àð -˜D D¤OÒ3Ð3Ø&*�D”Oà!×/Ò/Ñ1Ô1�FÝ.×<Ò<¸TÐRXÐ<ÑYÔY�EØð -ØŸš eÑ,Ô,Ð,øøÝð ð ð ðÝ"Ô1Ñ3Ô3Ð3Ð3øÝ ð ð ð Ø�Dðøøøøøðøøøõ ŒJ�s‰OŒOˆOð- Œmñ 	ð 	ð 	ð 	ð 	sI   ‚AA Á
A%Á$A%Á1C D2 Ä2
E$Ä=EÅE$Å
EÅE$ÅEÅE$Å#E$)r   r   r   rM   r   r	   r   rY   ra   rd   r`   r   r   r   rP   rP   ™   sŠ   € € € € € ð Bð  Bð Ð+<Ð*=¸tÐ*CÔ!Dð ÐU]Ð^`ÐbeÐ^eÔUfð ð ð ð ðð ð ð
ð ð ð!ð !ð !ð !ð !r   rP   c                   óV   — e Zd ZdZd
deegdf         deg ef         defd„Zd„ Z	d	„ Z
dS )ÚLocalDiscordBridgeServeruu   MÃ¡y chá»§ cáº§u ná»‘i cá»¥c bá»™ (Local Webhook Bridge) nháº­n tin nháº¯n tá»± Ä‘á»™ng tá»« Discord Web / Extension.é="  rQ   NrR   Úportc                 óL   — || _         || _        || _        d | _        d | _        d S ©N)rQ   rR   r€   Ú_serverrV   )rX   rQ   rR   r€   s       r   rY   z!LocalDiscordBridgeServer.__init__Ò   s*   € Ø ˆŒØ*ˆÔØˆŒ	ØˆŒØˆŒˆˆr   c                 óˆ  ‡— | Š G ˆfd„dt           ¦  «        }	 t          d| j        f|¦  «        | _        t	          j        | j        j        d¬¦  «        | _        | j                             ¦   «          t          d| j        › d�d¬¦  «         d S # t          $ r'}t          d	| j        › d
|› �d¬¦  «         Y d }~d S d }~ww xY w)Nc                   ó&   •— e Zd Zˆ fd„Zd„ Zd„ ZdS )ú6LocalDiscordBridgeServer.start.<locals>.WebhookHandlerc                 ód  •— | j         dk    �ry	 t          | j                             dd¦  «        ¦  «        }| j                             |¦  «        }t          j        |                     d¦  «        ¦  «        }|                     dd¦  «        }‰ 	                    ¦   «         }t                               ||¬¦  «        }|rd|_        ‰                     |¦  «         |                      d	¦  «         |                      d
d¦  «         |                      dd¦  «         |                      ¦   «          | j                             d¦  «         d S # t&          $ r- |                      d¦  «         |                      ¦   «          Y d S w xY w|                      d¦  «         |                      ¦   «          d S )Nú/api/discord_messagezContent-Lengthr   zutf-8r!   rT   rg   zDiscord Web StreaméÈ   zContent-typezapplication/jsonúAccess-Control-Allow-OriginÚ*s   {"status": "success"}iô  i”  )Úpathr   ÚheadersÚgetÚrfileÚreadÚjsonÚloadsÚdecoderR   r   rL   r   rQ   Úsend_responseÚsend_headerÚend_headersÚwfileÚwriterp   )rX   Úcontent_lengthÚ	post_datarz   r!   r{   r|   Úparent_selfs          €r   Údo_POSTz>LocalDiscordBridgeServer.start.<locals>.WebhookHandler.do_POSTÝ   s°  ø€ Ø”9Ð 6Ò6Ñ6ð+Ý),¨T¬\×-=Ò-=Ð>NÐPQÑ-RÔ-RÑ)SÔ)S˜Ø$(¤J§O¢O°NÑ$CÔ$C˜	Ý#œz¨)×*:Ò*:¸7Ñ*CÔ*CÑDÔD˜Ø#Ÿxšx¨°Ñ3Ô3˜à!,×!:Ò!:Ñ!<Ô!<˜Ý 2× @Ò @ÀÐV\Ð @Ñ ]Ô ]˜Ø ð 8Ø+?˜EœLØ'×0Ò0°Ñ7Ô7Ð7à×*Ò*¨3Ñ/Ô/Ð/Ø×(Ò(¨Ð9KÑLÔLÐLØ×(Ò(Ð)FÈÑLÔLÐLØ×(Ò(Ñ*Ô*Ð*Øœ
×(Ò(Ð)AÑBÔBÐBÐBÐBøÝ$ð +ð +ð +Ø×*Ò*¨3Ñ/Ô/Ð/Ø×(Ò(Ñ*Ô*Ð*Ð*Ð*Ð*ð+øøøð ×&Ò& sÑ+Ô+Ð+Ø×$Ò$Ñ&Ô&Ð&Ð&Ð&s   �D<E Å3FÆFc                 óÜ   — |                       d¦  «         |                      dd¦  «         |                      dd¦  «         |                      dd¦  «         |                      ¦   «          d S )Nr‰   rŠ   r‹   zAccess-Control-Allow-MethodszPOST, OPTIONSzAccess-Control-Allow-HeaderszContent-Type)r”   r•   r–   rb   s    r   Ú
do_OPTIONSzALocalDiscordBridgeServer.start.<locals>.WebhookHandler.do_OPTIONS÷   ss   € Ø×"Ò" 3Ñ'Ô'Ð'Ø× Ò Ð!>ÀÑDÔDÐDØ× Ò Ð!?ÀÑQÔQÐQØ× Ò Ð!?ÀÑPÔPÐPØ× Ò Ñ"Ô"Ð"Ð"Ð"r   c                 ó   — d S r‚   r   )rX   ÚformatÚargss      r   Úlog_messagezBLocalDiscordBridgeServer.start.<locals>.WebhookHandler.log_messageþ   s   € Ø�r   N)r   r   r   rœ   rž   r¢   )r›   s   €r   ÚWebhookHandlerr†   Ü   sL   ø€ € € € € ð'ð 'ð 'ð 'ð 'ð4#ð #ð #ðð ð ð ð r   r£   z	127.0.0.1Tr[   uX   [DiscordBridge] Cá»•ng nháº­n tin nháº¯n tá»± Ä‘á»™ng Ä‘ang má»Ÿ táº¡i http://127.0.0.1:rˆ   )Úflushu)   [DiscordBridge] KhÃ´ng thá»ƒ má»Ÿ cá»•ng z: )r   r   r€   rƒ   r^   r_   Úserve_foreverrV   ra   Úprintrp   )rX   r£   Úer›   s      @r   ra   zLocalDiscordBridgeServer.startÙ   s5  ø€ Øˆð#	ð #	ð #	ð #	ð #	ð #	ð #	Õ3ñ #	ô #	ð #	ðJ	\Ý% {°D´IÐ&>ÀÑOÔOˆDŒLÝ$Ô+°4´<Ô3MÐVZÐ[Ñ[Ô[ˆDŒLØŒL×ÒÑ Ô Ð Ýð  MÐmqÔmvð  Mð  Mð  Mð  UYð  Zñ  Zô  Zð  Zð  Zð  ZøÝð 	\ð 	\ð 	\ÝÐN¸d¼iÐNÐNÈ1ÐNÐNÐVZÐ[Ñ[Ô[Ð[Ð[Ð[Ð[Ð[Ð[Ð[øøøøð	\øøøs   šA4B Â
CÂB<Â<Cc                 óJ   — | j         r| j                              ¦   «          d S d S r‚   )rƒ   Úshutdownrb   s    r   rd   zLocalDiscordBridgeServer.stop	  s0   € ØŒ<ð 	$ØŒL×!Ò!Ñ#Ô#Ð#Ð#Ð#ð	$ð 	$r   )r   )r   r   r   rM   r   r	   r   r   rY   ra   rd   r   r   r   r~   r~   Ï   s†   € € € € € ØÐðð  Ð+<Ð*=¸tÐ*CÔ!Dð ÐU]Ð^`ÐbeÐ^eÔUfð Ðnqð ð ð ð ð.\ð .\ð .\ð`$ð $ð $ð $ð $r   r~   )rM   r‘   r9   r^   rw   Údataclassesr   Úhttp.serverr   r   Útypingr   r   rq   r	   r   rP   r~   r   r   r   ú<module>r­      sF  ððð ð €€€Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð ð ð
ð 
ð 
ð 
ð 
ñ 
ô 
ñ „ð
ðvð vð vð vð vñ vô vð vðr3ð 3ð 3ð 3ð 3ñ 3ô 3ð 3ðl<$ð <$ð <$ð <$ð <$ñ <$ô <$ð <$ð <$ð <$r   