o
    jjf*                     @  s   d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
mZ ddlmZ dd	lmZmZmZmZmZmZmZmZ eG d
d deZdS )uc   
仙人彩：周一 00:00–周五 23:59:59（北京时间）下注，周日 20:00 自动开奖。
    )annotationsN)Optional)Plugin)attext)register_plugin   )_DIGITS4_allocate_tier_pool_count_a_in_betting_window_now_bj_period_key_from_monday_period_monday_for_display_sunday_draw_period_mondayc                   @  sv   e Zd ZU dZdZdZded< d!dd	Zd"ddZd#ddZ	dd Z
d$ddZdd Zd%ddZdd Zd&dd ZdS )'ImmortalLotteryPluginimmortal_lotteryuT   仙人彩：四位数竞猜，周中下注、周日开奖，积分奖池与滚存。NzOptional[str]_last_draw_slotreturnboolc                 C  sd   | j jdkrdS t }| dks|jdks|jdkrdS d|   }tj	|kr-dS |t_	dS )N
meta_eventF         immortal_draw_T)
	bot_event	post_typer   weekdayhourminutedate	isoformatr   r   )selfnowkey r%   >/home/dore/onebot/Bot_Ero/plugins/immortal_lottery/__init__.py_draw_heartbeat_match"   s    
z+ImmortalLotteryPlugin._draw_heartbeat_match
event_typestrc                 C  s   |dkr|   S | jjdkrdS | jjr| jjd ddkr!dS | jjd d d  }|dr:d	|d
d   }|drAdS td|rIdS dS )NmetamessageFr   typer   data   ／/r   
   /仙人彩Tu
   ^下注\s+)	r'   r   r   r+   getstrip
startswithrematch)r"   r(   rawr%   r%   r&   r5   .   s   

zImmortalLotteryPlugin.matchtuple[str, str]c                 C  s~   | j jd d d  }|drd|dd   }|dr,|tdd   }d|fS td	|}|r=d
|d fS dS )Nr   r-   r   r.   r/   r   r0   xianrenu   ^下注\s+(.+)$bet) r:   )r   r+   r2   r3   lenr4   r5   group)r"   r6   restmr%   r%   r&   _parse_command>   s   

z$ImmortalLotteryPlugin._parse_commandc                 C  s   | j jdkr|   d S | j jd u r| jtd d S |  \}}|s&d S t	dd|}|s5| 
  d S t|sD| jtd d S | | d S )Nr   u!   仙人彩请在群聊中使用。z\s+r:   u^   请发送四位数字（每位 0–9，可重复），例如：/仙人彩 1234 或 下注 0420)r   r   _handle_draw_tickgroup_idapisend_msgr   r?   r4   sub_send_pool_infor	   r5   
_place_bet)r"   kindr=   digits_partr%   r%   r&   handleJ   s&   
zImmortalLotteryPlugin.handlec                 C  s   t   }t|}t|S N)r   r    r   r   )r"   dmonr%   r%   r&   _current_period_key_   s   
z)ImmortalLotteryPlugin._current_period_keyc              
   C  s   t | jj}|  }| jj||}| jj||}| jj|\}}}t |	dd}t |	dd}	t |	dd}
dd| d| d| d	|
 d
|	 dd| d| d| dddddg
}| j
td| d S )N
bet_pointsr   distinct_users	bet_countu   【仙人彩 · 本期概况】	   期号：u   周期（周一）起点：u   本期累计投注：u
    积分（u    注，u    人参与）u   滚存奖池：一等奖     / 二等奖     / 三等奖 r:   u<   下注期：每周一 00:00–周五 23:59（北京时间）u%   开奖：每周日 20:00 自动开奖u-   每注 1 积分；每人每天最多 1 注。u@   发送 /仙人彩 四位数字 或 下注 四位数字 参与。
)intr   rA   rM   	dbmanagerimmortal
issue_codeperiod_statscarryr1   rB   rC   r   join)r"   gidpkissuestc4c3c2ptsusersbetslinesr%   r%   r&   rE   d   s(   z%ImmortalLotteryPlugin._send_pool_infodigitsc           
      C  s   t t s| jtd d S | jj}|d u rd S t| jj}| 	 }t 
d}| jj||t|||d\}}|sJ| jtt|t| d S | jj||}| jj|}	| jtt|td| d| d| d|	  d S )NuF   当前不在下注时间内（周一至周五 23:59 北京时间）。z%Y-%m-%dr   u   下注成功：u
   
期号：u   （周期周一 u%   ）
已扣 1 积分，当前积分：)r   r   rB   rC   r   r   user_idrU   rA   rM   strftimerV   rW   try_place_betr   rX   pointsr1   )
r"   rg   uidr\   r]   bet_dateokerrr^   r=   r%   r%   r&   rF   {   s*   
 
z ImmortalLotteryPlugin._place_betc                 C  sZ   t  }| }t|}t|}| j}|j|}|D ]}|j||r$q| || qd S rJ   )	r   r    r   r   rV   rW   groups_for_draw
has_result_run_single_group_draw)r"   r#   sunrL   r]   dbgroupsr\   r%   r%   r&   r@      s   z'ImmortalLotteryPlugin._handle_draw_tickrA   rU   
period_keyc           7      C  s  | j }|j||}|j||}t|}|d d }|d d }|| | }	|j|\}
}}|
| }|| }||	 }ddd tdD }g }g }g }|D ]-\}}}t||}|dkrf|	||f qP|dkrr|	||f qP|d	kr}|	||f qPt|}t|}t|}g }g }d
 } }}d
 }  }!}"|d
kr|}#n%|d
krd
}#nt
||d\}$}%}||$ ||% tdd |%D } |}#|d
kr|}&n%|d
krd
}&nt
||d\}'}	}||' ||	 tdd |	D }!|}&|d
kr|}(n&|d
krd
}(nt
||d\})}}||) || tdd |D }"|}(t d}*z|j|||||*|#|&|(|	}+W n ty@   Y d S w |+sFd S dd| d| d| d| dd| d| d| dg},|d
krt|,	d| d n@g }-|d
kr||k r|-	d |d
kr|-	d| d d | d!| d"|  d}.|-r|.d#d$|- d% 7 }.|,	|.d&  |d
kr|,	d'| d( n@g }/|d
kr||k r|/	d |d
kr|/	d| d) d*| d!| d"|! d}0|/r|0d#d$|/ d% 7 }0|,	|0d&  |d
kr|,	d+| d, n@g }1|d
kr#||k r#|1	d |d
kr1|1	d| d- d.| d!| d"|" d}2|1rK|2d#d$|1 d% 7 }2|,	|2d&  |rt|,	d |,	d/ |D ]\}3}4}5|,	d0|5 d1|4 d qad2|,}6| jd3t|t|6fd4 d S )5N<   d      r:   c                 s  s     | ]}t td dV  qdS )r   	   N)r)   randomrandint).0_r%   r%   r&   	<genexpr>   s    z?ImmortalLotteryPlugin._run_single_group_draw.<locals>.<genexpr>         r   u   一等奖(4A)c                 s      | ]\}}|V  qd S rJ   r%   r}   _uar%   r%   r&   r          u   二等奖(3A)c                 s  r   rJ   r%   r   r%   r%   r&   r      r   u   三等奖(2A)c                 s  r   rJ   r%   r   r%   r%   r&   r      r   z%Y-%m-%d %H:%M:%Su   【仙人彩 · 开奖】rQ   u   本期周期（周一）：u   开奖号码：u   本期投注：u    积分u4   各奖级池（本期分成 + 滚存）：一等奖 rR   rS   u   一等奖无人中奖，u"    积分滚入下期一等奖池。uB   奖池不足每人 1 分，已按下注先后各发 1 分至耗尽u   均分余数 u    分滚入下期一等奖池u   一等奖(4A)：u    注，奖池 u   ，实际派发 u   （u   ；u   ）u   。u   二等奖无人中奖，u"    积分滚入下期二等奖池。u    分滚入下期二等奖池u   二等奖(3A)：u   三等奖无人中奖，u"    积分滚入下期三等奖池。u    分滚入下期三等奖池u   三等奖(2A)：uW   中奖发放（整数积分；余数滚存；不足每人 1 分时按下注顺序）：u     · u    → rT   send_group_msg)rA   r+   )rV   rW   rX   	list_betsr;   rZ   r[   ranger   appendr
   extendsumr   ri   finalize_draw	ExceptionrB   call_apirU   r   )7r"   rA   rv   rt   r^   re   	bet_totalp1p2p3r`   ra   rb   pool_4pool_3pool_2winningtier4tier3tier2_bidrl   dgr   nc4nc3nc2payouts
pay_detailrem4rem3rem2paid4paid3paid2new_c4d4p4new_c3d3new_c2d2drawn_atrn   rf   extra4line4extra3line3extra2line2_uidamtlabelmsgr%   r%   r&   rr      s   









	










"z,ImmortalLotteryPlugin._run_single_group_draw)r   r   )r(   r)   r   r   )r   r7   )r   r)   )rg   r)   )rA   rU   rv   r)   )__name__
__module____qualname__namedescriptionr   __annotations__r'   r5   r?   rI   rM   rE   rF   r@   rr   r%   r%   r%   r&   r      s   
 




r   )__doc__
__future__r   r{   r4   typingr   	core.baser   core.cqr   r   
core.utilsr   helpersr	   r
   r   r   r   r   r   r   r   r%   r%   r%   r&   <module>   s    (