Skip to content
This repository was archived by the owner on May 1, 2025. It is now read-only.

Commit f374d00

Browse files
committed
full mchad support
1 parent 619a651 commit f374d00

File tree

3 files changed

+81
-36
lines changed

3 files changed

+81
-36
lines changed

livetl.py

Lines changed: 66 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,42 @@
1-
from langdetect.lang_detect_exception import LangDetectException
21
from filter import parseTranslation
2+
from langdetect.lang_detect_exception import LangDetectException
3+
from mchad import *
34
from pathlib import Path
5+
from sseclient import SSEClient
46
import googletrans
7+
import json
58
import langdetect
69
import pafy
710
import pytchat as pyt
811
import sys
9-
import threading
12+
import kthread
1013
import tkinter as tk
1114
import tkinter.scrolledtext
1215
import tkinter.ttk
1316
import vlc
1417

18+
1519
translator = googletrans.Translator()
16-
isClosed = False
1720
CHAT_LANGUAGES = {'All': 'All', 'Japanese':'jp', 'English':'en', 'Bahasa Indonesia':'id', 'Chinese':'zh', 'Spanish':'es', 'Korean':'kr'}
1821
TL_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+
2035
while 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()

mchad.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from tkinter.constants import E
12
import requests
23

34
MCHAD = 'https://repo.mchatx.org'
@@ -7,10 +8,17 @@ def getRoomList():
78

89
def getRoom(id, idonly = True):
910
if idonly:
10-
id += 'YT_'
11-
return requests.get(f'{MCHAD}/Room/?link={id}').json()
11+
id = 'YT_' + id
12+
try:
13+
return requests.get(f'{MCHAD}/Room/?link={id}').json()[0]
14+
except IndexError:
15+
return None
16+
17+
def getRoomByName(name):
18+
return requests.get(f'{MCHAD}/Room/?name={name}').json()[0]
1219

1320
if __name__ == "__main__":
1421
print('mchad test')
1522
print(getRoomList())
16-
print(getRoom('mJwpVT1WvLg'))
23+
print(getRoom('0BBfB9N_VFs'))
24+
print(getRoomByName('Translator Vee'))

requirements.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
googletrans==3.0.0
2+
kthread==0.2.2
13
langdetect==1.0.9
24
pafy==0.5.5
3-
python-vlc==3.0.12118
45
pytchat==0.5.5
5-
youtube_dl==2021.6.6
6+
requests==2.26.0
7+
sseclient==0.0.27

0 commit comments

Comments
 (0)