o
    Q?lj7  ã                   @   s  d dl Z d dlZd dlZd dlmZ dee fdd„Zdedefdd„Z	dede
fd	d
„Zdede
de
dee
B fdd„Zdefdd„Zdddddddddddœ
Zde
dedB fdd„Zdede
de
dee
B fdd „Zdede
fd!d"„Zdede
dB fd#d$„Zdefd%d&„ZdS )'é    N)ÚloggerÚreturnc                  C   sx   t j t j t¡d¡} z t| ddd}t |¡W  d   ƒ W S 1 s$w   Y  W d S  ty;   t	 
d¡ g  Y S w )Nz
words.jsonÚrzutf-8)Úencodingu   åŠ è½½å§åº•è¯åº“å¤±è´¥)ÚosÚpathÚjoinÚdirnameÚ__file__ÚopenÚjsonÚloadÚ	Exceptionr   Ú	exception)r   Úf© r   ú4/home/dore/onebot/Bot_Ero/plugins/who_is_spy/game.pyÚ_load_words   s   (ÿ
þr   Úroomc                    s~  t ƒ }|sdS |  dg ¡‰ ‡ fdd„|D ƒ}|s|}t |¡}|d | d< |d | d< | d  |d ¡ t| d ƒd	krF| d d
d … | d< t| d ƒ}|dkrSd}n|dkr_t ddg¡}nd}t| d  ¡ ƒ}t |¡ t	|d |… ƒ}|D ]!}| d | }	||v rd|	d< |d |	d< qxd|	d< |d |	d< qxdd„ t
d|d ƒD ƒ}
t |
¡ t||
ƒD ]\}}|| d | d< q°dS )NFÚword_historyc                    s   g | ]
}|d  ˆ vr|‘qS )Úcivilianr   )Ú.0Úw©Úusedr   r   Ú
<listcomp>   ó    z assign_words.<locals>.<listcomp>r   Úcivilian_wordÚspyÚspy_wordé
   iöÿÿÿÚplayersé   é   é   é   ÚroleÚwordc                 S   s   g | ]}|› d ‘qS )õ   å·r   )r   Úir   r   r   r   8   s    ÚaliasT)r   ÚgetÚrandomÚchoiceÚappendÚlenÚlistÚkeysÚshuffleÚsetÚrangeÚzip)r   ÚwordsÚ
candidatesÚpairÚtotalÚ	spy_countÚpidsÚspy_idsÚpidÚpÚaliasesr*   r   r   r   Úassign_words   sD   


r@   c                 C   sl   | d dkrdS t | d ƒ|  dd¡k rd|  dd¡› dS t| ƒs$d	S d
| d< d| d< i | d< i | d< dS )NÚphaseÚwaitingu   æ¸¸æˆå·²å¼€å§‹r!   Úmin_playersé   u   äººæ•°ä¸è¶³ï¼Œè‡³å°‘éœ€è¦ u    äººu'   è¯åº“åŠ è½½å¤±è´¥ï¼Œæ— æ³•å¼€å§‹æ¸¸æˆÚplaying_describer#   Ú	round_numÚready_descriptionsÚvotesÚok)r/   r+   r@   ©r   r   r   r   Ú
start_game@   s   rK   Úuser_idÚ	text_bodyc                 C   s|   | d dkrdS | d   |¡}|r|d sdS || d v rdS || d |< d	d
„ | d  ¡ D ƒ}t| d ƒt|ƒkr<dS dS )NrA   rE   u   å½“å‰ä¸æ˜¯æè¿°é˜¶æ®µr!   Úaliveõ   ä½ å·²å‡ºå±€rG   u   ä½ å·²ç»æè¿°è¿‡äº†c                 S   ó   g | ]
\}}|d  r|‘qS ©rN   r   ©r   r=   Úppr   r   r   r   Z   r   z'collect_description.<locals>.<listcomp>TF)r+   Úitemsr/   )r   rL   rM   r>   rN   r   r   r   Úcollect_descriptionO   s   rU   c                 C   s   d| d< i | d< d S )NÚplaying_voterA   rH   r   rJ   r   r   r   Úadvance_to_voting`   s   rW   r#   r%   rD   é   r"   é   é   r$   é	   r    )
u   â‘ u   â‘¡u   â‘¢u   â‘£u   â‘¤u   â‘¥u   â‘¦u   â‘§u   â‘¨u   â‘©Úrawc                 C   sF   |   ¡ } | tv rt|  S |  d¡  ¡ } zt| ƒW S  ty"   Y d S w )Nr(   )ÚstripÚCIRCLEDÚrstripÚintÚ
ValueError)r\   r   r   r   Ú_parse_voteh   s   
ÿrb   c           	      C   sà   | d dkrdS | d   |¡}|r|d sdS || d v rdS t|ƒ}|d u r)d	S d }| d  ¡ D ]\}}|d rF|d
  t|ƒ¡rF|} nq1|sKdS ||krQdS || d |< dd„ | d  ¡ D ƒ}t| d ƒt|ƒkrndS dS )NrA   rV   u   å½“å‰ä¸æ˜¯æŠ•ç¥¨é˜¶æ®µr!   rN   rO   rH   u   ä½ å·²ç»æŠ•è¿‡ç¥¨äº†u&   è¯·å›žå¤çŽ©å®¶ç¼–å·ï¼ˆå¦‚ 1 / â‘ ï¼‰r*   u'   æ— æ•ˆçš„ç¼–å·ï¼Œè¯·è¾“å…¥æ­£ç¡®ç¼–å·u   ä¸èƒ½æŠ•ç»™è‡ªå·±c                 S   rP   rQ   r   rR   r   r   r   r   ‹   r   z collect_vote.<locals>.<listcomp>TF)r+   rb   rT   Ú
startswithÚstrr/   )	r   rL   r\   r>   Ú
target_numÚtargetr=   rS   rN   r   r   r   Úcollect_votes   s2   €rg   c                    sò   i ‰ | d   ¡ D ]}ˆ  |d¡d ˆ |< qˆ rtˆ   ¡ ƒnd‰‡fdd„ˆ  ¡ D ƒ}t|ƒdkr5|d }n!dd„ | d  ¡ D ƒ}‡ fdd„|D ƒ}|rQt |¡}nt |¡}d	| d | d
< | d t| d ƒt| d ƒˆ |dœ}| d  |¡ |S )NrH   r   r#   c                    s   g | ]
\}}|ˆ kr|‘qS r   r   )r   ÚuidÚc)Ú	max_votesr   r   r   —   r   ztally_votes.<locals>.<listcomp>c                 S   rP   rQ   r   rR   r   r   r   r   œ   r   r!   c                    s   g | ]}|ˆ vr|‘qS r   r   )r   rh   )Úcountsr   r   r      ó    FrN   rF   rG   )rF   ÚdescriptionsrH   Úvote_countsÚ
eliminatedÚhistory)	Úvaluesr+   ÚmaxrT   r/   r,   r-   Údictr.   )r   Ú	voted_uidÚtiedro   rN   Ú	not_votedÚrecr   )rk   rj   r   Útally_votes‘   s*   



ûrx   c                 C   sR   dd„ | d   ¡ D ƒ}dd„ |D ƒ}dd„ |D ƒ}|sdS t|ƒt|ƒkr'dS d S )Nc                 S   s   g | ]}|d  r|‘qS rQ   r   ©r   r>   r   r   r   r   ±   rl   z check_winner.<locals>.<listcomp>r!   c                 S   ó   g | ]
}|d  dkr|‘qS )r&   r   r   ry   r   r   r   r   ²   r   c                 S   rz   )r&   r   r   ry   r   r   r   r   ³   r   r   r   )rq   r/   )r   rN   ÚspiesÚ	civiliansr   r   r   Úcheck_winner°   s   r}   c                 C   s$   | d  d7  < d| d< i | d< d S )NrF   r#   rE   rA   rG   r   rJ   r   r   r   Úadvance_to_describe»   s   r~   )r   r,   r   Úcore.loggerr   r0   rs   r   Úboolr@   rd   rK   rU   rW   r^   r`   rb   rg   rx   r}   r~   r   r   r   r   Ú<module>   s    
.