o
    éÞajW  ã                   @   sÚ  U d dl Z d dlZd dlmZ e j e j e j e¡¡d¡Zi dd“dd“dd	“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d#“d$d%“i d&d'“d(d)“d*d+“d,d-“d.d/“d0d1“d2d3“d4d5“d6d7“d8d9“d:d;“d<d=“d>d?“d@dA“dBdC“dDdE“dFdG“¥i dHdI“dJdK“dLdM“dNdO“dPdQ“dRdS“dTdU“dVdW“dXdY“dZd[“d\d]“d^d_“d`da“dbdc“ddde“dfdg“dhdi“¥djdkdldmdndodpdqdrdsdtœ
¥Z	e
eef edu< dvedwefdxdy„Zdvefdzd{„ZdÕdved}ed~edwefdd€„Zdved}ed�efd‚dƒ„Zdvedwe
fd„d…„Zdvedwee fd†d‡„Zdvedwe
fdˆd‰„ZdvedŠefd‹dŒ„Zdved�edŽedB d�edwe
f
d�d‘„Zdved�edwe
dB fd’d“„Zdvedwee
 fd”d•„Zdved�edwefd–d—„Zdved�efd˜d™„Zdvedwee
 fdšd›„Zdvedwe
fdœd�„Zdvedwee
 fdždŸ„Zdved�edwefd d¡„Z dved�edŽedB d�efd¢d£„Z!dved�efd¤d¥„Z"dvedwee
 fd¦d§„Z#	¨dÖdved©edªed«edB d¬edB d­efd®d¯„Z$dved°efd±d²„Z%dvedwee
 fd³d´„Z&dved©edªed«edB d¬edB d­edµefd¶d·„Z'dved°efd¸d¹„Z(dved°ed�edwefdºd»„Z)dved°edwe*eef fd¼d½„Z+dved°efd¾d¿„Z,dÀdÁ„ Z-dvedÂedÃedÄedwef
dÅdÆ„Z.dvedwee
 fdÇdÈ„Z/dvedÉedwe
dB fdÊdË„Z0			Ì	d×dvedÉedÂedÃedÄedÍedÎedÏedÐefdÑdÒ„Z1dvedÉefdÓdÔ„Z2dS )Øé    N©ÚdatetimeÚdatabaseÚaru   Ø§Ù„Ø¹Ø±Ø¨ÙŠØ©Úenu   Ø§Ù„Ø¥Ù†Ø¬Ù„ÙŠØ²ÙŠØ©Úfru   Ø§Ù„Ù�Ø±Ù†Ø³ÙŠØ©Úesu   Ø§Ù„Ø¥Ø³Ø¨Ø§Ù†ÙŠØ©Údeu   Ø§Ù„Ø£Ù„Ù…Ø§Ù†ÙŠØ©Úruu   Ø§Ù„Ø±ÙˆØ³ÙŠØ©zzh-CNu   Ø§Ù„ØµÙŠÙ†ÙŠØ©Újau   Ø§Ù„ÙŠØ§Ø¨Ø§Ù†ÙŠØ©Úkou   Ø§Ù„ÙƒÙˆØ±ÙŠØ©Útru   Ø§Ù„ØªØ±ÙƒÙŠØ©Úitu   Ø§Ù„Ø¥ÙŠØ·Ø§Ù„ÙŠØ©Úptu   Ø§Ù„Ø¨Ø±ØªØºØ§Ù„ÙŠØ©Únlu   Ø§Ù„Ù‡ÙˆÙ„Ù†Ø¯ÙŠØ©Úplu   Ø§Ù„Ø¨ÙˆÙ„Ù†Ø¯ÙŠØ©Úsvu   Ø§Ù„Ø³ÙˆÙŠØ¯ÙŠØ©Údau   Ø§Ù„Ø¯Ù†Ù…Ø§Ø±ÙƒÙŠØ©Únou   Ø§Ù„Ù†Ø±ÙˆÙŠØ¬ÙŠØ©Úfiu   Ø§Ù„Ù�Ù†Ù„Ù†Ø¯ÙŠØ©Úuku   Ø§Ù„Ø£ÙˆÙƒØ±Ø§Ù†ÙŠØ©Úfau   Ø§Ù„Ù�Ø§Ø±Ø³ÙŠØ©Úhiu   Ø§Ù„Ù‡Ù†Ø¯ÙŠØ©Úbnu   Ø§Ù„Ø¨Ù†ØºØ§Ù„ÙŠØ©Úidu   Ø§Ù„Ø¥Ù†Ø¯ÙˆÙ†ÙŠØ³ÙŠØ©Úmsu   Ø§Ù„Ù…Ù„Ø§ÙŠÙˆÙŠØ©Úthu   Ø§Ù„ØªØ§ÙŠÙ„Ø§Ù†Ø¯ÙŠØ©Úviu   Ø§Ù„Ù�ÙŠØªÙ†Ø§Ù…ÙŠØ©Úelu   Ø§Ù„ÙŠÙˆÙ†Ø§Ù†ÙŠØ©Úcsu   Ø§Ù„ØªØ´ÙŠÙƒÙŠØ©Úsku   Ø§Ù„Ø³Ù„ÙˆÙ�Ø§ÙƒÙŠØ©Úrou   Ø§Ù„Ø±ÙˆÙ…Ø§Ù†ÙŠØ©Úhuu   Ø§Ù„Ù…Ø¬Ø±ÙŠØ©Úbgu   Ø§Ù„Ø¨Ù„ØºØ§Ø±ÙŠØ©Úhru   Ø§Ù„ÙƒØ±ÙˆØ§ØªÙŠØ©Úsru   Ø§Ù„ØµØ±Ø¨ÙŠØ©Úheu   Ø§Ù„Ø¹Ø¨Ø±ÙŠØ©Úuru   Ø§Ù„Ø£Ø±Ø¯ÙŠØ©Úswu   Ø§Ù„Ø³ÙˆØ§Ø­ÙŠÙ„ÙŠØ©Úamu   Ø§Ù„Ø£Ù…Ù‡Ø±ÙŠØ©Úazu   Ø§Ù„Ø£Ø°Ø±Ø¨ÙŠØ¬Ø§Ù†ÙŠØ©Úbeu   Ø§Ù„Ø¨ÙŠÙ„Ø§Ø±ÙˆØ³ÙŠØ©Úcau   Ø§Ù„ÙƒØ§ØªØ§Ù„Ø§Ù†ÙŠØ©Úetu   Ø§Ù„Ø¥Ø³ØªÙˆÙ†ÙŠØ©Úglu   Ø§Ù„Ø¬Ø§Ù„ÙŠÙƒÙŠØ©Úguu   Ø§Ù„ØºÙˆØ¬Ø§Ø±Ø§ØªÙŠØ©Úhyu   Ø§Ù„Ø£Ø±Ù…ÙŠÙ†ÙŠØ©Úisu   Ø§Ù„Ø£ÙŠØ³Ù„Ù†Ø¯ÙŠØ©Úkau   Ø§Ù„Ø¬ÙˆØ±Ø¬ÙŠØ©Úkku   Ø§Ù„ÙƒØ§Ø²Ø§Ø®ÙŠØ©Úkmu   Ø§Ù„Ø®Ù…ÙŠØ±ÙŠØ©Úknu   Ø§Ù„ÙƒØ§Ù†Ø§Ø¯ÙŠØ©Últu   Ø§Ù„Ù„ÙŠØªÙˆØ§Ù†ÙŠØ©u   Ø§Ù„Ù„Ø§ØªÙ�ÙŠØ©u   Ø§Ù„Ù…Ù‚Ø¯ÙˆÙ†ÙŠØ©u   Ø§Ù„Ù…Ø§Ù„Ø§ÙŠØ§Ù„Ø§Ù…ÙŠØ©u   Ø§Ù„Ù…Ù†ØºÙˆÙ„ÙŠØ©u   Ø§Ù„Ù…Ø§Ù„Ø·ÙŠØ©u   Ø§Ù„Ù†ÙŠØ¨Ø§Ù„ÙŠØ©u   Ø§Ù„Ø¨Ù†Ø¬Ø§Ø¨ÙŠØ©u   Ø§Ù„Ø³Ù„ÙˆÙ�ÙŠÙ†ÙŠØ©u   Ø§Ù„Ø£Ù„Ø¨Ø§Ù†ÙŠØ©u   Ø§Ù„ØªØ§Ù…ÙŠÙ„ÙŠØ©)
ÚlvÚmkÚmlÚmnÚmtÚneÚpaÚslÚsqÚtaÚ	LANGUAGESÚ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)rB   © rK   ú./var/www/kodo/factory/cobots/translation/db.pyÚget_db_pathL   s   rM   c              	   Ã   s,  �t  t| ƒ¡4 I d H š}}| d¡I d H  | d¡I d H  | 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  qSt ¡ D ]\}}| d||f¡I d H  qg| ¡ I d H  W d   ƒI d H  d S 1 I d H s�w   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
            )
        av  
            CREATE TABLE IF NOT EXISTS funded_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',
                target_count     INTEGER NOT NULL DEFAULT 100,
                current_count    INTEGER DEFAULT 0,
                is_active        INTEGER DEFAULT 1,
                added_at         TEXT,
                completed_at     TEXT
            )
        a]  
            CREATE TABLE IF NOT EXISTS funded_subscriptions (
                id                INTEGER PRIMARY KEY AUTOINCREMENT,
                funded_channel_id INTEGER NOT NULL,
                user_id           INTEGER NOT NULL,
                subscribed_at     TEXT,
                UNIQUE(funded_channel_id, user_id)
            )
        zÖ
            CREATE TABLE IF NOT EXISTS language_settings (
                lang_code  TEXT PRIMARY KEY,
                lang_name  TEXT NOT NULL,
                is_enabled INTEGER DEFAULT 1
            )
        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(   ðŸ”´ Ø§Ù„Ø¨ÙˆØª Ù…Ù‚Ù�ÙˆÙ„ Ø­Ø§Ù„ÙŠØ§Ù‹.)Úwelcome_messageÚ )Únotify_new_usersrO   )Únotify_blockedrO   )Úfund_notifyrO   z9INSERT OR IGNORE INTO settings (key, value) VALUES (?, ?)z[INSERT OR IGNORE INTO language_settings (lang_code, lang_name, is_enabled) VALUES (?, ?, 1))Ú	aiosqliteÚconnectrM   ÚexecuterA   ÚitemsÚcommit)rB   ÚdbÚdefaultsÚkeyÚvalueÚ	lang_codeÚ	lang_namerK   rK   rL   Úinit_dbQ   s.   €	þý.�ra   rR   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   ©rV   rW   rM   rX   Úfetchone)rB   r]   rb   r[   ÚcurÚrowrK   rK   rL   Úget_setting¸   s   €þÿ.ÿrg   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 (?, ?)©rV   rW   rM   rX   rZ   )rB   r]   r^   r[   rK   rK   rL   Úset_setting¿   s   €
ÿ.üri   c              
   Ã   ó´   �t  t| ƒ¡4 I d H šA}| d¡4 I d H š!}dd„ | ¡ I d H 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 sSw   Y  d S )NzSELECT key, value FROM settingsc                 S   s   i | ]	}|d  |d “qS )r   é   rK   ©Ú.0ÚrrK   rK   rL   Ú
<dictcomp>Ê   s    z$get_all_settings.<locals>.<dictcomp>©rV   rW   rM   rX   Úfetchall©rB   r[   re   rK   rK   rL   Úget_all_settingsÇ   s   €ÿÿ.ÿrs   c              
   Ã   rj   )Nz:SELECT lang_code FROM language_settings WHERE is_enabled=1c                 S   s   g | ]}|d  ‘qS )r   rK   rl   rK   rK   rL   Ú
<listcomp>Ò   s    z)get_enabled_languages.<locals>.<listcomp>rp   rr   rK   rK   rL   Úget_enabled_languagesÍ   s   €ÿýÿ.ÿru   c              
   Ã   rj   )Nz>SELECT lang_code, lang_name, is_enabled FROM language_settingsc                 S   s(   i | ]}|d  |d t |d ƒdœ“qS )r   rk   é   )r`   Ú
is_enabled)Úboolrl   rK   rK   rL   ro   Ú   s    ÿÿz)get_language_settings.<locals>.<dictcomp>rp   rr   rK   rK   rL   Úget_language_settingsÕ   s   €ÿþýÿ.ÿry   r_   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 )NzJUPDATE language_settings SET is_enabled = 1 - is_enabled WHERE lang_code=?rh   )rB   r_   r[   rK   rK   rL   Útoggle_languageà   s   €
þ.ûr{   Ú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=?zRINSERT INTO users (id,username,first_name,last_active,joined_at) VALUES(?,?,?,?,?)r   T)r   r}   r~   Ú	is_bannedÚ
is_blockedÚis_newzAUPDATE users SET username=?,first_name=?,last_active=? WHERE id=?rk   rv   é   é   F©	r   ÚutcnowÚ	isoformatrV   rW   rM   rX   rd   rZ   )rB   r|   r}   r~   Únowr[   re   rf   rK   rK   rL   Úget_or_create_useré   s2   €(ÿ
ýÿö

þÿ0ïr‰   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 )Nr   r   rk   rv   rƒ   r„   )r   r}   r~   r€   r�   rc   )rB   r|   r[   re   rf   rK   rK   rL   Úget_user  s   €ýÿÿüÿ.ÿrŠ   c              
   Ã   rj   )NzKSELECT id,username,first_name FROM users WHERE is_banned=0 AND is_blocked=0c                 S   ó$   g | ]}|d  |d |d dœ‘qS ©r   rk   rv   )r   r}   r~   rK   rl   rK   rK   rL   rt     ó    ÿz(get_all_active_users.<locals>.<listcomp>rp   rr   rK   rK   rL   Úget_all_active_users  ó   €ÿÿýÿ.ÿrŽ   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)rV   rW   rM   rX   rd   rZ   ©rB   r|   r[   re   rK   rK   rL   Úban_user  s   €þÿ(ÿ0úr‘   c              	   Ã   rz   )Nz'UPDATE users SET is_banned=0 WHERE id=?rh   ©rB   r|   r[   rK   rK   rL   Ú
unban_user  ó
   €.þr“   c              
   Ã   rj   )Nz:SELECT id,username,first_name FROM users WHERE is_banned=1c                 S   r‹   rŒ   rK   rl   rK   rK   rL   rt   )  r�   z$get_banned_users.<locals>.<listcomp>rp   rr   rK   rK   rL   Úget_banned_users$  r�   r•   c              
   Ã   s’  �t  t| ƒ¡4 I d H š«}| d¡4 I d H š}| ¡ I d H d }W d   ƒI d H  n1 I d H s0w   Y  | d¡4 I d H š}| ¡ I d H d }W d   ƒI d H  n1 I d H sXw   Y  | d¡4 I d H š}| ¡ I d H d }W d   ƒI d H  n1 I d H s€w   Y  | d¡4 I d H š}| ¡ I d H d }W d   ƒI d H  n1 I d H s¨w   Y  W d   ƒI d H  n1 I d H s½w   Y  ||||dœS )NzSELECT COUNT(*) FROM usersr   z,SELECT COUNT(*) FROM users WHERE is_banned=1z-SELECT COUNT(*) FROM users WHERE is_blocked=1z=SELECT COUNT(*) FROM users WHERE is_banned=0 AND is_blocked=0)ÚtotalÚbannedÚblockedÚactiverc   )rB   r[   re   r–   r—   r˜   r™   rK   rK   rL   Úget_statistics-  s&   €(ÿ(ÿ(ÿÿ*ý(ùrš   c              
   Ã   rj   )Nz)SELECT id,username,first_name FROM adminsc                 S   r‹   rŒ   rK   rl   rK   rK   rL   rt   ?  r�   zget_admins.<locals>.<listcomp>rp   rr   rK   rK   rL   Ú
get_admins<  s   €ÿÿÿ.ÿr›   c              
   Ã   s²   �t  t| ƒ¡4 I d H š@}| d|f¡4 I d H š}t| ¡ I d H ƒ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=?)rV   rW   rM   rX   rx   rd   r�   rK   rK   rL   Úis_adminC  s   €ÿÿ.ÿrœ   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 )NzOINSERT OR REPLACE INTO admins (id,username,first_name,added_at) VALUES(?,?,?,?)©r   r†   r‡   rV   rW   rM   rX   rZ   )rB   r|   r}   r~   rˆ   r[   rK   rK   rL   Ú	add_adminI  s   €

þ.ûrž   c              	   Ã   rz   )NzDELETE FROM admins WHERE id=?rh   r’   rK   rK   rL   Úremove_adminT  r”   rŸ   c              
   Ã   rj   )NzvSELECT id,channel_id,channel_username,channel_title,invite_link,display_type FROM mandatory_channels WHERE is_active=1c              	   S   s6   g | ]}|d  |d |d |d |d |d dœ‘qS )r   rk   rv   rƒ   r„   é   )r   Ú
channel_idÚchannel_usernameÚchannel_titleÚinvite_linkÚdisplay_typerK   rl   rK   rK   rL   rt   `  s
    þ
ÿz*get_mandatory_channels.<locals>.<listcomp>rp   rr   rK   rK   rL   Úget_mandatory_channelsZ  s   €ÿþüÿ.ÿr¦   Úbuttonsr¡   r£   r¢   r¤   r¥   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 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�   )rB   r¡   r£   r¢   r¤   r¥   rˆ   r[   rK   rK   rL   Úadd_mandatory_channele  s   €
ü.ùr¨   Úchannel_db_idc              	   Ã   rz   )Nz4UPDATE mandatory_channels SET is_active=0 WHERE id=?rh   ©rB   r©   r[   rK   rK   rL   Úremove_mandatory_channels  ó   €
ÿ.ür«   c              
   Ã   rj   )NzŽSELECT id,channel_id,channel_username,channel_title,invite_link,display_type,target_count,current_count FROM funded_channels WHERE is_active=1c                 S   sB   g | ]}|d  |d |d |d |d |d |d |d dœ‘qS )	r   rk   rv   rƒ   r„   r    é   é   )r   r¡   r¢   r£   r¤   r¥   Útarget_countÚcurrent_countrK   rl   rK   rK   rL   rt   �  s    ý
þz'get_funded_channels.<locals>.<listcomp>rp   rr   rK   rK   rL   Úget_funded_channels{  s   €ÿýüÿ.ÿr±   r¯   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 s;w   Y  d S )Nz³INSERT OR REPLACE INTO funded_channels (channel_id,channel_username,channel_title,invite_link,display_type,target_count,current_count,is_active,added_at) VALUES(?,?,?,?,?,?,0,1,?)r�   )	rB   r¡   r£   r¢   r¤   r¥   r¯   rˆ   r[   rK   rK   rL   Úadd_funded_channel‡  s   €ÿ
ü.ør²   c              	   Ã   rz   )Nz1UPDATE funded_channels SET is_active=0 WHERE id=?rh   rª   rK   rK   rL   Úremove_funded_channel–  r¬   r³   c              
   Ã   s  �t  ¡  ¡ }t t| ƒ¡4 I d H šh}| d||f¡4 I d H š'}| ¡ I d H r<	 W d   ƒI d H  W d   ƒI d H  dS W d   ƒI d H  n1 I d H sLw   Y  | d|||f¡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 )NzKSELECT id FROM funded_subscriptions WHERE funded_channel_id=? AND user_id=?FzXINSERT INTO funded_subscriptions (funded_channel_id,user_id,subscribed_at) VALUES(?,?,?)zCUPDATE funded_channels SET current_count=current_count+1 WHERE id=?Tr…   )rB   r©   r|   rˆ   r[   re   rK   rK   rL   Úrecord_funded_subž  s2   €þûÿ(ü
ý
þ0ïr´   c              
   Ã   sÆ   �t  t| ƒ¡4 I d H šJ}| d|f¡4 I d H š(}| ¡ I d H }|r*|d |d fn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 )NzASELECT current_count,target_count FROM funded_channels WHERE id=?r   rk   )r   r   rc   )rB   r©   r[   re   rf   rK   rK   rL   Úget_funded_channel_countµ  s   €þûÿ.ÿrµ   c              	   Ã   sz   �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 s6w   Y  d S )Nz@UPDATE funded_channels SET is_active=0,completed_at=? WHERE id=?r�   )rB   r©   rˆ   r[   rK   rK   rL   Úmark_funded_completeÀ  s   €
þ.ûr¶   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)rX   Ú	Exception)r[   ÚcolÚddlrK   rK   rL   Ú_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   rV   rW   rM   r¾   rX   r†   r‡   rZ   Ú	lastrowid)rB   r¿   rÀ   rÁ   Ú_dtr[   re   rK   rK   rL   Ú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   rk   rv   rƒ   r„   r    r­   r®   é   ©	r   r¿   rÀ   rÁ   Úpositionr·   r¸   r¹   rº   rK   rl   rK   rK   rL   rt   ë  s    þÿÿz&get_custom_buttons.<locals>.<listcomp>)rV   rW   rM   r¾   rX   rq   )rB   r[   re   ÚrowsrK   rK   rL   Ú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   rk   rv   rƒ   r„   r    r­   r®   rÅ   rÆ   )rV   rW   rM   r¾   rX   rd   )rB   rÊ   r[   re   rn   rK   rK   rL   Úget_custom_buttonò  s(   €ýùþ
ÿøþ.þrË   Ú__keep__r·   r¸   r¹   rº   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 = ?)rV   rW   rM   r¾   ÚappendrX   rI   rZ   )rB   rÊ   r¿   rÀ   rÁ   r·   r¸   r¹   rº   r[   ÚsetsÚvalsrK   rK   rL   Úupdate_custom_button  s2   €
î
 .ërÐ   c              	   Ã   rz   )Nz'DELETE FROM custom_buttons WHERE id = ?rh   )rB   rÊ   r[   rK   rK   rL   Údelete_custom_button  r”   rÑ   )rR   )r§   )NNNrÌ   rÌ   rÌ   N)3rE   rV   r   rH   rI   ÚdirnameÚabspathÚ__file__rG   rA   ÚdictÚstrÚ__annotations__rM   ra   rg   ri   rs   Úlistru   ry   r{   Úintr‰   rŠ   rŽ   rx   r‘   r“   r•   rš   r›   rœ   rž   rŸ   r¦   r¨   r«   r±   r²   r³   r´   Útuplerµ   r¶   r¾   rÄ   rÉ   rË   rÐ   rÑ   rK   rK   rK   rL   Ú<module>   s’  
ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Ý$Ü%Û&Ú'Ù(Ø)×*Ö+Õ,Ô-Ó.Ò/Ñ0Ð1Ï2Î3Í4ÃAg
	ÿÿ
ÿ
	
	
ÿ
ÿþÿÿ
þÿÿþ
þ
ÿ
ÿÿ

ÿ	ýÿÿþþý
ý