o
    Mpj                  	   @   s   d dl Z d dlmZmZ e fdee deeeef  fddZe fdee deeeeef  fddZd	ee	 de	dB fd
dZ
d	ee	 dede	dB fddZd	ee	 dede	dB fddZdedB dededefddZd	ee	 defddZdS )    N)datetime	timedeltausersreturnc                    s@   t | dk r
tdt|  |   fddtt  D S )uL   shuffle 后错位成单环，返回 [(uid, next_uid), ...]，无自匹配。   u   匹配活动至少需要 2 人c                    s(   g | ]} |  |d  t    fqS )   )len).0ishuffled 3/home/dore/onebot/Bot_Ero/plugins/activity/logic.py
<listcomp>      ( zbuild_ring.<locals>.<listcomp>)r   
ValueErrorlistshufflerange)r   rngr   r   r   
build_ring   s
   
r   c                 C   sl   | st dt| }|| g }t|D ]\}}|d t|k r'||d  nd}||||d f q|S )u?   接龙链 [(uid, next_uid, seq), ...]，末位 next_uid=None。u   接龙活动至少需要 1 人r   N)r   r   r   	enumerater   append)r   r   r   outr
   uidnxtr   r   r   relay_assignments   s   
 r   membersc                 C   s.   t | dd dD ]}|d dkr|  S qd S )Nc                 S      | d S Nseqr   xr   r   r   <lambda>       zcurrent_turn.<locals>.<lambda>keystatuspendingsorted)r   mr   r   r   current_turn   s
   r,   	after_seqc                 C   s:   t | dd dD ]}|d |kr|d dkr|  S qd S )Nc                 S   r   r   r   r!   r   r   r   r#   #   r$   znext_pending.<locals>.<lambda>r%   r    r'   r(   r)   )r   r-   r+   r   r   r   next_pending"   s
   r.   
before_seqc                    s$    fdd| D }t |dd d dS )Nc                    s(   g | ]}|d  dkr|d  k r|qS )r'   doner    r   r	   r+   r/   r   r   r   *   r   zlast_done.<locals>.<listcomp>c                 S   r   r   r   r!   r   r   r   r#   +   r$   zlast_done.<locals>.<lambda>)r&   default)max)r   r/   r0   r   r2   r   	last_done)   s   r5   received_atnowhoursc                 C   s@   | sdS zt | d}W n
 ty   Y dS w || t|dkS )NFz%Y-%m-%d %H:%M:%S)r8   )r   strptimer   r   )r6   r7   r8   startr   r   r   
is_timeout.   s   r;   c                 C   s   t dd | D S )Nc                 s   s    | ]	}|d  dkV  qdS )r'   r(   Nr   r1   r   r   r   	<genexpr>9   s    zrelay_done.<locals>.<genexpr>)all)r   r   r   r   
relay_done8   s   r>   )randomr   r   r   strtupler   intr   dictr,   r.   r5   floatboolr;   r>   r   r   r   r   <module>   s    &(	
