
    O[iP                         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d	ed
edefdZ G d de
      Zy)    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_hash	peer_typec                 $   |dv r!t         j                  j                  | |      S |dk(  r!t         j                  j                  |        S |dv r4t         j                  j	                  t        j                  |       |      S t        d|       )N)userbot)user_idr   group)chat_id)channel
supergroup)
channel_idr   zInvalid peer type: )r   typesInputPeerUserInputPeerChatInputPeerChannelr
   get_channel_id
ValueError)r   r   r   s      R/var/www/files/kim/lib/python3.12/site-packages/pyrogram/storage/sqlite_storage.pyget_input_peerr   G   s    O#yy&&# ' 
 	

 Gyy&&H ' 
 	
 --yy))++G4# * 
 	

 *9+6
77    c                   2    e Zd ZdZdZdef fdZd Zd Zd Z	d Z
d	 Zd
eeeeeeef      fdZdefdZdefdZdefdZd ZdefdZefdefdZefdefdZefdefdZefdefdZefdefdZefdefdZefdefdZefdefdZ efdefdZ! xZ"S )SQLiteStorage   ip  namec                 2    t         |   |       d | _        y N)super__init__conn)selfr#   	__class__s     r   r'   zSQLiteStorage.__init__`   s    	r   c                 
   | j                   5  | j                   j                  t               | j                   j                  d| j                  f       | j                   j                  dd       d d d        y # 1 sw Y   y xY w)NzINSERT INTO version VALUES (?)z1INSERT INTO sessions VALUES (?, ?, ?, ?, ?, ?, ?))r	   NNNr   NN)r(   executescriptSCHEMAexecuteVERSIONr)   s    r   createzSQLiteStorage.createe   sh    YY 	II##F+II0
 IIC4	 	 	s   A#A99Bc                    K   t         wr%   NotImplementedErrorr0   s    r   openzSQLiteStorage.opens        !!   	c                    K   | j                  t        t        j                                      d {    | j                  j	                          y 7 wr%   )dateinttimer(   commitr0   s    r   savezSQLiteStorage.savev   s8     iiDIIK()))		 	*s   0AA Ac                 @   K   | j                   j                          y wr%   )r(   closer0   s    r   r?   zSQLiteStorage.closez   s     		s   c                    K   t         wr%   r3   r0   s    r   deletezSQLiteStorage.delete}   r6   r7   peersc                 D   K   | j                   j                  d|       y w)NzXREPLACE INTO peers (id, access_hash, type, username, phone_number)VALUES (?, ?, ?, ?, ?))r(   executemany)r)   rB   s     r   update_peerszSQLiteStorage.update_peers   s      		%	
s    r   c                    K   | j                   j                  d|f      j                         }|t        d|       t	        | S w)Nz4SELECT id, access_hash, type FROM peers WHERE id = ?zID not found: r(   r.   fetchoneKeyErrorr   )r)   r   rs      r   get_peer_by_idzSQLiteStorage.get_peer_by_id   sR     IIBJ
 (* 	

 9^G9566q!!   AAusernamec                   K   | j                   j                  d|f      j                         }|t        d|       t	        t        j
                         |d   z
        | j                  kD  rt        d|       t        |d d  S w)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.   rH   rI   absr;   USERNAME_TTLr   )r)   rM   rJ   s      r   get_peer_by_usernamez"SQLiteStorage.get_peer_by_username   s     II+K
 (*	 	
 91(<==tyy{QqT!"T%6%66/z:;;q!u%%s   BBphone_numberc                    K   | j                   j                  d|f      j                         }|t        d|       t	        | S w)Nz>SELECT id, access_hash, type FROM peers WHERE phone_number = ?zPhone number not found: rG   )r)   rR   rJ   s      r   get_peer_by_phone_numberz&SQLiteStorage.get_peer_by_phone_number   sS     IILO
 (* 	

 95l^DEEq!!rL   c                     t        j                         d   j                  }| j                  j	                  d| d      j                         d   S )Nr	   zSELECT z FROM sessionsr   )inspectstackfunctionr(   r.   rH   )r)   attrs     r   _getzSQLiteStorage._get   sI    }}q!**yy  dV>*

(*Q 	r   valuec                     t        j                         d   j                  }| j                  5  | j                  j	                  d| d|f       d d d        y # 1 sw Y   y xY w)Nr	   zUPDATE sessions SET z = ?)rV   rW   rX   r(   r.   )r)   r[   rY   s      r   _setzSQLiteStorage._set   sW    }}q!**YY 	II&tfD1	 	 	s   "AA"c                 V    |t         k(  r| j                         S | j                  |      S r%   )objectrZ   r]   r)   r[   s     r   	_accessorzSQLiteStorage._accessor   s"    #votyy{C499U3CCr   c                 ,   K   | j                  |      S wr%   ra   r`   s     r   dc_idzSQLiteStorage.dc_id        ~~e$$   c                 ,   K   | j                  |      S wr%   rc   r`   s     r   api_idzSQLiteStorage.api_id   re   rf   c                 ,   K   | j                  |      S wr%   rc   r`   s     r   	test_modezSQLiteStorage.test_mode   re   rf   c                 ,   K   | j                  |      S wr%   rc   r`   s     r   auth_keyzSQLiteStorage.auth_key   re   rf   c                 ,   K   | j                  |      S wr%   rc   r`   s     r   r9   zSQLiteStorage.date   re   rf   c                 ,   K   | j                  |      S wr%   rc   r`   s     r   r   zSQLiteStorage.user_id   re   rf   c                 ,   K   | j                  |      S wr%   rc   r`   s     r   is_botzSQLiteStorage.is_bot   re   rf   c                     |t         k(  r,| j                  j                  d      j                         d   S | j                  5  | j                  j                  d|f       d d d        y # 1 sw Y   y xY w)NzSELECT number FROM versionr   zUPDATE version SET number = ?)r_   r(   r.   rH   r`   s     r   versionzSQLiteStorage.version   si    F?99$$,hj   		!!3H  s   A))A2)#__name__
__module____qualname__r/   rP   strr'   r1   r5   r=   r?   rA   r   r   r:   rE   rK   rQ   rT   rZ   r   r]   r_   ra   rd   rh   boolrj   bytesrl   r9   r   rp   rr   __classcell__)r*   s   @r   r!   r!   \   s#   GLS 
""
U3S#s3J-K(L 
	"C 	"&3 &	"3 	"#  &, Ds D (. % % )/ %# % -3 %T % -3 %E % '- % % *0 %3 % *0 %$ % $* 
S 
r   r!   )rV   sqlite3r;   typingr   r   r   pyrogramr   storager    r
   r-   r:   rv   r   r!    r   r   <module>r      sO   &    # #   '
T8C 8c 8c 8*BG Br   