o
    {i-                  	   @   s   d dl Z d dlZejejd eeZdZdZdd Z	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fddZdeded
efddZd
ee fddZd	ed
edB fddZd	eded
efddZd(deded
edB fdd Zded
efd!d"Zd)ded$ed%ed
efd&d'ZdS )*    N)levelzdata.dbzbot_menu.dbc               
   C   s  z8t t} |  }|d |d |   |d dd | D }d|vr3|d |   |   W n tyR } zt	
d|  W Y d }~nd }~ww zt t}| }|d	 |  |  W d S  ty } zt	
d
|  W Y d }~d S d }~ww )Na  
            CREATE TABLE IF NOT EXISTS users (
                user_id INTEGER PRIMARY KEY,
                first_name TEXT,
                last_name TEXT,
                username TEXT,
                referal INTEGER DEFAULT 0,
                referal_balance REAL DEFAULT 0,
                referal_link TEXT,
                balance REAL DEFAULT 0,
                orders INTEGER DEFAULT 0,
                user_status BOOLEAN DEFAULT TRUE,
                user_language TEXT
            )
        aT  
            CREATE TABLE IF NOT EXISTS referals (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                referals_user_id INTEGER,
                gen_referal_user_id INTEGER,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                UNIQUE(referals_user_id, gen_referal_user_id)
            )
        zPRAGMA table_info(users)c                 S      g | ]}|d  qS     .0rr   r   5/var/www/www-root/data/www/magazinbotpanel.site/db.py
<listcomp>0       zcreate_db.<locals>.<listcomp>user_languagez/ALTER TABLE users ADD COLUMN user_language TEXTu.   Ошибка при создании data.db: a  
            CREATE TABLE IF NOT EXISTS language (
                name TEXT PRIMARY KEY,
                button1 TEXT, button2 TEXT, button3 TEXT, button4 TEXT, button5 TEXT,
                button6 TEXT, button7 TEXT, button8 TEXT, button9 TEXT, button10 TEXT,
                button11 TEXT, button12 TEXT, button13 TEXT, button14 TEXT, button15 TEXT,
                button16 TEXT, button17 TEXT, button18 TEXT, button19 TEXT, button20 TEXT,
                text1 TEXT, text2 TEXT, text3 TEXT, text4 TEXT, text5 TEXT,
                text6 TEXT, text7 TEXT, text8 TEXT, text9 TEXT, text10 TEXT,
                text11 TEXT, text12 TEXT, text13 TEXT, text14 TEXT, text15 TEXT,
                text16 TEXT, text17 TEXT, text18 TEXT, text19 TEXT, text20 TEXT,
                text21 TEXT, text22 TEXT, text23 TEXT, text24 TEXT, text25 TEXT, 
                text26 TEXT, text27 TEXT, text28 TEXT, text29 TEXT, text30 TEXT,
                text31 TEXT
            )
        u2   Ошибка при создании bot_menu.db: )sqlite3connectDATA_DBcursorexecutecommitfetchallclose	ExceptionloggererrorMENU_DB)	conn_datacurcolse	conn_menucurmr   r   r
   	create_db   s4   







r    c              
   C   s   z6t t}| }|d| f | r|  W d S d|  }|d| ||||f |  |  W d S  tyT } zt	
d|  d|  W Y d }~d S d }~ww )Nz+SELECT user_id FROM users WHERE user_id = ?z&https://t.me/asdasdass2dasdabot?start=z
            INSERT INTO users (user_id, first_name, last_name, username, referal_link)
            VALUES (?, ?, ?, ?, ?)
        uB   Ошибка при добавлении пользователя : )r   r   r   r   r   fetchoner   r   r   r   r   )user_id
first_name	last_nameusernameconnr   referal_linkr   r   r   r
   add_userR   s"   

$r)   r#   returnc              
   C   s   z:t t}| }|d| f | }|  |r5|d d ur8zt|d W W S  ty4   Y W dS w W d S W d S  tyX } zt	
d|  d|  W Y d }~dS d }~ww )Nz+SELECT balance FROM users WHERE user_id = ?r   g        zget_user_balance error user_id=r!   )r   r   r   r   r   r"   r   floatr   r   r   r#   r'   r   rowr   r   r   r
   get_user_balancee   s$   
r.   amountc              
   C   sv   zt t}| }|d|| f |  |  W dS  ty: } zt	d|  d|  W Y d}~dS d}~ww )ud   
    Обновляет баланс пользователя (списание средств)
    z8UPDATE users SET balance = balance - ? WHERE user_id = ?Tz"update_user_balance error user_id=r!   NF)
r   r   r   r   r   r   r   r   r   r   r#   r/   r'   r   r   r   r   r
   update_user_balancev   s   
r1   c              
   C   s   z't t}| }|d|| f |  |  td|  d|  W dS  t	yE } zt
d|  d|  W Y d}~dS d}~ww )	uB   
    Пополняет баланс пользователя
    z8UPDATE users SET balance = balance + ? WHERE user_id = ?zBalance added: user z +Tzadd_user_balance error user_id=r!   NF)r   r   r   r   r   r   r   r   infor   r   r0   r   r   r
   add_user_balance   s   
r3   referals_user_idgen_referal_user_idc                 C   s  zgt t}| }|d dd | D }|sd}n
|d }d| d}||| |f | rD|  td|  d	|  W d
S |d| |f |d|f |	  |  td|  d|  W dS  t
y } ztd|  d	| d|  W Y d}~d
S d}~ww )u   
    Обрабатывает реферальную регистрацию
    Returns: True если реферал успешно обработан, False если уже был обработан
    zPRAGMA table_info(referals)c                 S   r   r   r   )r   colr   r   r
   r      r   z"handle_referal.<locals>.<listcomp>zUSELECT 1 FROM referals WHERE referals_user_id = ? AND gen_referal_user_id = ? LIMIT 1r   SELECT zE FROM referals WHERE referals_user_id = ? AND gen_referal_user_id = ?zReferal already processed: z -> FzJINSERT INTO referals (referals_user_id, gen_referal_user_id) VALUES (?, ?)z8UPDATE users SET referal = referal + 1 WHERE user_id = ?zReferal processed: user z referred by Tu1   Ошибка обработки реферала r!   N)r   r   r   r   r   r   r"   r   printr   r   r   r   )r4   r5   r'   r   columnscheck_querycheck_columnr   r   r   r
   handle_referal   s>   

r<   c               
   C   sx   g } zt t}| }|d dd | D } |  W | S  ty; } zt	d|  W Y d }~| S d }~ww )Nz6SELECT name FROM language ORDER BY name COLLATE NOCASEc                 S   s    g | ]}|r|d  r|d  qS )r   r   r   r   r   r
   r      s     z!get_languages.<locals>.<listcomp>u/   Ошибка при чтении языков: )
r   r   r   r   r   r   r   r   r   r   )langsr'   r   r   r   r   r
   get_languages   s   


r>   c              
   C   s   z&t t}| }|d| f | }|  |r$|d r$|d W S d W S  tyD } zt	d|  d|  W Y d }~d S d }~ww )Nz1SELECT user_language FROM users WHERE user_id = ?r   uD   Ошибка получения языка пользователя r!   )
r   r   r   r   r   r"   r   r   r   r   r,   r   r   r
   get_user_language   s   
r?   langc              
   C   s   z)t t}| }|d|| f |jdkr|d| |f |  |  W dS  tyG } zt	
d|  d|  W Y d }~dS d }~ww )Nz4UPDATE users SET user_language = ? WHERE user_id = ?r   zBINSERT OR IGNORE INTO users (user_id, user_language) VALUES (?, ?)Tu4   Ошибка сохранения языка для r!   F)r   r   r   r   r   rowcountr   r   r   r   r   )r#   r@   r'   r   r   r   r   r
   set_user_language   s   

rB   text1fieldc                 C   s   | sd S dd t ddD }||vrd}z*tt}| }|d| d| f | }|  |r<|d r<|d W S d W S  ty_ } zt	
d	| d
|  d|  W Y d }~d S d }~ww )Nc                 S   s   h | ]}d | qS )textr   r   ir   r   r
   	<setcomp>       z$get_language_text.<locals>.<setcomp>r       rC   r7    FROM language WHERE name = ?r   u#   Ошибка чтения поля u    для языка r!   )ranger   r   r   r   r   r"   r   r   r   r   )r@   rD   allowedr'   r   r-   r   r   r   r
   get_language_text   s"   
rN   c           	   
   C   s   i }zOt t}| }ddd tddD }|d| d| f | }|  |rLt	|ddD ]\}}|rKt
| rKt
| |d	| < q4W |S W |S  tyo } ztd
|  d|  W Y d}~|S d}~ww )u  
    Возвращает словарь названий кнопок для языка:
    {'button1': '...', 'button2': '...', ..., 'button8': '...'}
    Пустые/NULL значения игнорируются при построении клавиатуры.
    ,c                 S   s   g | ]}d | qS )buttonr   rF   r   r   r
   r     rI   z(get_language_buttons.<locals>.<listcomp>r   	   r7   rK   )startrP   u9   Ошибка чтения кнопок для языка r!   N)r   r   r   r   joinrL   r   r"   r   	enumeratestrstripr   r   r   )	r@   resultr'   r   fieldsr-   rG   valr   r   r   r
   get_language_buttons  s,   
 rZ    columndefault_valuec                 C   s   |}z>t t}| }|d| d| f | }|  |r8|d r;t|d  r>t|d  }W |S W |S W |S W |S  t	ya } zt
d| d|  d|  W Y d}~|S d}~ww )u   
    Универсальный геттер текста кнопок по столбцу (button11, button12, button16 и т.д.)
    r7   rK   r   zget_button_text error col=z lang=r!   N)r   r   r   r   r   r"   r   rU   rV   r   r   r   )r@   r\   r]   txtr'   r   r-   r   r   r   r
   get_button_text  s*   
&r_   )rC   )r[   )r   loggingbasicConfigINFO	getLogger__name__r   r   r   r    r)   intr+   r.   boolr1   r3   r<   listrU   r>   r?   rB   rN   dictrZ   r_   r   r   r   r
   <module>   s$    
G3 