o
    g„ljÄ  ã                   @   s.   d dl Z d dlZd dlmZ G dd„ dƒZdS )é    N)Údatetimec                   @   s¢   e Zd Zdejfdd„Zdedefdd„ZdedB fd	d
„Z	de
e fdd„Zdefdd„Zddd„ZdedB fdd„ZdedB fdd„Zddd„Zddd„ZdS )ÚCharacterManagerÚconnc                 C   s   || _ | ¡ | _d S ©N)r   ÚcursorÚcur)Úselfr   © r	   ú./home/dore/onebot/Bot_Ero/core/db/character.pyÚ__init__   s   zCharacterManager.__init__Ú	char_dataÚreturnc                 C   s  | j  dt|ƒ|d |d |d t| dd¡ƒ| dd¡t|d	 ƒt|d
 ƒt|d ƒt|d ƒt|d ƒt|d ƒtj| dg ¡ddt| dd¡ƒt| dd¡ƒtj| dg ¡ddt ¡  	d¡t ¡  	d¡f¡ | j
 ¡  | j j}|du r|tdƒ‚|  |¡du r‰|  ||¡ |S )uA   åˆ›å»ºè§’è‰²å¡ï¼Œè¿”å›žè§’è‰² idã€‚char_data å­—æ®µè§ schemaã€‚af  
            INSERT INTO dnd_characters (
                user_id, char_name, race, class_name, level, background,
                str_score, dex_score, con_score, int_score, wis_score, cha_score,
                proficient_skills, hp, ac, equipment, created_at, updated_at
            ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        Ú	char_nameÚraceÚ
class_nameÚlevelé   Ú
backgroundÚ Ú	str_scoreÚ	dex_scoreÚ	con_scoreÚ	int_scoreÚ	wis_scoreÚ	cha_scoreÚproficient_skillsF)Úensure_asciiÚhpr   Úacé
   Ú	equipmentú%Y-%m-%d %H:%M:%SNu   è§’è‰²åˆ›å»ºå¤±è´¥)r   ÚexecuteÚstrÚintÚgetÚjsonÚdumpsr   ÚnowÚstrftimer   ÚcommitÚ	lastrowidÚ
ValueErrorÚ
current_idÚset_current)r   Úuser_idr   Úchar_idr	   r	   r
   Úcreate   s0   
òú
zCharacterManager.createNc                 C   sl   | j  dt|ƒf¡ | j  ¡ }|sd S g d¢}tt||ƒƒ}t |d p%d¡|d< t |d p0d¡|d< |S )Na+  
            SELECT id, user_id, char_name, race, class_name, level, background,
                   str_score, dex_score, con_score, int_score, wis_score, cha_score,
                   proficient_skills, hp, ac, equipment, created_at, updated_at
            FROM dnd_characters WHERE id = ?
        )Úidr/   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    Ú
created_atÚ
updated_atr   z[]r    )r   r"   r$   ÚfetchoneÚdictÚzipr&   Úloads)r   r0   ÚrowÚcolsÚdatar	   r	   r
   r%   ,   s   û
zCharacterManager.getc                 C   sH   | j  dt|ƒf¡ g }| j  ¡ D ]}|  |d ¡}|r!| |¡ q|S )Nzm
            SELECT id FROM dnd_characters
            WHERE user_id = ?
            ORDER BY id ASC
        r   )r   r"   r#   Úfetchallr%   Úappend)r   r/   ÚoutÚrr;   r	   r	   r
   Úlist_by_user>   s   ü
€zCharacterManager.list_by_userc                 K   s¤   h d£}g g }}|  ¡ D ]\}}||v r"| |› d¡ | |¡ q|s'dS | d¡ | t ¡  d¡¡ | t|ƒ¡ | j dd |¡› d|¡ | j	 
¡  d	S )
N>   r   r   r   r   r   r   r   r   r   r   r   r   r   z = ?Fzupdated_at = ?r!   zUPDATE dnd_characters SET z, z WHERE id = ?T)Úitemsr=   r   r(   r)   r$   r   r"   Újoinr   r*   )r   r0   ÚfieldsÚallowedÚsetsÚvaluesÚkÚvr	   r	   r
   ÚupdateK   s   

€

zCharacterManager.updatec                 C   s6   | j  dt|ƒf¡ | j  dt|ƒf¡ | j ¡  d S )Nz'DELETE FROM dnd_characters WHERE id = ?z8DELETE FROM dnd_current_character WHERE character_id = ?)r   r"   r$   r   r*   )r   r0   r	   r	   r
   Údelete]   s   zCharacterManager.deletec                 C   s.   | j  dt|ƒf¡ | j  ¡ }|r|d S d S )Nz@SELECT character_id FROM dnd_current_character WHERE user_id = ?r   )r   r"   r#   r5   )r   r/   r9   r	   r	   r
   r-   b   s   þ
zCharacterManager.current_idc                 C   s    |   |¡}|d ur|  |¡S d S r   )r-   r%   )r   r/   Úcidr	   r	   r
   Úcurrentj   s   
zCharacterManager.currentc                 C   s(   | j  dt|ƒt|ƒf¡ | j ¡  d S )Nz½
            INSERT INTO dnd_current_character (user_id, character_id)
            VALUES (?, ?)
            ON CONFLICT(user_id) DO UPDATE SET character_id = excluded.character_id
        )r   r"   r#   r$   r   r*   )r   r/   r0   r	   r	   r
   r.   n   s   üzCharacterManager.set_currentc                 C   s"   | j  dt|ƒf¡ | j ¡  d S )Nz3DELETE FROM dnd_current_character WHERE user_id = ?)r   r"   r#   r   r*   )r   r/   r	   r	   r
   Úclear_currentv   s   zCharacterManager.clear_current)r   N)Ú__name__Ú
__module__Ú__qualname__Úsqlite3Ú
Connectionr   r6   r$   r1   r%   Úlistr@   ÚboolrI   rJ   r-   rL   r.   rM   r	   r	   r	   r
   r      s    !

r   )r&   rQ   r   r   r	   r	   r	   r
   Ú<module>   s    