o
    ·ôjj
  ã                   @   s   d dl Z G dd„ dƒZdS )é    Nc                   @   sX   e Zd Zdejfdd„Zdefdd„Zdd„ Zdd
ede	fdd„Z
ddd„Zdd„ ZdS )ÚPointsManagerÚconnc                 C   s   || _ | ¡ | _d S )N)r   ÚcursorÚcur)Úselfr   © r   ú+/home/dore/onebot/Bot_Ero/core/db/points.pyÚ__init__   s   zPointsManager.__init__Úreturnc                 C   s:   | j  d|f¡ | j  ¡ }|r|d S | j  d|f¡ dS )NzR
            SELECT points FROM user_assets
            WHERE user_id = ?
        r   ze
                INSERT INTO user_assets (user_id, points)
                VALUES (?, 0)
            )r   ÚexecuteÚfetchone)r   Úuser_idÚrowr   r   r   Úget	   s   ý
ýzPointsManager.getc                 C   s    | j  d||f¡ | j ¡  d S )NzŸ
            INSERT INTO user_assets (user_id, points)
            VALUES (?, ?)
            ON CONFLICT(user_id) DO UPDATE SET points=excluded.points
        )r   r   r   Úcommit)r   r   Úvaluer   r   r   Úset   s   üzPointsManager.setTÚdeltar   c                 C   sH   t |ƒ}t|ƒ}| j d|f¡ | j d||f¡ |r"| j ¡  d S d S )Nzc
            INSERT OR IGNORE INTO user_assets (user_id, points)
            VALUES (?, 0)
        z^
            UPDATE user_assets SET points = points + ?
            WHERE user_id = ?
        )ÚstrÚintr   r   r   r   )r   r   r   r   r   r   r   Úadjust    s   ýýÿzPointsManager.adjusté
   c                 C   s   | j  d|f¡ | j  ¡ S )Nzœ
            SELECT user_id, points
            FROM user_assets
            ORDER BY points DESC, CAST(user_id AS INTEGER) ASC
            LIMIT ?
        )r   r   Úfetchall)r   Úlimitr   r   r   Úleaderboard.   s   û
zPointsManager.leaderboardc                 C   sZ   t |ƒ}| j d¡ dd„ | j ¡ D ƒ}|D ]}| j dt|ƒ|f¡ q| j ¡  t|ƒS )Naë  
            SELECT DISTINCT user_id FROM user_assets
            UNION
            SELECT DISTINCT CAST(user_id AS TEXT) FROM checkin_records
            UNION
            SELECT DISTINCT CAST(user_id AS TEXT) FROM user_titles
            UNION
            SELECT DISTINCT user_id FROM user_title_state
            UNION
            SELECT DISTINCT user_id FROM user_equipped_titles
            UNION
            SELECT DISTINCT CAST(user_id AS TEXT) FROM group_daily_message_stats
        c                 S   s    g | ]}|d  dur|d  ‘qS )r   Nr   )Ú.0r   r   r   r   Ú
<listcomp>F   s     z+PointsManager.grant_all.<locals>.<listcomp>zº
                INSERT INTO user_assets (user_id, points)
                VALUES (?, ?)
                ON CONFLICT(user_id) DO UPDATE SET points = points + excluded.points
            )r   r   r   r   r   r   r   Úlen)r   ÚamountÚuser_idsÚuidr   r   r   Ú	grant_all7   s   
ü
zPointsManager.grant_allN)T)r   )Ú__name__Ú
__module__Ú__qualname__Úsqlite3Ú
Connectionr	   r   r   r   Úboolr   r   r!   r   r   r   r   r      s    
	r   )r%   r   r   r   r   r   Ú<module>   s    