o
    kj'                     @   s
  d dl Z d dlZd dlmZ d dlmZ d dlmZ defddZe	dhZ
d!d	ed
ede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edededefddZdededefddZdededB fddZdedededB fddZd	edee fdd ZdS )"    N)datetime)loggerreturnc                  C   sz   t jt j } tj ttj }W d    n1 sw   Y  tdD ]}d	t
j| dd}||vr8|  S q$td)Nd       )ku   无法生成房间号)stringascii_uppercasedigitscontext	game_lockset
game_roomskeysrangejoinrandomchoicesRuntimeError)charsexisting_rid r   4/home/dore/onebot/Bot_Ero/plugins/who_is_spy/room.py_generate_room_id	   s   r      卧底   group_id
creator_id	game_typemax_playersc                 C   s   t  }td|d }i d|d|d| dt|d|d|d	i d
ddddg dddddt  di di dg }tj |tj|< W d    |S 1 sVw   Y  |S )N      room_idr!   r   r    r"   min_playersplayersphasewaiting	round_numr   historycivilian_wordr   spy_word
created_atready_descriptionsvotesword_history)	r   maxstrr   now	timestampr   r   r   )r   r    r!   r"   r   r&   roomr   r   r   create_room   sR   	

r7   r%   c                 C   s6   t j t j| W  d    S 1 sw   Y  d S N)r   r   r   getr%   r   r   r   get_room1   s   
$r;   c                 C   s:   t j t j| d  W d    d S 1 sw   Y  d S r8   )r   r   r   popr:   r   r   r   remove_room6   s   "r=   user_idnicknamec              
   C   sN  t |}tj tj D ]}||d v r&d|d  d  W  d    S qtj| }|s8	 W d    dS |d dkrG	 W d    dS ||d v rV	 W d    d	S t|d |d
 kri	 W d    dS t|d d }| d}|||dddd|d |< W d    n1 sw   Y  d|d  d|  d| d|d
  d| 
S )Nr'   u   你已在房间 r%   u    中，请先 /离开或/退出   房间不存在r(   r)   u   游戏已开始，无法加入u   你已在房间中r"   u   房间已满      号r   T)r>   r?   aliaswordrolealiveu
   已加入 r!   u    房间 u   （/u   ），你的代号是 )r3   r   r   r   valuesr9   len)r%   r>   r?   uidrr6   nrC   r   r   r   
add_player;   s>   	
*rM   c                 C   sF  t |}tj tj| }|s	 W d    dS ||d vr(	 W d    dS |d dkr|d |= t|d dD ]\}}| d|d | d< q:|d s^tj| d  	 W d    d	S ||d
 krzt|d  d }|d | d }||d
< d|  d| W  d    S d|d | d< W d    dS 1 sw   Y  dS )Nr@   r'   u   你不在这个房间中r(   r)   rA   rB   rC   u   房间已解散r    r   u   已退出房间 u   ，房主已转移给 FrF   u?   已退出房间（游戏中退出，自动视为弃权出局）)	r3   r   r   r   r9   	enumerater<   listr   )r%   r>   rJ   r6   ipidnew_creator	old_aliasr   r   r   remove_playerW   s8   

rT   c                 C   sf   t | }tj" tj D ]}||d v r |  W  d    S qW d    d S 1 s,w   Y  d S Nr'   )r3   r   r   r   rH   )r>   rJ   rK   r   r   r   find_player_roomo   s   
rV   r6   c                 C   s   | d  t|S rU   )r9   r3   )r6   r>   r   r   r   
get_playerx   s   rW   c                 C   sZ   g }t j t j D ]}|d | kr|t| qW d    |S 1 s&w   Y  |S )Nr   )r   r   r   rH   appenddict)r   resultrK   r   r   r   
list_rooms|   s   
r[   )r   r   )r   r	   r   core.loggerr   core.contextr   r3   r   	frozenset
GAME_TYPESintr7   rY   r;   r=   rM   rT   rV   rW   rO   r[   r   r   r   r   <module>   s    
 	