
    ?UPiP                         d dl Z d dlmZmZmZ d dlmZmZmZm	Z	 d dl
mZmZmZmZmZ d dlmZ d dlmZ  G d d      Zy)	    N)UpdateInlineKeyboardButtonInlineKeyboardMarkup)ApplicationCommandHandlerCallbackQueryHandlerContextTypes)TELEGRAM_BOT_TOKENSUPER_ADMIN_IDDATABASE_PATHWINNERS_TXT_PATHSTREAM_STATS_TXT_PATH)Database)AdminManagerc                   "   e Zd Zd ZddZd Zd Zd Zdede	j                  fdZdede	j                  fd	Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zdede	j                  fdZdede	j                  fdZdede	j                  fdZd Zd Zy)TelegramBotc                 f    || _         d | _        t        t              | _        t               | _        y )N)dbappr   r   admin_managersetchat_ids)selfdatabases      /root/twitch_bot/telegram_bot.py__init__zTelegramBot.__init__   s&    ).9    c                     t        dd      t        dd      gt        dd      t        dd	      gg}|r|j                  t        d
d      g       |j                  t        dd      g       t        |      S )u+   Главное меню с кнопкамиu   🏆 Победителиwinnerscallback_datau   📊 Статистикаstatsu   📄 Файлыfilesu   📈 Стримыstreamsu   👥 Админыadminsu   ℹ️ Помощьhelp)r   appendr   )r   is_super_adminkeyboards      r   get_main_keyboardzTelegramBot.get_main_keyboard   s     %%@PYZ$%@PWX
 %%6gN$%8	R	
 OO$%8Q  	 !6fM
 	 $H--r   c                     t        dd      gt        dd      gt        dd      gt        dd	      gg}t        |      S )
u   Меню файлов   💾 База данныхfile_databaser       📄 winners.txtfile_winners   📄 stream_stats.txt
file_stats   ◀️ Назад	back_mainr   r   r   r)   s     r   get_files_keyboardzTelegramBot.get_files_keyboard,   sP     "">o^_!"4NST!"9VW!"5[QR	
 $H--r   c                 j    t        dd      gt        dd      gt        dd      gg}t        |      S )u.   Меню управления админамиu    👥 Список админовlist_adminsr    u   🆔 Мой IDmy_idr2   r3   r4   r5   s     r   get_admins_keyboardzTelegramBot.get_admins_keyboard6   sC     ""DTabc!"2'JK!"5[QR

 $H--r   c                 6    t        dd      gg}t        |      S )u   Кнопка назадr2   r3   r    r4   r5   s     r   get_back_keyboardzTelegramBot.get_back_keyboard?   s     )*=[YZ[#H--r   updatecontextc                   K   |j                   j                  }| j                  j                  |      r/| j                  j                  |j                  j                         | j                  j                  |      s$|j                  j                  d       d{    y| j                  j                  |      }d}|r|dz  }n|dz  }|dz  }|j                  j                  || j                  |             d{    y7 i7 w)u   Команда /start$   ❌ У вас нет доступа!NuL   🤖 Добро пожаловать в панель управления!

u5   👑 Вы главный администратор

u)   🛡️ Вы администратор

"   Выберите действие:reply_markup)effective_useridr   is_adminr   addeffective_chatmessage
reply_textr(   r*   )r   r=   r>   user_idis_superwelcome_texts         r   startzTelegramBot.startF   s     ''** &&w/MMf33667!!**73..++,RSSS%%44W=gUULIIL<<nn''//9 ( 
 	
 	
 T	
s%   BD
DA#D
 DD
D
c                   K   |j                   }|j                          d{    |j                  j                  }| j                  j                  |      s|j                  d       d{    y| j                  j                  |      }|j                  }|dk(  r+|j                  d| j                  |             d{    y|dk(  r| j                  |       d{    y|dk(  r| j                  |       d{    y|dk(  r| j                  |       d{    y|d	k(  r*|j                  d
| j                                d{    y|dk(  r| j                  |       d{    y|dk(  r| j                  |       d{    y|dk(  r| j!                  |       d{    y|dk(  rF|r*|j                  d| j#                                d{    y|j                  d       d{    y|dk(  r|r| j%                  |       d{    yy|dk(  r| j'                  |       d{    y|dk(  r| j)                  |       d{    yy7 <7 7 7 7 i7 M7 !7 7 7 7 7 7 e7 G7 *w)u3   Обработка нажатий на кнопкиNr@   r3   rA   rB   r   r"   r$   r#   u;   📄 Выберите файл для скачивания:r-   r/   r1   r%   u;   👥 Управление администраторами:u6   ❌ Только для главного админа!r8   r9   r&   )callback_queryanswer	from_userrE   r   rF   edit_message_textr(   datar*   show_all_winners
show_statsshow_stream_statsr6   send_database_filesend_winners_filesend_stats_filer:   show_admins_list
show_my_id	show_help)r   r=   r>   queryrK   rL   rT   s          r   button_handlerzTelegramBot.button_handlerc   s    %%lln//$$!!**73))*PQQQ%%44W=zz ;))4!33H= *    Y''... W_//%((( Y((/// W_))M!446 *    _$))%000^#((///\!&&u--- X--Q!%!9!9!; .   
 --.fggg]"++E222  W_//%((( V^..'''  	
 R / ) 0 1/-

 h 3 ) (s   JIA	J,I!-AJI$J"I'#JI*J I-!.JI0J.I3/JI6J,I8-0JI:J7I<8 JI>J8J 9JJJ!J$J'J*J-J0J3J6J8J:J<J>J JJc                 h  K   	 | j                   j                         }|s*|j                  d| j                                d{    ydt	        |       d}|D ][  }|\  }}}}|d| d| dz  }|d	| dz  }|d
| dz  }t	        |      dkD  s7|j
                  j                  |       d{    d}] |dk7  r*|j                  || j                                d{    yy7 7 :7 
# t        $ r7}	|j                  d|	 | j                                d{  7   Y d}	~	yd}	~	ww xY ww)u0   Показать ВСЕХ победителейu,   📋 Победителей пока нет!rB   Nu.   🏆 Все победители (всего: z):

#z | 
u   👤 u   🔗 z

i  u   🏆 Продолжение:

   ❌ Ошибка: )r   get_all_winnersrS   r<   lenrI   rJ   	Exception)
r   r^   r   textwinnerid_num	date_timeusernametrade_offeres
             r   rU   zTelegramBot.show_all_winners   s    !	gg--/G--B!%!7!7!9 .     DCL>QWXD! 	>;A8	8[!F83yk44%z,,%}D11 t9t#--224888=D	> 99--!%!7!7!9 .    :)" 9  	))$QC(!335 *   	s   D2A C/ C)C/ 	D2
AC/ C/ 0C+11C/ "C-#C/ 'D2)C/ +C/ -C/ /	D/8'D*D" D*%D2*D//D2c                   K   	 | j                   j                         }|s*|j                  d| j                                d{    y|d   t	        |d   d      z  }|d   t	        |d   d      z  }d|d    d	|d    d
|d    d|dd|dd}|j                  || j                                d{    y7 v7 # t
        $ r7}|j                  d| | j                                d{  7   Y d}~yd}~ww xY ww)u0   Показать общую статистикуu9   ❌ Ошибка получения статистики!rB   Nwinners_countstreams_count   total_messagesuD   📈 Общая статистика:

🏆 Победителей: u   
🎮 Стримов: u%   
💬 Всего сообщений: uF   

📊 В среднем:
• Победителей на стрим: z.1fu)   
• Сообщений на стрим: z.0frb   rc   )r   get_total_statsrS   r<   maxrf   )r   r^   r"   avg_winnersavg_messagesrg   rm   s          r   rV   zTelegramBot.show_stats   s_     	GG++-E--O!%!7!7!9 .    03u_7Mq3QQK !12S9OQR5SSL#O45 6O,- .%%*+;%<$= >- .9,= >))5c(: ;	D ))!335 *   )(  	))$QC(!335 *   	sl   DA B? B;B? 	D
A+B? 5B=6B? :D;B? =B? ?	C?'C:/C20C:5D:C??Dc                 8  K   	 | j                   j                         }|s*|j                  d| j                                d{    yd}|dd D ]U  }|\  }}}}}	}
|d| dz  }|d| dz  }|d	| dz  }|d
|	 dz  }|dt	        |
j                  d             dz  }|dz  }W |j                  || j                                d{    y7 7 # t        $ r7}|j                  d| | j                                d{  7   Y d}~yd}~ww xY ww)u4   Показать статистику стримовu9   📊 Статистики стримов пока нет!rB   Nu+   📊 Статистика стримов:


   u   Стрим #rb   u   🕐 u   ⏱ u   💬 Сообщений: u   👥 Активных: z, u    ━━━━━━━━━━

rc   )r   get_all_stream_statsrS   r<   re   splitrf   )r   r^   r"   rg   statri   rN   enddurationmessagesusersrm   s               r   rW   zTelegramBot.show_stream_stats   su    	GG002E--O!%!7!7!9 .    BDcr
 >@D=sHh,vhb11%wb))$xj++3H:R@@1#ekk$6G2H1ILL<=> ))!335 *   !   	))$QC(!335 *   	sl   DA C CC 	D
BC CC DC C 	D 'DD
DDDDc                   K   | j                   j                         }|s*|j                  d| j                                d{    yd}|j	                         D ]a  \  }}|t
        k(  rdnd}|t
        k(  rdnd}|| d	|d
    dz  }|d| dz  }|d| dz  }|j                  d      r|d|d    dz  }|dz  }c |dz  }|dz  }|dz  }|j                  || j                                d{    y7 7 w)u,   Показать список админовu*   📋 Список админов пуст!rB   Nu3   👥 Список администраторов:

u   👑u   🛡️u   Главный админu
   Админ rk   rb   z   ID: u      Роль: added_byu      Добавил: uZ   
💡 Для добавления/удаления используйте команды:
z/addadmin <ID>
z/removeadmin <ID>)r   get_admin_listrS   r:   itemsr   get)r   r^   r%   rg   rK   info
role_emoji	role_texts           r   r[   zTelegramBot.show_admins_list  sV    ##224))<!557 *    F#\\^ 		MGT#*n#<)J7>.7P3VbIzl!D$4#5R88DggYb))DmI;b11Dxx
#-d:.>-?rBBDLD		 	nn""##%%113 & 
 	
 	
/.	
s%   AC<C8B.C<2C:3C<:C<c                   K   |j                   j                  }|j                   j                  xs d}|j                   j                  xs d}| j                  j                  |      }| j                  j                  |      }d| d| d| d}|r|dz  }n|r|dz  }|j                  || j                         	       d
{    y
7 w)u   Показать мой ID   Нет usernameu   Нет имени.   👤 Ваша информация:

🆔 ID:    
📝 Username: @u   
👨‍💻 Имя: rb   u9   
👑 Роль: Главный администраторu-   
🛡️ Роль: АдминистраторrB   N)	rR   rE   rk   
first_namer   rF   r(   rS   r:   )r   r^   rK   rk   r   rF   rL   rg   s           r   r\   zTelegramBot.show_my_id4  s     //$$??++@/@__//F3F
%%..w7%%44W=

 
 L !	 PPDDDD%%113 & 
 	
 	
s   C C
CC
c                 f   K   d}|j                  || j                                d{    y7 w)u   Показать помощьu   📖 Справка:

🏆 Победители - список всех победителей
📊 Статистика - общая статистика
📄 Файлы - скачать базы данных
📈 Стримы - статистика стримов
👥 Админы - управление (только главный админ)

🤖 Автоматические функции:
• В конце стрима бот автоматически отправит список победителей
• Статистика стрима сохраняется автоматически

📝 Команды для управления админами:
/addadmin <ID> - добавить админа
/removeadmin <ID> - удалить админа
/myid - узнать свой ID
rB   N)rS   r<   )r   r^   rg   s      r   r]   zTelegramBot.show_helpN  s;     $ %%//1 & 
 	
 	
s   '1/1c                   K   	 t         j                  j                  t              rN|j                  j                  t        t        d      dd       d{    |j                  d       d{    y|j                  dd	       d{    y7 :7 #7 	# t        $ r)}|j                  d
| d	       d{  7   Y d}~yd}~ww xY ww)u    Отправить файл БДrbzgiveaway_winners.dbr,   documentfilenamecaptionN    ✅ Файл отправлен!   ❌ Файл не найден!T
show_alertrc   )	ospathexistsr   rI   reply_documentopenrQ   rf   r   r^   rm   s      r   rX   zTelegramBot.send_database_filei  s     	Jww~~m,mm22!-628 3   
 ll#EFFFll#DQUlVVV
 GV 	J,,!3A37D,III	J}   CAB BB /B0B 4C5B BB CB B B 	C	 C9B<:C?CC		Cc                   K   	 t         j                  j                  t              rN|j                  j                  t        t        d      dd       d{    |j                  d       d{    y|j                  dd	       d{    y7 :7 #7 	# t        $ r)}|j                  d
| d	       d{  7   Y d}~yd}~ww xY ww)u   Отправить winners.txtr   zwinners.txtr.   r   Nr   r   Tr   rc   )	r   r   r   r   rI   r   r   rQ   rf   r   s      r   rY   zTelegramBot.send_winners_filex  s     	Jww~~./mm22!"2D9*. 3   
 ll#EFFFll#DQUlVVV
 GV 	J,,!3A37D,III	Jr   c                   K   	 t         j                  j                  t              rN|j                  j                  t        t        d      dd       d{    |j                  d       d{    y|j                  dd	       d{    y7 :7 #7 	# t        $ r)}|j                  d
| d	       d{  7   Y d}~yd}~ww xY ww)u#   Отправить stream_stats.txtr   zstream_stats.txtr0   r   Nr   r   Tr   rc   )	r   r   r   r   rI   r   r   rQ   rf   r   s      r   rZ   zTelegramBot.send_stats_file  s     	Jww~~34mm22!"7>/3 3   
 ll#EFFFll#DQUlVVV
 GV 	J,,!3A37D,III	Jr   c                   K   | j                   j                  |j                  j                        s$|j                  j                  d       d{    y|j                  r|j                  d   j                         s$|j                  j                  d       d{    yt        |j                  d         }t        |j                        dkD  r|j                  d   nd| }| j                   j                  |||j                  j                        \  }}|j                  j                  |       d{    y7 7 7 	w)u   Команда /addadminuh   ❌ Только главный администратор может добавлять админов!Nr   up   ❌ Неверный формат!

Использование: /addadmin <ID>
Пример: /addadmin 123456789rq   User_)r   r(   rD   rE   rI   rJ   argsisdigitintre   	add_admin)r   r=   r>   new_admin_idrk   successrI   s          r   add_admin_commandzTelegramBot.add_admin_command  s"    !!001F1F1I1IJ..++  -W  X  X  X||7<<?#:#:#<..++ -% & & & 7<<?+&)',,&7!&;7<<?5AW--77!!$$
 nn''000' X& 	1s8   AED?AEEBE9E:EEEc                 4  K   | j                   j                  |j                  j                        s$|j                  j                  d       d{    y|j                  r|j                  d   j                         s$|j                  j                  d       d{    yt        |j                  d         }| j                   j                  ||j                  j                        \  }}|j                  j                  |       d{    y7 7 v7 	w)u   Команда /removeadminud   ❌ Только главный администратор может удалять админов!Nr   uv   ❌ Неверный формат!

Использование: /removeadmin <ID>
Пример: /removeadmin 123456789)
r   r(   rD   rE   rI   rJ   r   r   r   remove_admin)r   r=   r>   remove_admin_idr   rI   s         r   remove_admin_commandz TelegramBot.remove_admin_command  s     !!001F1F1I1IJ..++  -S  T  T  T||7<<?#:#:#<..++ -( ) ) ) gll1o.--::!!$$

 nn''000# T) 	1s8   ADDADDA.DDDDDc                    K   |j                   j                  }|j                   j                  xs d}|j                  j	                  d| d| d       d{    y7 w)u   Команда /myidr   r   r   u|   

💡 Отправьте этот ID главному администратору для получения доступаN)rD   rE   rk   rI   rJ   )r   r=   r>   rK   rk   s        r   my_id_commandzTelegramBot.my_id_command  sm     ''**((11F5Fnn'' -

 
 {)~  	 	s   AA AA c                   K   | j                   st        d       y| j                  j                  |      }d| d| d| d}|D ]  }|\  }}}	}
|d|	 d|
 d	z  } t	        | j                         D ]@  }	 | j
                  j                  j                  ||
       d{    t        d|        B y7 # t        $ r6}t        d| d|        | j                   j                  |       Y d}~d}~ww xY ww)uM   Рассылка о завершении стрима всем админамuL   ⚠️ [TELEGRAM] Нет активных чатов для рассылкиNuA   🎬 Стрим завершён!

⏱ Длительность: u   
💬 Сообщений: u   
🏆 Победителей: u,   

📋 Список победителей:
u   
👤 u   
🔗 rb   )chat_idrg   u?   ✅ [TELEGRAM] Рассылка отправлена в чат u7   ❌ [TELEGRAM] Ошибка отправки в чат z: )
r   printr   get_last_winnerslistr   botsend_messagerf   discard)r   ro   stream_durationrr   r   rg   rh   ri   rj   rk   rl   r   rm   s                r   broadcast_stream_endz TelegramBot.broadcast_stream_end  s6    }}`a ''**=9./ 0() *+_ -	  	?F7=4FIxghZw{m2>>D	?
 DMM* 		/G/hhll//# 0    WX_W`ab		/
  /OPWyXZ[\Z]^_%%g../sB   A2C95*B7B5 B72C95B77	C6 ,C1,C91C66C9c                    t        d       t        j                         j                  t              j                         | _        | j                  j                  t        d| j                               | j                  j                  t        d| j                               | j                  j                  t        d| j                               | j                  j                  t        d| j                               | j                  j                  t        | j                               t        d       | j                  j                  t         j"                         y)	u   Запуск Telegram ботаu/   ✅ [TELEGRAM] Бот запускается...rN   addadminremoveadminmyidu9   ✅ [TELEGRAM] Бот запущен с кнопками!)allowed_updatesN)r   r   buildertokenr
   buildr   add_handlerr   rN   r   r   r   r   r_   run_pollingr   	ALL_TYPES)r   s    r   runzTelegramBot.run  s    ?@&&(../ABHHJ 	^GTZZ@A^J8N8NOP^M4;T;TUV^FD4F4FGH1$2E2EFGIJ 	V-=-=>r   N)F)__name__
__module____qualname__r   r*   r6   r:   r<   r   r	   DEFAULT_TYPErN   r_   rU   rV   rW   r[   r\   r]   rX   rY   rZ   r   r   r   r   r    r   r   r   r      s    .0...
& 
<3L3L 
:C(6 C(L<U<U C(N#J"H@
B
4
6JJJ"1f 1|?X?X 101 1,B[B[ 1,
& 
<;T;T 
 /H?r   r   )r   telegramr   r   r   telegram.extr   r   r   r	   configr
   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s.    
 G G X X m m  &}? }?r   