1- from langdetect .lang_detect_exception import LangDetectException
21from filter import parseTranslation
2+ from langdetect .lang_detect_exception import LangDetectException
3+ from mchad import *
34from pathlib import Path
5+ from sseclient import SSEClient
46import googletrans
7+ import json
58import langdetect
69import pafy
710import pytchat as pyt
811import sys
9- import threading
12+ import kthread
1013import tkinter as tk
1114import tkinter .scrolledtext
1215import tkinter .ttk
1316import vlc
1417
18+
1519translator = googletrans .Translator ()
16- isClosed = False
1720CHAT_LANGUAGES = {'All' : 'All' , 'Japanese' :'jp' , 'English' :'en' , 'Bahasa Indonesia' :'id' , 'Chinese' :'zh' , 'Spanish' :'es' , 'Korean' :'kr' }
1821TL_LANGUAGES = ['en' ,'jp' ,'es' ,'id' ,'kr' ,'ch' ,'ru' ,'fr' ]
1922
23+ class custom_author :
24+ def __init__ (self , name , is_mchad = True ):
25+ if is_mchad :
26+ self .name = f'[Mchad TL] { name } '
27+ else :
28+ self .name = name
29+
30+ class custom_chat_message :
31+ def __init__ (self , author_name , message , is_mchad_tler = True ):
32+ self .author = custom_author (author_name , is_mchad_tler )
33+ self .message = message
34+
2035while True :
2136 def on_close ():
22- global isClosed
23- isClosed = True
24- raise SystemExit
37+ x . kill ()
38+ y . kill ()
39+ sys . exit ()
2540
2641 chooseVideo = tk .Tk ()
2742 chooseVideo .iconbitmap ('img/128x128.ico' )
@@ -38,7 +53,10 @@ def on_close():
3853 try_id = idvar .get ()
3954 if try_id != '' :
4055 try :
41- id_index = try_id .index ('watch?v=' ) + 8
56+ if 'youtube.com' in try_id :
57+ id_index = try_id .index ('watch?v=' ) + 8
58+ elif 'youtu.be' in try_id :
59+ id_index = try_id .index ('be/' ) + 3
4260 try_id = try_id [id_index :id_index + 11 ]
4361 except :
4462 sys .exit ()
@@ -105,36 +123,53 @@ def change_video():
105123 player .play ()
106124
107125 def run_chat ():
108- global selected_chat_language
109126 while chat .is_alive ():
110- if not isClosed :
111- for c in chat .get ().sync_items ():
127+ for c in chat .get ().sync_items ():
128+ if not is_translate_chat .get ().startswith ("T" ):
129+ try :
130+ if CHAT_LANGUAGES [selected_chat_language .get ()] in (langdetect .detect (c .message ), 'All' ):
131+ insert_in_box (chat_area , c )
132+ except LangDetectException :
133+ insert_in_box (chat_area , c )
134+ else :
135+ c .message = translator .translate (c .message , dest = CHAT_LANGUAGES [selected_chat_language .get ()]).text
136+ insert_in_box (chat_area , c )
137+ if parseTranslation (c , selected_tl_language .get (), is_translate_tls .get ().startswith ("T" )) != None or c .author .isChatOwner or c .author .isChatModerator :
138+ c .message = translator .translate (c .message , dest = selected_tl_language .get ()).text
139+ insert_in_box (tl_area , c )
140+
141+ def run_mchad ():
142+ if not (room := getRoom (id )) is None :
143+ roomName = room ['Name' ]
144+ es = SSEClient (f'{ MCHAD } /Listener/?room={ roomName } ' )
145+ for x in es :
146+ data = json .loads (x .data )
147+ if data == {}:
148+ continue
149+ if data ['flag' ] == 'insert' :
112150 if not is_translate_chat .get ().startswith ("T" ):
113151 try :
114- if CHAT_LANGUAGES [selected_chat_language .get ()] in (langdetect .detect (c . message ), 'All' ):
115- insert_in_box (chat_area , c )
152+ if CHAT_LANGUAGES [selected_chat_language .get ()] in (langdetect .detect (data [ 'content' ][ 'Stext' ] ), 'All' ):
153+ insert_in_box (tl_area , custom_chat_message ( roomName , data [ 'content' ][ 'Stext' ]) )
116154 except LangDetectException :
117- insert_in_box (chat_area , c )
155+ insert_in_box (tl_area , custom_chat_message ( roomName , data [ 'content' ][ 'Stext' ]) )
118156 else :
119- c .message = translator .translate (c .message , dest = CHAT_LANGUAGES [selected_chat_language .get ()]).text
120- insert_in_box (chat_area , c )
121- if parseTranslation (c , selected_tl_language .get (), is_translate_tls .get ().startswith ("T" )) != None or c .author .isChatOwner or c .author .isChatModerator :
122- c .message = translator .translate (c .message , dest = selected_tl_language .get ()).text
123- insert_in_box (tl_area , c )
124- else :
125- break
157+ data ['content' ]['Stext' ] = translator .translate (data ['content' ]['Stext' ], dest = CHAT_LANGUAGES [selected_chat_language .get ()]).text
158+ insert_in_box (tl_area , custom_chat_message (roomName , data ['content' ]['Stext' ]))
159+ else :
160+ insert_in_box (tl_area , custom_chat_message ('System' , "Mchad room not found" , False ))
126161
127162 def insert_in_box (box , c ):
128- if not isClosed :
129- box .configure ( state = tk .NORMAL )
130- box .insert (tk .END , f'\n { c .author . name } : ' )
131- box .insert (tk .END , f' { c . message } ' , 'message' )
132- box .see ( tk . END )
133- if int ( box .index ( 'end' ). split ( '.' )[ 0 ]) - 1 > 300 :
134- box .delete ( "1.0" , "2.0" )
135- box . configure ( state = tk . DISABLED )
136-
137- x = threading . Thread (target = run_chat )
163+ box . configure ( state = tk . NORMAL )
164+ box .insert ( tk .END , f' \n { c . author . name } : ' )
165+ box .insert (tk .END , f'{ c .message } ' , 'message ' )
166+ box .see (tk .END )
167+ if int ( box .index ( 'end' ). split ( '.' )[ 0 ]) - 1 > 300 :
168+ box .delete ( "1.0" , "2.0" )
169+ box .configure ( state = tk . DISABLED )
170+
171+ x = kthread . KThread ( target = run_chat )
172+ y = kthread . KThread (target = run_mchad )
138173 x .start ()
139- isClosed = False
174+ y . start ()
140175 top .mainloop ()
0 commit comments