Ë
    :É„jÏ"  ã                   ó†   — 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	Zd
ededefd„Z G d„ de
«      Zy)é    N)ÚListÚTupleÚAny)Úrawé   )ÚStorageé   )Úutilsaì  
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 update_state
(
    id   INTEGER PRIMARY KEY,
    pts  INTEGER,
    qts  INTEGER,
    date INTEGER,
    seq  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;
až  
CREATE TABLE IF NOT EXISTS usernames
(
    id             TEXT PRIMARY KEY,
    peer_id        INTEGER NOT NULL,
    last_update_on INTEGER NOT NULL DEFAULT (CAST(STRFTIME('%s', 'now') AS INTEGER))
);

CREATE TRIGGER IF NOT EXISTS trg_usernames_last_update_on
    AFTER UPDATE
    ON usernames
BEGIN
    UPDATE usernames
    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      úV/var/www/html/GAP/venv/lib/python3.12/site-packages/pyrogram/storage/sqlite_storage.pyÚget_input_peerr   d   s¤   € Ø�OÑ#Ü�y‰y×&Ñ&ØØ#ð 'ó 
ð 	
ð
 �GÒÜ�y‰y×&Ñ&Ø�Hð 'ó 
ð 	
ð Ð-Ñ-Ü�y‰y×)Ñ)Ü×+Ñ+¨GÓ4Ø#ð *ó 
ð 	
ô
 Ð*¨9¨+Ð6Ó
7Ð7ó    c                   ót  ‡ — 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eeef      fd„Zefdeeeeeef   fd„Z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é   i€p  Únamec                 ó2   •— t         ‰| �  |«       d | _        y ©N)ÚsuperÚ__init__Úconn)Úselfr#   Ú	__class__s     €r   r'   zSQLiteStorage.__init__}   s   ø€ Ü‰Ñ˜Ôàˆ�	r   c                 óH  — | j                   5  | j                   j                  t        «       | 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ÚUNAME_SCHEMAÚexecuteÚVERSION©r)   s    r   ÚcreatezSQLiteStorage.create‚   sz   € Ø�Y‰Yñ 	Ø�I‰I×#Ñ#¤FÔ+Ø�I‰I×#Ñ#¤LÔ1à�I‰I×ÑØ0Ø—‘�ôð
 �I‰I×ÑØCØ4ô÷	÷ 	ñ 	ús   �BBÂB!c              ƒ   ó   K  — t         ‚­wr%   ©ÚNotImplementedErrorr1   s    r   ÚopenzSQLiteStorage.open‘   ó   è ø€ Ü!Ð!ùó   ‚	c              ƒ   ó¬   K  — | j                  t        t        j                  «       «      «      ƒ d {  –—†  | j                  j	                  «        y 7 Œ­wr%   )ÚdateÚintÚtimer(   Úcommitr1   s    r   ÚsavezSQLiteStorage.save”   s8   è ø€ Ø�i‰iœœDŸI™I›KÓ(Ó)×)Ð)Ø�	‰	×ÑÕð 	*ús   ‚0A²A³ Ac              ƒ   ó@   K  — | j                   j                  «        y ­wr%   )r(   Úcloser1   s    r   r@   zSQLiteStorage.close˜   s   è ø€ Ø�	‰	�‰Õùs   ‚c              ƒ   ó   K  — t         ‚­wr%   r4   r1   s    r   ÚdeletezSQLiteStorage.delete›   r7   r8   Úpeersc              ƒ   óD   K  — | j                   j                  d|«       y ­w)NzXREPLACE INTO peers (id, access_hash, type, username, phone_number)VALUES (?, ?, ?, ?, ?))r(   Úexecutemany)r)   rC   s     r   Úupdate_peerszSQLiteStorage.update_peersž   s    è ø€ Ø�	‰	×Ñð%àõ	
ùs   ‚ Ú	usernamesc              ƒ   óÐ   K  — | j                   j                  t        «       |D ]"  }| j                   j                  d|d   f«       Œ$ | j                   j	                  d|«       y ­w)Nz%DELETE FROM usernames WHERE peer_id=?r   z1REPLACE INTO usernames (peer_id, id)VALUES (?, ?))r(   r,   r.   r/   rE   )r)   rG   r   s      r   Úupdate_usernameszSQLiteStorage.update_usernames¥   sa   è ø€ Ø�	‰	×Ñ¤Ô-Øò 	ˆDØ�I‰I×ÑØ7Ø�a‘�
õð	ð
 	�	‰	×Ñðàõ	
ùs   ‚A$A&Úvaluec              ƒ   óF  K  — |t         k(  r)| j                  j                  d«      j                  «       S | j                  5  t	        |t
        «      r| j                  j                  d|f«       n| j                  j                  d|«       d d d «       y # 1 sw Y   y xY w­w)Nz0SELECT id, pts, qts, date, seq FROM update_stateú%DELETE FROM update_state WHERE id = ?zIREPLACE INTO update_state (id, pts, qts, date, seq)VALUES (?, ?, ?, ?, ?))Úobjectr(   r/   ÚfetchallÚ
isinstancer;   ©r)   rJ   s     r   Úupdate_statezSQLiteStorage.update_state²   s‹   è ø€ Ø”FŠ?Ø—9‘9×$Ñ$ØBóç‰h‹jðð —‘ñ Ü˜e¤SÔ)Ø—I‘I×%Ñ%Ø?Ø˜õð
 —I‘I×%Ñ%ð1àô÷÷ ñ üs   ‚?B!ÁABÂ	B!ÂBÂB!c              ƒ   óF   K  — | j                   j                  d|f«       y ­w)NrL   )r(   r/   )r)   r   s     r   Úremove_statezSQLiteStorage.remove_stateÅ   s    è ø€ Ø�	‰	×ÑØ3ØˆJõ	
ù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   è ø€ Ø�I‰I×ÑØBØˆJó
÷ ‰(‹*ð 	
ð
 ˆ9Ü˜^¨G¨9Ð5Ó6Ð6ä˜qÐ!Ð!ùó   ‚AAÚusernamec              ƒ   óh  K  — | j                   j                  d|f«      j                  «       }|€¹| j                   j                  d|f«      j                  «       }|€t        d|› �«      ‚t	        t        j
                  «       |d   z
  «      | j                  kD  rt        d|› �«      ‚| j                   j                  d|d   f«      j                  «       x}}|€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 DESCzVSELECT peer_id, last_update_on FROM usernames WHERE id = ?ORDER BY last_update_on DESCzUsername not found: r   zUsername expired: z`SELECT id, access_hash, type, last_update_on FROM peers WHERE id = ?ORDER BY last_update_on DESCr   é   )r(   r/   rV   rW   Úabsr<   ÚUSERNAME_TTLr   )r)   r[   rX   Úr2s       r   Úget_peer_by_usernamez"SQLiteStorage.get_peer_by_usernameÖ   sB  è ø€ Ø�I‰I×Ñð+àˆKó
÷ ‰(‹*ð	 	
ð ˆ9Ø—‘×"Ñ"ð/à�ó÷ ‰h‹jð	 ð
 ˆzÜÐ!5°h°ZÐ@ÓAÐAÜ”4—9‘9“;  A¡Ñ&Ó'¨$×*;Ñ*;Ò;ÜÐ!3°H°:Ð>Ó?Ð?Ø—I‘I×%Ñ%ð/à�A‘�ó÷ ‰h‹jð	ˆA�ð
 ˆyÜÐ!5°h°ZÐ@ÓAÐAäŒt�y‰y‹{˜Q˜q™TÑ!Ó" T×%6Ñ%6Ò6ÜÐ/°¨zÐ:Ó;Ð;ä˜q  !˜uÐ%Ð%ùs   ‚D0D2Ú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: rU   )r)   rb   rX   s      r   Úget_peer_by_phone_numberz&SQLiteStorage.get_peer_by_phone_numberô   sS   è ø€ Ø�I‰I×ÑØLØˆOó
÷ ‰(‹*ð 	
ð
 ˆ9ÜÐ5°l°^ÐDÓEÐEä˜qÐ!Ð!ùrZ   c                 ó¤   — t        j                  «       d   j                  }| j                  j	                  d|› d�«      j                  «       d   S )Nr	   zSELECT z FROM sessionsr   )ÚinspectÚstackÚfunctionr(   r/   rV   )r)   Úattrs     r   Ú_getzSQLiteStorage._getÿ   sI   € Ü�}‰}‹˜qÑ!×*Ñ*ˆà�y‰y× Ñ Ø�d�V˜>Ð*ó
ç
‰(‹*�Qñð 	r   c                 óÊ   — 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 = ?)rf   rg   rh   r(   r/   )r)   rJ   ri   s      r   Ú_setzSQLiteStorage._set  sW   € Ü�}‰}‹˜qÑ!×*Ñ*ˆà�Y‰Yñ 	Ø�I‰I×ÑØ& t f¨DÐ1Ø�ô÷	÷ 	ñ 	ús   ®"AÁA"c                 óV   — |t         k(  r| j                  «       S | j                  |«      S r%   )rM   rj   rl   rP   s     r   Ú	_accessorzSQLiteStorage._accessor  s"   € Ø#¤všoˆt�y‰y‹{ÐC°4·9±9¸UÓ3CÐCr   c              ƒ   ó,   K  — | j                  |«      S ­wr%   ©rn   rP   s     r   Údc_idzSQLiteStorage.dc_id  ó   è ø€ Ø�~‰~˜eÓ$Ð$ùó   ‚c              ƒ   ó,   K  — | j                  |«      S ­wr%   rp   rP   s     r   Úapi_idzSQLiteStorage.api_id  rr   rs   c              ƒ   ó,   K  — | j                  |«      S ­wr%   rp   rP   s     r   Ú	test_modezSQLiteStorage.test_mode  rr   rs   c              ƒ   ó,   K  — | j                  |«      S ­wr%   rp   rP   s     r   Úauth_keyzSQLiteStorage.auth_key  rr   rs   c              ƒ   ó,   K  — | j                  |«      S ­wr%   rp   rP   s     r   r:   zSQLiteStorage.date  rr   rs   c              ƒ   ó,   K  — | j                  |«      S ­wr%   rp   rP   s     r   r   zSQLiteStorage.user_id!  rr   rs   c              ƒ   ó,   K  — | j                  |«      S ­wr%   rp   rP   s     r   Úis_botzSQLiteStorage.is_bot$  rr   rs   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 = ?)rM   r(   r/   rV   rP   s     r   ÚversionzSQLiteStorage.version'  si   € Ø”FŠ?Ø—9‘9×$Ñ$Ø,óç‰h‹j˜ñð ð —‘ñ Ø—	‘	×!Ñ!Ø3Ø�Hô÷÷ ñ ús   ÁA)Á)A2)&Ú__name__Ú
__module__Ú__qualname__r0   r_   Ústrr'   r2   r6   r>   r@   rB   r   r   r;   rF   rI   rM   rQ   rS   rY   ra   rd   rj   r   rl   rn   rq   ru   Úboolrw   Úbytesry   r:   r   r}   r   Ú__classcell__)r*   s   @r   r!   r!   y   sd  ø„ Ø€GØ€Lð˜Sõ ò
ò"òòò"ð
¨¨U°3¸¸SÀ#ÀsÐ3JÑ-KÑ(Ló 
ð
°°U¸3À¸8±_Ñ0Eó 
ð JPñ ¨¨c°3¸¸SÀ#Ð.EÑ(Fó ò&
ð	"¨Có 	"ð&°3ó &ð<	"¸3ó 	"òð˜#ó ð &,ñ D˜só Dð (.ñ % ó %ð )/ñ % #ó %ð -3ñ % Tó %ð -3ñ % Eó %ð '-ñ % ó %ð *0ñ % 3ó %ð *0ñ % $ó %ð $*ñ 
˜S÷ 
r   r!   )rf   Úsqlite3r<   Útypingr   r   r   Úpyrogramr   Ústorager   Ú r
   r-   r.   r;   rƒ   r   r!   © r   r   ú<module>r�      sV   ðó( Û Û ß #Ñ #å Ý Ý ð0
€ðf€ð&8˜Cð 8¨cð 8¸có 8ô*x�Gõ xr   