U
    ;gP                     @   sz   d dl Z d dlZd dlZd dlmZmZmZ d dlmZ ddl	m
Z
 ddlmZ dZeeed	d
dZG dd de
ZdS )    N)ListTupleAny)raw   )Storage   )utilsag  
CREATE TABLE sessions
(
    dc_id     INTEGER PRIMARY KEY,
    api_id    INTEGER,
    test_mode INTEGER,
    auth_key  BLOB,
    date      INTEGER NOT NULL,
    user_id   INTEGER,
    is_bot    INTEGER
);

CREATE TABLE peers
(
    id             INTEGER PRIMARY KEY,
    access_hash    INTEGER,
    type           INTEGER NOT NULL,
    username       TEXT,
    phone_number   TEXT,
    last_update_on INTEGER NOT NULL DEFAULT (CAST(STRFTIME('%s', 'now') AS INTEGER))
);

CREATE TABLE version
(
    number INTEGER PRIMARY KEY
);

CREATE INDEX idx_peers_id ON peers (id);
CREATE INDEX idx_peers_username ON peers (username);
CREATE INDEX idx_peers_phone_number ON peers (phone_number);

CREATE TRIGGER trg_peers_last_update_on
    AFTER UPDATE
    ON peers
BEGIN
    UPDATE peers
    SET last_update_on = CAST(STRFTIME('%s', 'now') AS INTEGER)
    WHERE id = NEW.id;
END;
peer_idaccess_hashZ	peer_typec                 C   s`   |dkrt jj| |dS |dkr0t jj|  dS |dkrNt jjt| |dS td| d S )N)userZbot)user_idr   group)Zchat_id)ZchannelZ
supergroup)Z
channel_idr   zInvalid peer type: )r   typesZInputPeerUserZInputPeerChatZInputPeerChannelr	   Zget_channel_id
ValueErrorr
    r   _/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/pyrogram/storage/sqlite_storage.pyget_input_peerG   s    r   c                       sT  e Zd ZdZdZed fddZdd Zdd	 Zd
d Z	dd Z
dd Zeeeeeeef  dddZedddZedddZedddZdd Zeddd Zefedd!d"Zefedd#d$Zefedd%d&Zefedd'd(Zefedd)d*Zefedd+d,Zefedd-d.Zefedd/d0Z efedd1d2Z!  Z"S )3SQLiteStorage   ip  )namec                    s   t  | d | _d S N)super__init__conn)selfr   	__class__r   r   r   `   s    zSQLiteStorage.__init__c              	   C   sB   | j 2 | j t | j d| jf | j dd W 5 Q R X d S )NzINSERT INTO version VALUES (?)z1INSERT INTO sessions VALUES (?, ?, ?, ?, ?, ?, ?))r   NNNr   NN)r   ZexecutescriptSCHEMAexecuteVERSIONr   r   r   r   createe   s    zSQLiteStorage.createc                    s   t d S r   NotImplementedErrorr"   r   r   r   opens   s    zSQLiteStorage.openc                    s&   |  tt I d H  | j  d S r   )dateinttimer   commitr"   r   r   r   savev   s    zSQLiteStorage.savec                    s   | j   d S r   )r   closer"   r   r   r   r,   z   s    zSQLiteStorage.closec                    s   t d S r   r$   r"   r   r   r   delete}   s    zSQLiteStorage.delete)peersc                    s   | j d| d S )NzXREPLACE INTO peers (id, access_hash, type, username, phone_number)VALUES (?, ?, ?, ?, ?))r   Zexecutemany)r   r.   r   r   r   update_peers   s    zSQLiteStorage.update_peers)r   c                    s2   | j d|f }|d kr*td| t| S )Nz4SELECT id, access_hash, type FROM peers WHERE id = ?zID not found: r   r    fetchoneKeyErrorr   )r   r   rr   r   r   get_peer_by_id   s    zSQLiteStorage.get_peer_by_id)usernamec                    sb   | j d|f }|d kr*td| tt |d  | jkrRtd| t|d d  S )NzfSELECT id, access_hash, type, last_update_on FROM peers WHERE username = ?ORDER BY last_update_on DESCzUsername not found: r   zUsername expired: )r   r    r1   r2   absr)   USERNAME_TTLr   )r   r5   r3   r   r   r   get_peer_by_username   s    z"SQLiteStorage.get_peer_by_username)phone_numberc                    s2   | j d|f }|d kr*td| t| S )Nz>SELECT id, access_hash, type FROM peers WHERE phone_number = ?zPhone number not found: r0   )r   r9   r3   r   r   r   get_peer_by_phone_number   s    z&SQLiteStorage.get_peer_by_phone_numberc                 C   s*   t  d j}| jd| d d S )Nr   zSELECT z FROM sessionsr   )inspectstackfunctionr   r    r1   )r   attrr   r   r   _get   s    
zSQLiteStorage._get)valuec              	   C   s<   t  d j}| j | jd| d|f W 5 Q R X d S )Nr   zUPDATE sessions SET z = ?)r;   r<   r=   r   r    )r   r@   r>   r   r   r   _set   s    
zSQLiteStorage._setc                 C   s   |t kr|  S | |S r   )objectr?   rA   r   r@   r   r   r   	_accessor   s    zSQLiteStorage._accessorc                    s
   |  |S r   rD   rC   r   r   r   dc_id   s    zSQLiteStorage.dc_idc                    s
   |  |S r   rE   rC   r   r   r   api_id   s    zSQLiteStorage.api_idc                    s
   |  |S r   rE   rC   r   r   r   	test_mode   s    zSQLiteStorage.test_modec                    s
   |  |S r   rE   rC   r   r   r   auth_key   s    zSQLiteStorage.auth_keyc                    s
   |  |S r   rE   rC   r   r   r   r'      s    zSQLiteStorage.datec                    s
   |  |S r   rE   rC   r   r   r   r      s    zSQLiteStorage.user_idc                    s
   |  |S r   rE   rC   r   r   r   is_bot   s    zSQLiteStorage.is_botc              	   C   sB   |t kr| jd d S | j | jd|f W 5 Q R X d S )NzSELECT number FROM versionr   zUPDATE version SET number = ?)rB   r   r    r1   rC   r   r   r   version   s    zSQLiteStorage.version)#__name__
__module____qualname__r!   r7   strr   r#   r&   r+   r,   r-   r   r   r(   r/   r4   r8   r:   r?   r   rA   rB   rD   rF   rG   boolrH   bytesrI   r'   r   rJ   rK   __classcell__r   r   r   r   r   \   s.    	r   )r;   sqlite3r)   typingr   r   r   Zpyrogramr   Zstorager    r	   r   r(   rO   r   r   r   r   r   r   <module>   s   *