o
    jj                     @  s0  U d Z ddlmZ ddlmZmZ ddlmZ ddlmZ ddl	m
Z
 ddd	d
Zdddd
ZeeeeB gdf ZdddddddddddddddddZded< dEd!d"ZdFd'd(ZdGd)d*ZdGd+d,ZdGd-d.ZdGd/d0ZeeeedZd1ed2< dHd6d7ZdId8d9ZdJd<d=ZdKdAdBZdLdCdDZdS )Mu]   网页端积分商店（与 plugins/redeem_shop 逻辑一致，避免导入 plugins 包）。    )annotations)datetime	timedelta)Callable)	DbManager)
TITLE_DEFS      
   )commonrare	legendaryu   普通u   稀有u   传奇NuB   额外抽卡补充包（7 天内每日 +2 次额外抽卡额度）uT   兑换成功，已获得额外抽卡补充（7 日有效）。剩余积分 {rest}。)descriptioncostsuccess_tipuF   打卡增强（接下来 10 次打卡，每次 10% 概率 +1 积分）   uC   兑换成功，打卡增强次数已入账。剩余积分 {rest}。uK   抽奖增强（接下来 10 次付费抽奖，每次 30% 不消耗积分）uC   兑换成功，抽奖增强次数已入账。剩余积分 {rest}。u6   抽奖刷新（立刻清空今日已用抽卡次数）   uC   兑换成功，今日抽卡次数已重置。剩余积分 {rest}。)fn_extra_draw_packfn_checkin_boostfn_lottery_boostfn_lottery_refreshdict[str, dict]FIXED_ITEMStdefdict | Nonereturnintc                 C  s<   | pi  dpd}t|tr|  }tt |td S )Nrarityr   )get
isinstancestrstriplowerr   TITLE_PRICE_BY_RARITY)r   r r%   9/home/dore/onebot/Bot_Ero/checkin_gallery/shop_service.pytitle_price_from_def.   s   
r'   dbr   title_idNonec                 C  s4   | j ||rtd| j j||ddstdd S )Nu   你已拥有该称号Fcommitu   称号发放失败)titleshasRuntimeErrorunlock)r(   user_idr)   r%   r%   r&   _grant_title5   s
   r2   c                 C  s.   t  tdd d}| jj||dd d S )Nr	   )days%Y-%m-%dFr+   )r   nowr   strftimeshopset_draw_pack)r(   r1   untilr%   r%   r&   _grant_extra_draw_pack<   s   r:   c                 C     | j j|ddd d S Nr
   Fr+   )r7   add_luckr(   r1   r%   r%   r&   _grant_checkin_boostA      r?   c                 C  r;   r<   )r7   
add_waiverr>   r%   r%   r&   _grant_lottery_waiverE   r@   rB   c                 C  s$   t  d}| jj||dd d S )Nr4   Fr+   )r   r5   r6   r7   clear_draw_count)r(   r1   todayr%   r%   r&   _grant_lottery_refreshI   s   rE   zdict[str, GrantFn]FIXED_GRANTSstock_n
int | Noner    c                 C  s    | d u rdS | dkrdS t | S )Nu	   未上架u   不限)r    )rG   r%   r%   r&   _stock_labelV   s
   rJ   c           
   
   C  s  i }| j  D ]|\}}t|}|drgzt|ddd }W n ttfy+   Y qw t	|p2i }|	dd}|	dp?d}t
|trK|  }t	|t|}d| d	| d
t||dd d||< q|tv rt| }	t|	d t|	d d|		dd||< q|S )Ntitle__r   name?r   r   u   解锁称号「u   」（u   ）title)r   r   r)   kindr   r   r   functionr   )r   r   rP   r   )r7   	all_stockr    
startswithr   split
ValueError
IndexErrorr   r   r   r!   r"   RARITY_LABELr'   r   )
r(   catalogpid_stocktidr   nmr   rcmetar%   r%   r&   _build_catalog^   s<   




r_   r1   dictc           
      C  s   t  }t|}|j| }g }t| D ]G}|| }|j|}d}|ddkr3|j	| |d }|d uo=|dko=| }	|
||d |d |t|||	oS||d k||d kd q||d	d
S )NFrP   rO   r)   r   r   r   )idr   r   stockstock_labelownedcan_buy
affordableu9   称号货架每周一 8:00 刷新；功能商品常驻。)pointsitemsrefresh_hint)r   r_   rg   r   sortedkeysr7   rb   r-   r.   appendrJ   )
r1   r(   rX   rg   rh   rY   r^   rG   rd   re   r%   r%   r&   get_shop   s4   
rm   
product_idr^   restc              
   C  s   | d}t|tr$| r$z|j|dW S  tttfy#   | Y S w | ddkrF| d}t |p6i }| dd}d| d	| d
S d| d
S )Nr   )ro   rP   rO   r)   rM   rN   u   兑换成功，称号「u   」已解锁。剩余积分    。u   兑换成功，剩余积分 )	r   r   r    r!   formatKeyErrorrV   rU   r   )rn   r^   ro   tipr[   r   rM   r%   r%   r&   _success_message   s   

rt   c           
        s  |  }t t}||vrtd|| }t|d }j}||k r2td| d| d|ddkrR|d jrHtd	dfdd}n|t	v rdt	|  d fdd}ntdj
|||\}}|s{t|pydj}	d|t|||	|	dS )Nu'   未知商品，请刷新页面后重试r   u   积分不足：需要 u
   ，当前 rp   rP   rO   r)   u*   你已拥有该称号，无需重复兑换r   r*   c                     s   t   d S N)r2   r%   )r(   r[   r1   r%   r&   grant   s   zredeem_shop_item.<locals>.grantc                     s     d S ru   r%   r%   )apply_fnr(   r1   r%   r&   rv      s   u   该商品暂不可兑换u   兑换失败T)successrn   messagerg   )r   r*   )r!   r   r_   rU   r   rg   r   r-   r.   rF   r7   redeemrt   )
r1   rn   rX   r^   r   rg   rv   okerrro   r%   )rw   r(   r[   r1   r&   redeem_shop_item   s8   
r}   )r   r   r   r   )r(   r   r)   r   r   r*   )r(   r   r   r*   )rG   rH   r   r    )r(   r   r   r   )r1   r    r   r`   )rn   r    r^   r`   ro   r   r   r    )r1   r    rn   r    r   r`   )__doc__
__future__r   r   r   typingr   core.database_managerr   checkin_gallery.profile_servicer   r#   rW   r    r   GrantFnr   __annotations__r'   r2   r:   r?   rB   rE   rF   rJ   r_   rm   rt   r}   r%   r%   r%   r&   <module>   sZ    








!
!