
    ?UPi                     @    d dl Z d dlmZ d dlmZmZmZ  G d d      Zy)    N)datetime)DATABASE_PATHWINNERS_TXT_PATHSTREAM_STATS_TXT_PATHc                   D    e Zd Zd Zd Zd Zd Zd ZddZd Z	d Z
d	 Zy
)Databasec                 @    d | _         d | _        | j                          y )N)conncursorinit_databaseselfs    /root/twitch_bot/database.py__init__zDatabase.__init__	   s    	    c                    	 t        j                  t        d      | _        | j                  j	                         | _        | j                  j                  d       | j                  j                  d       | j                  j                          t        d       t        d       y# t        $ r}t        d|        Y d}~yd}~ww xY w)	u0   Инициализация базы данныхF)check_same_threada  
                CREATE TABLE IF NOT EXISTS winners (
                    ID INTEGER PRIMARY KEY AUTOINCREMENT,
                    Date_Time TEXT NOT NULL,
                    Winner TEXT NOT NULL,
                    TradeOffer TEXT NOT NULL
                )
            a  
                CREATE TABLE IF NOT EXISTS stream_stats (
                    ID INTEGER PRIMARY KEY AUTOINCREMENT,
                    Stream_Start TEXT NOT NULL,
                    Stream_End TEXT NOT NULL,
                    Stream_Duration TEXT NOT NULL,
                    Total_Messages INTEGER NOT NULL,
                    Active_Users TEXT NOT NULL
                )
            uE   ✅ [DATABASE] База данных инициализированаu5   📊 [DATABASE] Таблицы: winners, stream_statsu8   ❌ [DATABASE] Ошибка инициализации: N)	sqlite3connectr   r
   r   executecommitprint	Exceptionr   es     r   r   zDatabase.init_database   s    	RODI))**,DK KK !  KK 	! 	 IIYZIJ 	RLQCPQQ	Rs   B%B( (	C	1CC	c           	         	 t        j                         j                  d      }| j                  j	                  d|||f       | j
                  j                          t        t        dd      5 }|j                  | d| d| d       ddd       t        d	|        y
# 1 sw Y   xY w# t        $ r}t        d|        Y d}~yd}~ww xY w)u8   Сохранение победителя в БД и TXT%Y-%m-%d %H:%M:%Szr
                INSERT INTO winners (Date_Time, Winner, TradeOffer)
                VALUES (?, ?, ?)
            autf-8encodingz | 
Nu7   💾 [DATABASE] Победитель сохранён: TuG   ❌ [DATABASE] Ошибка сохранения победителя: F)r   nowstrftimer   r   r
   r   openr   writer   r   )r   winner
trade_link	date_timefr   s         r   save_winnerzDatabase.save_winner0   s    	 //0CDI KK ! VZ02 II &g> D!9+SJ<rBCD KF8TU	D D
  	[\][^_`	s0   A.B. 0B"B. "B+'B. .	C7C

Cc           	         	 t        j                         }||z
  }t        |j                         dz        }t        |j                         dz  dz        }| d| d}dj	                  t        |            }	| j                  j                  d|j                  d      |j                  d      |||	f       | j                  j                          t        t        dd	
      5 }
|
j                  dd d       |
j                  d|j                  d       d|j                  d       d       |
j                  d| d       |
j                  d| d       |
j                  dt        |       d       |
j                  d|	 d       |
j                  d d       ddd       t        d       y# 1 sw Y   xY w# t         $ r}t        d|        Y d}~yd}~ww xY w)u6   Сохранение статистики стримаi  <   u   ч u   мz, z
                INSERT INTO stream_stats (Stream_Start, Stream_End, Stream_Duration, Total_Messages, Active_Users)
                VALUES (?, ?, ?, ?, ?)
            r   r   r   r    r"   zP================================================================================u   Стрим: z - z%H:%M:%Su   Длительность: u   Всего сообщений: u-   Активных пользователей: u   Список: NuD   💾 [DATABASE] Статистика стрима сохраненаTuG   ❌ [DATABASE] Ошибка сохранения статистики: F)r   r#   inttotal_secondsjoinsortedr   r   r$   r
   r   r%   r   r&   lenr   r   )r   stream_start_timetotal_messagesactive_users
stream_enddurationhoursminutesduration_str
users_listr*   r   s               r   save_stream_statszDatabase.save_stream_statsF   s   &	!J!$55H..0D89E8113d:rABG#WCy3L6,#78J KK ! "**+>?##$78	 II +S7C )q"XJb)*"#4#=#=>Q#R"SSVWaWjWjkuWvVwwyz|4\N"EF9.9ILMGLHYGZZ\]^.B788*B() XZ) )  	[\][^_`	s1   C!G  #B=F4 G  4F=9G   	G!	GG!c                     	 | j                   j                  d       | j                   j                         S # t        $ r}t	        d|        g cY d}~S d}~ww xY w)u0   Получить всех победителейz&SELECT * FROM winners ORDER BY ID DESCuG   ❌ [DATABASE] Ошибка получения победителей: Nr   r   fetchallr   r   r   s     r   get_all_winnerszDatabase.get_all_winnersp   sT    	KK HI;;'')) 	[\][^_`I	   47 	A AAAc                     	 | j                   j                  d|        | j                   j                         S # t        $ r}t	        d|        g cY d}~S d}~ww xY w)u<   Получить последних N победителейz-SELECT * FROM winners ORDER BY ID DESC LIMIT uZ   ❌ [DATABASE] Ошибка получения последних победителей: Nr>   )r   limitr   s      r   get_last_winnerszDatabase.get_last_winnersy   s\    	KK"OPUw WX;;'')) 	nopnqrsI	s   7: 	AAAAc                     	 | j                   j                  d       | j                   j                         S # t        $ r}t	        d|        g cY d}~S d}~ww xY w)u;   Получить всю статистику стримовz+SELECT * FROM stream_stats ORDER BY ID DESCuE   ❌ [DATABASE] Ошибка получения статистики: Nr>   r   s     r   get_all_stream_statszDatabase.get_all_stream_stats   sT    	KK MN;;'')) 	YZ[Y\]^I	rA   c                    	 | j                   j                  d       | j                   j                         d   }| j                   j                  d       | j                   j                         d   }| j                   j                  d       | j                   j                         d   xs d}|||dS # t        $ r}t	        d|        Y d}~yd}~ww xY w)u0   Получить общую статистикуzSELECT COUNT(*) FROM winnersr   z!SELECT COUNT(*) FROM stream_statsz,SELECT SUM(Total_Messages) FROM stream_stats)winners_countstreams_countr4   uP   ❌ [DATABASE] Ошибка получения общей статистики: N)r   r   fetchoner   r   )r   rH   rI   r4   r   s        r   get_total_statszDatabase.get_total_stats   s    	KK >? KK00215MKK CD KK00215MKK NO![[113A6;!N "/!."0 
  	defdghi	s   B1B4 4	C=CCc                 h    | j                   r&| j                   j                          t        d       yy)u+   Закрыть соединение с БДu3   👋 [DATABASE] Соединение закрытоN)r
   closer   r   s    r   rM   zDatabase.close   s%    99IIOOGH r   N)
   )__name__
__module____qualname__r   r   r+   r<   r@   rD   rF   rK   rM    r   r   r   r      s3    
 RD,(T*Ir   r   )r   r   configr   r   r   r   rR   r   r   <module>rT      s!      I I\I \Ir   