§
    E«jÎ  ã                   óà   — U d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZ eej                 Zeed
<    ej        e¦  «        Z G d„ d¦  «        Z G d„ d¦  «        ZdS )z0Allows lichess-bot to send messages to the chat.é    N)Úmodel)ÚEngineWrapper)ÚLichess)ÚGameEventType)ÚSequence)Úseconds)Ú	TypeAliasÚMULTIPROCESSING_LIST_TYPEc                   ó"   — e Zd ZdZdeddfd„ZdS )ÚChatLineúInformation about the message.Úmessage_infoÚreturnNc                 óX   — |d         | _         	 |d         | _        	 |d         | _        dS )r   ÚroomÚusernameÚtextN©r   r   r   )Úselfr   s     ú+/app/lichess-bot-master/lib/conversation.pyÚ__init__zChatLine.__init__   s2   € à  Ô(ˆŒ	ØUØ$ ZÔ0ˆŒØ@Ø  Ô(ˆŒ	ØÐó    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   © r   r   r   r      s<   € € € € € Ø(Ð(ð  ]ð  °tð  ð  ð  ð  ð  ð  r   r   c                   óŒ   — e Zd ZdZdej        dededede	ddfd	„Z
d
Zdeddfd„Zdededdfd„Zdededdfd„Zdededdfd„ZdS )ÚConversationzDEnables the bot to communicate with its opponent and the spectators.ÚgameÚengineÚliÚversionÚchallenge_queuer   Nc                 óZ   — || _         || _        || _        || _        || _        g | _        dS )az  
        Communication between lichess-bot and the game chats.

        :param game: The game that the bot will send messages to.
        :param engine: The engine playing the game.
        :param li: A class that is used for communication with lichess.
        :param version: The lichess-bot version.
        :param challenge_queue: The active challenges the bot has.
        N)r    r!   r"   r#   ÚchallengersÚmessages)r   r    r!   r"   r#   r$   s         r   r   zConversation.__init__   s3   € ð ˆŒ	ØˆŒØˆŒØˆŒØ*ˆÔØ(*ˆŒˆˆr   ú!Úlinec           
      ól  — | j                              |¦  «         t                               d| j                             ¦   «         › d|j        › d|j        › d|j        › �¦  «         |j        d         | j	        k    r7|  
                    ||j        dd…                              ¦   «         ¦  «         dS dS )zc
        React to a received message.

        :param line: Information about the message.
        ú*** ú [ú] ú: r   é   N)r'   ÚappendÚloggerÚinfor    Úurlr   r   r   Úcommand_prefixÚcommandÚlower)r   r)   s     r   ÚreactzConversation.react3   s©   € ð 	Œ×Ò˜TÑ"Ô"Ð"Ý�ŠÐW˜4œ9Ÿ=š=™?œ?ÐWÐW¨d¬iÐWÐW¸4¼=ÐWÐWÈDÌIÐWÐWÑXÔXÐXØŒ9�QŒ<˜4Ô.Ò.Ð.Ø�LŠL˜˜tœy¨¨¨œ}×2Ò2Ñ4Ô4Ñ5Ô5Ð5Ð5Ð5ð /Ð.r   Úcmdc           	      óî  — |j         | j        j         k    }|                     d¦  «        }|dv r|                      |d¦  «         dS |dk    rt| j                             ¦   «         r[| j                             t          d¦  «        t          d¦  «        t          d¦  «        ¦  «         |                      |d¦  «         dS |dk    rN| j        j        j        }|                      ||› d	| j	                             ¦   «         › d
| j
        › d�¦  «         dS |rS|s|j        dk    rF| j	                             d¬¦  «        }|                      |d                     |¦  «        ¦  «         dS |r|                      |d¦  «         dS |dk    rk| j        rLd                     d„ t          | j        ¦  «        D ¦   «         ¦  «        }|                      |d|› �¦  «         dS |                      |d¦  «         dS dS )z 
        Reacts to the specific commands in the chat.

        :param line: Information about the message.
        :param cmd: The command to react to.
        Úeval)ÚcommandsÚhelpzsSupported commands: !wait (wait a minute for my first move), !name, !eval (or any text starting with !eval), !queueÚwaité<   éx   zWaiting 60 seconds...Únamez	 running z (lichess-bot vú)Ú	spectatorT)Úfor_chatz, z(I don't tell that to my opponent, sorry.Úqueuec                 ó,   — g | ]}d |j         j        › �‘ŒS )ú@)Ú
challengerr@   )Ú.0rG   s     r   ú
<listcomp>z(Conversation.command.<locals>.<listcomp>X   s'   € Ð(wÐ(wÐ(wÈjÐ)I¨ZÔ-BÔ-GÐ)IÐ)IÐ(wÐ(wÐ(wr   zChallenge queue: zNo challenges queued.N)r   r    Ú
startswithÚ
send_replyÚis_abortableÚpingr   Úmer@   r!   r#   r   Ú	get_statsÚjoinr&   Úreversed)r   r)   r8   Ú	from_selfÚis_evalr@   Ústatsr&   s           r   r5   zConversation.command>   s  € ð ”M T¤YÔ%7Ò7ˆ	Ø—.’. Ñ(Ô(ˆØÐ&Ð&Ð&Ø�OŠO˜DðNñOô Oð Oð Oð Oð �FŠ]ˆ]˜tœy×5Ò5Ñ7Ô7ˆ]ØŒI�NŠN�7 2™;œ;­°©¬µg¸c±l´lÑCÔCÐCØ�OŠO˜DÐ"9Ñ:Ô:Ð:Ð:Ð:Ø�FŠ]ˆ]Ø”9”<Ô$ˆDØ�OŠO˜D TÐ"fÐ"f°D´K×4DÒ4DÑ4FÔ4FÐ"fÐ"fÐW[ÔWcÐ"fÐ"fÐ"fÑgÔgÐgÐgÐgØð 
	?˜)ð 
	? t¤y°KÒ'?Ð'?Ø”K×)Ò)°4Ð)Ñ8Ô8ˆEØ�OŠO˜D $§)¢)¨EÑ"2Ô"2Ñ3Ô3Ð3Ð3Ð3Øð 	?Ø�OŠO˜DÐ"LÑMÔMÐMÐMÐMØ�GŠ^ˆ^ØÔð ?Ø"ŸišiÐ(wÐ(wÕ\dÐeiÔeuÑ\vÔ\vÐ(wÑ(wÔ(wÑxÔx�Ø—’ Ð&G¸+Ð&GÐ&GÑHÔHÐHÐHÐHà—’ Ð&=Ñ>Ô>Ð>Ð>Ð>ð ˆ^r   Úreplyc           
      óô   — t                                d| j                             ¦   «         › d|j        › d| j        j        › d|› �¦  «         | j                             | j        j        |j        |¦  «         dS )z¥
        Send the reply to the chat.

        :param line: Information about the original message that we reply to.
        :param reply: The reply to send.
        r+   r,   r-   r.   N)	r1   r2   r    r3   r   r   r"   ÚchatÚid)r   r)   rU   s      r   rK   zConversation.send_reply]   sm   € õ 	�ŠÐX˜4œ9Ÿ=š=™?œ?ÐXÐX¨d¬iÐXÐX¸4¼9Ô;MÐXÐXÐQVÐXÐXÑYÔYÐYØŒ�Š�T”Y”\ 4¤9¨eÑ4Ô4Ð4Ð4Ð4r   r   Úmessagec                 ó\   — |r)|                       t          |dddœ¦  «        |¦  «         dS dS )zSend the message to the chat.Ú r   N)rK   r   )r   r   rY   s      r   Úsend_messagezConversation.send_messageg   sD   € àð 	[Ø�OŠO�H¨dÀÈBÐ%OÐ%OÑPÔPÐRYÑZÔZÐZÐZÐZð	[ð 	[r   )r   r   r   r   r   ÚGamer   r   Ústrr
   r   r4   r   r7   r5   rK   r\   r   r   r   r   r      s
  € € € € € ØNÐNð+˜UœZð +°ð +ÀGð +ÐVYð +Ø";ð+Ø@Dð+ð +ð +ð +ð$ €Nð	6˜(ð 	6 tð 	6ð 	6ð 	6ð 	6ð?˜Hð ?¨3ð ?°4ð ?ð ?ð ?ð ?ð>5˜xð 5°ð 5¸ð 5ð 5ð 5ð 5ð[ ð [¨sð [°tð [ð [ð [ð [ð [ð [r   r   )r   ÚloggingÚlibr   Úlib.engine_wrapperr   Úlib.lichessr   Úlib.lichess_typesr   Úcollections.abcr   Ú	lib.timerr   Útypingr	   Ú	Challenger
   Ú__annotations__Ú	getLoggerr   r1   r   r   r   r   r   ú<module>rj      s-  ðØ 6Ð 6Ð 6Ø €€€Ø Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø'/°´Ô'@Ð ˜9Ð @Ð @Ñ @à	ˆÔ	˜8Ñ	$Ô	$€ð
 ð 
 ð 
 ð 
 ð 
 ñ 
 ô 
 ð 
 ðN[ð N[ð N[ð N[ð N[ñ N[ô N[ð N[ð N[ð N[r   