o
    kj                     @  s   d Z ddlmZ ddlmZmZ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	lmZmZmZmZmZmZ eG d
d deZeG dd deZeG dd deZdS )u   
积分商店插件入口：周刷新、管理员手动刷新、用户兑换。
功能向效果存于 shop_user_buffs 表，由打卡/抽卡插件消费。
    )annotations)CommandPluginPluginTimedHeartbeatPlugin)attext)logger)register_plugin)get_title_def   )
SHOP_ITEMS	ShopApplyformat_shop_shelf_linesformat_shop_weekly_announcement refresh_shop_items_from_databaseweekly_refresh_shop_shelfc                   @  s.   e Zd ZdZdZdZdgZdd Zdd Zd	S )
ShopWeeklyRotationPluginshop_weekly_rotationuB   每周一 8:00 刷新积分商店并在群内公告本周货架。z08:00r   c                 C  s
   |  |S N)should_run_on_heartbeatself
event_type r   9/home/dore/onebot/Bot_Ero/plugins/redeem_shop/__init__.pymatch    s   
zShopWeeklyRotationPlugin.matchc              
   C  sl   zt | j}tdt|| | jtt| j W d S  t	y5 } zt
d| W Y d }~d S d }~ww )Nu9   积分商店已刷新（本周随机称号 %s 个）：%su   积分商店周刷新失败: %s)r   	dbmanagerr   infolenapisend_msgr   r   	Exception	exception)r   pickeder   r   r   handle#   s   
zShopWeeklyRotationPlugin.handleN)	__name__
__module____qualname__namedescriptionRUN_ATRUN_WEEKDAYSr   r%   r   r   r   r   r      s    r   c                   @  s$   e Zd ZdZdZdd Zdd ZdS )ShopManualRefreshPluginshop_manual_refreshu3   管理员指令：立刻刷新积分商店货架。c                 C  s   |dko|   o| dS )Nmessageu   /刷新商店)
admin_useron_full_matchr   r   r   r   r   5   s
   zShopManualRefreshPlugin.matchc              
   C  s   | j jd u rd S | j j}z!t| j}td| | jt|t	dt
| d|  W d S  tyT } ztd| | jt|t	d|  W Y d }~d S d }~ww )Nu;   管理员手动刷新积分商店（随机称号 id）：%su1   商店已刷新。本周随机上架称号（共 u
    个）：u   管理员刷新商店失败: %su   刷新失败：)	bot_eventuser_idr   r   r   r   r   r    r   r   r   r!   r"   )r   uidr#   r$   r   r   r   r%   <   s   

*zShopManualRefreshPlugin.handleN)r&   r'   r(   r)   r*   r   r%   r   r   r   r   r-   0   s
    r-   c                   @  s*   e Zd ZdZdZdZdddZdd	 Zd
S )RedeemShopPluginredeem_shopu*   使用积分兑换商店称号或权益。u   /商店returnstrc                 C  sd   g d}t | j}|s!|d |d |d d| S || |d d| S )N)u   —— 积分商店 ——u   用法：/商店 <商品id> u6   本周暂无上架商品（每周一 8:00 刷新）。r9   u#   发送 /商店 <商品id> 兑换。
)r   r   appendjoinrstripextend)r   linesshelfr   r   r   _format_listR   s   





zRedeemShopPlugin._format_listc              
     s  j jd u rd S j j}tj tjdk r%jt	 g d S jd 
 }|tvrAjt|td| d d S t| }t|d }|d   d u r`jt|td d S jj|}||k rjt|td| d	| d
 d S |}|drzt|ddd }W n ttfy   d }Y nw |d urjj||rjt|td d S d fdd}jj||||\}	}
|	s߈jt|td|
  d S jj|}|d}t|tr|
 rz|j|d}W nP tttfy   |}Y nBw |drIz"t|ddd }t|p%i }|dd}d| d| d
}W n ttfyH   d| d
}Y nw d| d
}jt|t| d S )Nr   r   u   未知商品 id：u!   ，发送 /商店 查看列表。costapplyu!   该商品未配置发放逻辑。u   积分不足：需要 u
   ，当前 u   。title__u-   你已拥有该称号，无需重复兑换。r7   Nonec                     s     d S r   r   r   apply_fnr   r   r   grant   s   z&RedeemShopPlugin.handle.<locals>.grantu   兑换失败：success_tip)restr)   ?u   兑换成功，称号「u   」已解锁。剩余积分 u   兑换成功，剩余积分 )r7   rF   )r2   r3   r   r   r   argsr   send_forward_msgr   rA   stripr   r    r   intpointsget
startswithsplit
ValueError
IndexErrortitleshasshopredeem
isinstancer8   formatKeyErrorr
   )r   r3   
product_idmetarB   rQ   r4   tidrI   okerrrK   tipmsgtdefr)   r   rG   r   r%   ^   st   


zRedeemShopPlugin.handleN)r7   r8   )r&   r'   r(   r)   r*   COMMANDSrA   r%   r   r   r   r   r5   L   s    
r5   N)__doc__
__future__r   	core.baser   r   r   core.cqr   r   core.loggerr   
core.utilsr	   plugins.titler
   logicr   r   r   r   r   r   r   r-   r5   r   r   r   r   <module>   s     
