o
    ™ÞajH<  ã                   @   s¾  d dl Z d dlZd dlmZmZ e j e j e j e¡¡d¡Z	de
de
fdd„Zde
fdd	„ZdTde
de
de
de
fdd„Zde
de
de
fdd„Zde
defdd„Zde
dede
dB de
def
dd„Zde
dededB fdd„Zde
dee fdd„Zde
dee fdd„Zde
dedefdd „Zde
defd!d"„Zde
defd#d$„Zde
ded%e
fd&d'„Zde
dede
dB de
fd(d)„Zde
defd*d+„Zde
dee fd,d-„Zde
dedefd.d/„Zde
fd0d1„Z 	2dUde
d3e
d4e
d5e
dB d6e
dB d7e
fd8d9„Z!de
dee fd:d;„Z"de
d<efd=d>„Z#d?d@„ Z$de
dAe
dBe
dCe
def
dDdE„Z%de
dee fdFdG„Z&de
dHededB fdIdJ„Z'			K	dVde
dHedAe
dBe
dCe
dLe
dMe
dNe
dOefdPdQ„Z(de
dHefdRdS„Z)dS )Wé    N)ÚdatetimeÚ	timedeltaÚdatabaseÚbot_usernameÚreturnc                 C   s&   t jtdd� t j t|  ¡ › d�¡S )NT)Úexist_okz.db)ÚosÚmakedirsÚDB_DIRÚpathÚjoinÚlower)r   © r   ú(/var/www/kodo/factory/cobots/decor/db.pyÚget_db_path   s   r   c              	   Ã   sä   �t  t| ƒ¡4 I d H šY}| d¡I d H  | d¡I d H  | d¡I d H  | d¡I d H  | d¡I d H  | d¡I d H  g d¢}|D ]\}}| d||f¡I d H  qC| ¡ I d H  W d   ƒI d H  d S 1 I d H skw   Y  d S )	NzŒ
            CREATE TABLE IF NOT EXISTS settings (
                key   TEXT PRIMARY KEY,
                value TEXT
            )
        a\  
            CREATE TABLE IF NOT EXISTS users (
                id          INTEGER PRIMARY KEY,
                username    TEXT,
                first_name  TEXT,
                is_banned   INTEGER DEFAULT 0,
                is_blocked  INTEGER DEFAULT 0,
                last_active TEXT,
                joined_at   TEXT
            )
        zÙ
            CREATE TABLE IF NOT EXISTS admins (
                id         INTEGER PRIMARY KEY,
                username   TEXT,
                first_name TEXT,
                added_at   TEXT
            )
        aß  
            CREATE TABLE IF NOT EXISTS mandatory_channels (
                id               INTEGER PRIMARY KEY AUTOINCREMENT,
                channel_id       TEXT UNIQUE NOT NULL,
                channel_username TEXT,
                channel_title    TEXT NOT NULL,
                invite_link      TEXT,
                display_type     TEXT DEFAULT 'buttons',
                is_active        INTEGER DEFAULT 1,
                added_at         TEXT
            )
        zþ
            CREATE TABLE IF NOT EXISTS activity (
                id         INTEGER PRIMARY KEY AUTOINCREMENT,
                user_id    INTEGER NOT NULL,
                action     TEXT NOT NULL,
                created_at TEXT
            )
        a_  
            CREATE TABLE IF NOT EXISTS custom_buttons (
                id          INTEGER PRIMARY KEY AUTOINCREMENT,
                btn_type    TEXT NOT NULL,
                label       TEXT NOT NULL,
                content     TEXT NOT NULL,
                position    INTEGER DEFAULT 0,
                created_at  TEXT
            )
        ))Úis_openÚ1)Úclosed_messageu(   ðŸ”´ Ø§Ù„Ø¨ÙˆØª Ù…Ù‚Ù�ÙˆÙ„ Ø­Ø§Ù„ÙŠØ§Ù‹.)Únotify_new_usersr   )Únotify_blockedr   )Úwelcome_messageÚ z9INSERT OR IGNORE INTO settings (key, value) VALUES (?, ?)©Ú	aiosqliteÚconnectr   ÚexecuteÚcommit)r   ÚdbÚdefaultsÚkeyÚvaluer   r   r   Úinit_db   s    €þ.»r!   r   r   Údefaultc              
   Ã   s¾   �t  t| ƒ¡4 I d H šF}| d|f¡4 I d H š$}| ¡ I d H }|r&|d n|W  d   ƒI d H  W  d   ƒI d H  S 1 I d H sBw   Y  W d   ƒI d H  d S 1 I d H sXw   Y  d S )Nz(SELECT value FROM settings WHERE key = ?r   ©r   r   r   r   Úfetchone)r   r   r"   r   ÚcurÚrowr   r   r   Úget_settingZ   s   €þÿ.ÿr'   r    c              	   Ã   sn   �t  t| ƒ¡4 I d H š}| d||f¡I d H  | ¡ I d H  W d   ƒI d H  d S 1 I d H s0w   Y  d S )Nz:INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)r   )r   r   r    r   r   r   r   Úset_settinga   s   €
þ.ûr(   c              
   Ã   ó¸   �t  t| ƒ¡4 I d H šC}| d¡4 I d H š#}| ¡ I d H }dd„ |D ƒW  d   ƒI d H  W  d   ƒI d H  S 1 I d H s?w   Y  W d   ƒI d H  d S 1 I d H sUw   Y  d S )NzSELECT key, value FROM settingsc                 S   s   i | ]	}|d  |d “qS )r   é   r   )Ú.0r&   r   r   r   Ú
<dictcomp>n   s    z$get_all_settings.<locals>.<dictcomp>©r   r   r   r   Úfetchall©r   r   r%   Úrowsr   r   r   Úget_all_settingsj   ó   €þÿ.ÿr1   Úuser_idÚusernameÚ
first_namec              
   Ã   sF  �t  ¡  ¡ }t t| ƒ¡4 I d H š„}| d|f¡4 I d H š}| ¡ I d H }W d   ƒI d H  n1 I d H s6w   Y  |se| d|||||f¡I d H  | ¡ I d H  |||ddddœW  d   ƒI d H  S | d||||f¡I d H  | ¡ I d H  |d |d |d |d	 |d
 ddœW  d   ƒI d H  S 1 I d H sœw   Y  d S )Nú SELECT * FROM users WHERE id = ?z[INSERT INTO users (id, username, first_name, last_active, joined_at) VALUES (?, ?, ?, ?, ?)r   T)Úidr4   r5   Ú	is_bannedÚ
is_blockedÚis_newzKUPDATE users SET username = ?, first_name = ?, last_active = ? WHERE id = ?r*   é   é   é   F)	r   ÚutcnowÚ	isoformatr   r   r   r   r$   r   )r   r3   r4   r5   Únowr   r%   r&   r   r   r   Úget_or_create_userq   s2   €(ÿ
þÿ÷

þÿ0ïrA   c              
   Ã   s   �t  t| ƒ¡4 I d H šg}| d|f¡4 I d H šE}| ¡ I d H }|s7	 W d   ƒI d H  W d   ƒI d H  d S |d |d |d |d |d dœW  d   ƒI d H  W  d   ƒI d H  S 1 I d H scw   Y  W d   ƒI d H  d S 1 I d H syw   Y  d S )Nr6   r   r*   r;   r<   r=   )r7   r4   r5   r8   r9   r#   )r   r3   r   r%   r&   r   r   r   Úget_user‰   s   €ýÿÿüÿ.ÿrB   c              
   Ã   r)   )Nz;SELECT id FROM users WHERE is_blocked = 0 AND is_banned = 0c                 S   s   g | ]}d |d i‘qS )r7   r   r   ©r+   Úrr   r   r   Ú
<listcomp>—   s    z(get_all_active_users.<locals>.<listcomp>r-   r/   r   r   r   Úget_all_active_users“   r2   rF   c              
   Ã   r)   )Nz>SELECT id, username, first_name FROM users WHERE is_banned = 1c                 S   ó$   g | ]}|d  |d |d dœ‘qS ©r   r*   r;   )r7   r4   r5   r   rC   r   r   r   rE       ó   $ z$get_banned_users.<locals>.<listcomp>r-   r/   r   r   r   Úget_banned_usersš   s   €ÿüÿ.ÿrJ   c              
   Ã   sè   �t  t| ƒ¡4 I d H š[}| d|f¡4 I d H š'}| ¡ I d H s5	 W d   ƒI d H  W d   ƒI d H  dS W d   ƒI d H  n1 I d H sEw   Y  | d|f¡I d H  | ¡ I d H  	 W d   ƒI d H  dS 1 I d H smw   Y  d S )Nz!SELECT id FROM users WHERE id = ?Fz+UPDATE users SET is_banned = 1 WHERE id = ?T)r   r   r   r   r$   r   ©r   r3   r   r%   r   r   r   Úban_user£   s   €þÿ(ÿ0úrL   c              	   Ã   ól   �t  t| ƒ¡4 I d H š}| d|f¡I d H  | ¡ I d H  W d   ƒI d H  d S 1 I d H s/w   Y  d S )Nz+UPDATE users SET is_banned = 0 WHERE id = ?r   ©r   r3   r   r   r   r   Ú
unban_user­   ó
   €.þrO   c              	   Ã   sH  �t  ¡ }|tdd�  ¡ }t t| ƒ¡4 I d H šv}| d¡I d H  ¡ I d H d }| d|f¡I d H  ¡ I d H d }| d¡I d H  ¡ I d H d }| d¡I d H  ¡ I d H d }| d¡I d H  ¡ I d H d }| d	¡I d H  ¡ I d H d }	| d
¡I d H  ¡ I d H d }
W d   ƒI d H  n1 I d H s•w   Y  ||||||	|
dœS )Né   )ÚhourszSELECT COUNT(*) FROM usersr   z1SELECT COUNT(*) FROM users WHERE last_active >= ?z.SELECT COUNT(*) FROM users WHERE is_banned = 1z/SELECT COUNT(*) FROM users WHERE is_blocked = 1z6SELECT COUNT(*) FROM activity WHERE action = 'message'z7SELECT COUNT(*) FROM activity WHERE action = 'decorate'z;SELECT COUNT(*) FROM mandatory_channels WHERE is_active = 1)Útotal_usersÚ
active_24hÚbanned_usersÚblocked_botÚmessagesÚdecorationsÚ
mand_count)	r   r>   r   r?   r   r   r   r   r$   )r   r@   Úlast_24hr   ÚtotalÚactiveÚbannedÚblockedrW   rX   rY   r   r   r   Úget_statistics³   s"   €" (ù	ür_   Úactionc              	   Ã   s|   �t  ¡  ¡ }t t| ƒ¡4 I d H š}| d|||f¡I d H  | ¡ I d H  W d   ƒI d H  d S 1 I d H s7w   Y  d S )NzCINSERT INTO activity (user_id, action, created_at) VALUES (?, ?, ?)©r   r>   r?   r   r   r   r   r   )r   r3   r`   r@   r   r   r   r   Úrecord_activityÆ   s   €
þ.ûrb   c              	   Ã   s~   �t  ¡  ¡ }t t| ƒ¡4 I d H š }| d||||f¡I d H  | ¡ I d H  W d   ƒI d H  d S 1 I d H s8w   Y  d S )NzVINSERT OR REPLACE INTO admins (id, username, first_name, added_at) VALUES (?, ?, ?, ?)ra   )r   r3   r4   r5   r@   r   r   r   r   Ú	add_adminÐ   s   €

þ.ûrc   c              	   Ã   rM   )NzDELETE FROM admins WHERE id = ?r   rN   r   r   r   Úremove_adminÚ   rP   rd   c              
   Ã   r)   )NzSELECT * FROM adminsc                 S   rG   rH   r   rC   r   r   r   rE   ä   rI   zget_admins.<locals>.<listcomp>r-   r/   r   r   r   Ú
get_adminsà   r2   re   c              
   Ã   s²   �t  t| ƒ¡4 I d H š@}| d|f¡4 I d H š}| ¡ I d H d uW  d   ƒI d H  W  d   ƒI d H  S 1 I d H s<w   Y  W d   ƒI d H  d S 1 I d H sRw   Y  d S )Nz"SELECT id FROM admins WHERE id = ?r#   rK   r   r   r   Úis_adminç   s   €ÿÿ.ÿrf   c              	   Ã   sh   �t  t| ƒ¡4 I d H š}| d¡I d H  | ¡ I d H  W d   ƒI d H  d S 1 I d H s-w   Y  d S )NzDELETE FROM adminsr   )r   r   r   r   r   Úclear_adminsí   s
   €.þrg   ÚbuttonsÚ
channel_idÚchannel_titleÚchannel_usernameÚinvite_linkÚdisplay_typec              
   Ã   s†   �t  ¡  ¡ }t t| ƒ¡4 I d H š$}| dt|ƒ|||||f¡I d H  | ¡ I d H  W d   ƒI d H  d S 1 I d H s<w   Y  d S )NzÂINSERT OR REPLACE INTO mandatory_channels
               (channel_id, channel_username, channel_title, invite_link, display_type, is_active, added_at)
               VALUES (?, ?, ?, ?, ?, 1, ?))	r   r>   r?   r   r   r   r   Ústrr   )r   ri   rj   rk   rl   rm   r@   r   r   r   r   Úadd_mandatory_channeló   s   €
ü.ùro   c              
   Ã   r)   )Nz4SELECT * FROM mandatory_channels WHERE is_active = 1c              	   S   s6   g | ]}|d  |d |d |d |d |d dœ‘qS )r   r*   r;   r<   r=   é   )r7   ri   rk   rj   rl   rm   r   rC   r   r   r   rE     s
    ÿ
ÿz*get_mandatory_channels.<locals>.<listcomp>r-   r/   r   r   r   Úget_mandatory_channels  s   €ÿþÿ.ÿrq   Úchannel_db_idc              	   Ã   rM   )Nz8UPDATE mandatory_channels SET is_active = 0 WHERE id = ?r   )r   rr   r   r   r   r   Úremove_mandatory_channel	  s   €
ÿ.ürs   c              	   Ã   s:   �dD ]\}}z
|   |¡I d H  W q ty   Y qw d S )N))Úemojiz0ALTER TABLE custom_buttons ADD COLUMN emoji TEXT)Úcustom_emoji_idz:ALTER TABLE custom_buttons ADD COLUMN custom_emoji_id TEXT)Úcolorz0ALTER TABLE custom_buttons ADD COLUMN color TEXT)Ú
is_visiblezBALTER TABLE custom_buttons ADD COLUMN is_visible INTEGER DEFAULT 1)r   Ú	Exception)r   ÚcolÚddlr   r   r   Ú_ensure_cbtn_columns  s   €ÿør{   Úbtn_typeÚlabelÚcontentc              	   Ã   s˜   �ddl m } t t| ƒ¡4 I d H š-}t|ƒI d H  | d|||| ¡  ¡ f¡I d H }| ¡ I d H  |j	W  d   ƒI d H  S 1 I d H sEw   Y  d S )Nr   )r   z¨INSERT INTO custom_buttons (btn_type, label, content, position, created_at, is_visible) VALUES (?, ?, ?, (SELECT COALESCE(MAX(position),0)+1 FROM custom_buttons), ?, 1))
r   r   r   r   r{   r   r>   r?   r   Ú	lastrowid)r   r|   r}   r~   Ú_dtr   r%   r   r   r   Úadd_custom_button  s   €
ý0ør�   c              
   Ã   sÆ   �t  t| ƒ¡4 I d H šJ}t|ƒI d H  | d¡4 I d H š#}| ¡ I d H }dd„ |D ƒW  d   ƒI d H  W  d   ƒI d H  S 1 I d H sFw   Y  W d   ƒI d H  d S 1 I d H s\w   Y  d S )NzŠSELECT id, btn_type, label, content, position, emoji, custom_emoji_id, color, COALESCE(is_visible,1) FROM custom_buttons ORDER BY positionc                 S   sH   g | ] }|d  |d |d |d |d |d |d |d |d d	œ	‘qS )
r   r*   r;   r<   r=   rp   é   é   é   ©	r7   r|   r}   r~   Úpositionrt   ru   rv   rw   r   rC   r   r   r   rE   3  s    þÿÿz&get_custom_buttons.<locals>.<listcomp>)r   r   r   r{   r   r.   r/   r   r   r   Úget_custom_buttons+  s   €ÿýûþ.þr‡   Úbtn_idc                 Ã   s&  �t  t| ƒ¡4 I d H šz}t|ƒI d H  | d|f¡4 I d H šQ}| ¡ I d H }|s>	 W d   ƒI d H  W d   ƒI d H  d S |d |d |d |d |d |d |d |d	 |d
 dœ	W  d   ƒI d H  W  d   ƒI d H  S 1 I d H svw   Y  W d   ƒI d H  d S 1 I d H sŒw   Y  d S )Nz…SELECT id, btn_type, label, content, position, emoji, custom_emoji_id, color, COALESCE(is_visible,1) FROM custom_buttons WHERE id = ?r   r*   r;   r<   r=   rp   r‚   rƒ   r„   r…   )r   r   r   r{   r   r$   )r   rˆ   r   r%   rD   r   r   r   Úget_custom_button:  s(   €ýùþ
ÿøþ.þr‰   Ú__keep__rt   ru   rv   rw   c	              	   Ã   sz  �t  t| ƒ¡4 I d H š¤}	t|	ƒI d H  g g }
}|d ur'|
 d¡ | |¡ |d ur5|
 d¡ | |¡ |d urC|
 d¡ | |¡ |dkrQ|
 d¡ | |¡ |dkr_|
 d¡ | |¡ |dkrm|
 d¡ | |¡ |d ur{|
 d¡ | |¡ |
s‰	 W d   ƒI d H  d S | |¡ |	 d	d
 |
¡› d�|¡I d H  |	 ¡ I d H  W d   ƒI d H  d S 1 I d H s¶w   Y  d S )Nzbtn_type = ?z	label = ?zcontent = ?rŠ   z	emoji = ?zcustom_emoji_id = ?z	color = ?zis_visible = ?zUPDATE custom_buttons SET z, z WHERE id = ?)r   r   r   r{   Úappendr   r   r   )r   rˆ   r|   r}   r~   rt   ru   rv   rw   r   ÚsetsÚvalsr   r   r   Úupdate_custom_buttonI  s2   €
î
 .ërŽ   c              	   Ã   rM   )Nz'DELETE FROM custom_buttons WHERE id = ?r   )r   rˆ   r   r   r   r   Údelete_custom_buttone  rP   r�   )r   )rh   )NNNrŠ   rŠ   rŠ   N)*r   r   r   r   r   r   ÚdirnameÚabspathÚ__file__r
   rn   r   r!   r'   r(   Údictr1   ÚintrA   rB   ÚlistrF   rJ   ÚboolrL   rO   r_   rb   rc   rd   re   rf   rg   ro   rq   rs   r{   r�   r‡   r‰   rŽ   r�   r   r   r   r   Ú<module>   sx   I	
ÿÿ
ÿ
	


þÿÿ
þýÿÿþþý
ý