Skip to content

Commit

Permalink
full mchad support
Browse files Browse the repository at this point in the history
  • Loading branch information
yoyoyonono committed Nov 4, 2021
1 parent 619a651 commit f374d00
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 36 deletions.
97 changes: 66 additions & 31 deletions livetl.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,42 @@
from langdetect.lang_detect_exception import LangDetectException
from filter import parseTranslation
from langdetect.lang_detect_exception import LangDetectException
from mchad import *
from pathlib import Path
from sseclient import SSEClient
import googletrans
import json
import langdetect
import pafy
import pytchat as pyt
import sys
import threading
import kthread
import tkinter as tk
import tkinter.scrolledtext
import tkinter.ttk
import vlc


translator = googletrans.Translator()
isClosed = False
CHAT_LANGUAGES = {'All': 'All', 'Japanese':'jp', 'English':'en', 'Bahasa Indonesia':'id', 'Chinese':'zh', 'Spanish':'es', 'Korean':'kr'}
TL_LANGUAGES = ['en','jp','es','id','kr','ch','ru','fr']

class custom_author:
def __init__(self, name, is_mchad = True):
if is_mchad:
self.name = f'[Mchad TL] {name}'
else:
self.name = name

class custom_chat_message:
def __init__(self, author_name, message, is_mchad_tler = True):
self.author = custom_author(author_name, is_mchad_tler)
self.message = message

while True:
def on_close():
global isClosed
isClosed = True
raise SystemExit
x.kill()
y.kill()
sys.exit()

chooseVideo = tk.Tk()
chooseVideo.iconbitmap('img/128x128.ico')
Expand All @@ -38,7 +53,10 @@ def on_close():
try_id = idvar.get()
if try_id != '':
try:
id_index = try_id.index('watch?v=') + 8
if 'youtube.com' in try_id:
id_index = try_id.index('watch?v=') + 8
elif 'youtu.be' in try_id:
id_index = try_id.index('be/') + 3
try_id = try_id[id_index:id_index + 11]
except:
sys.exit()
Expand Down Expand Up @@ -105,36 +123,53 @@ def change_video():
player.play()

def run_chat():
global selected_chat_language
while chat.is_alive():
if not isClosed:
for c in chat.get().sync_items():
for c in chat.get().sync_items():
if not is_translate_chat.get().startswith("T"):
try:
if CHAT_LANGUAGES[selected_chat_language.get()] in (langdetect.detect(c.message), 'All'):
insert_in_box(chat_area, c)
except LangDetectException:
insert_in_box(chat_area, c)
else:
c.message = translator.translate(c.message, dest=CHAT_LANGUAGES[selected_chat_language.get()]).text
insert_in_box(chat_area, c)
if parseTranslation(c, selected_tl_language.get(), is_translate_tls.get().startswith("T")) != None or c.author.isChatOwner or c.author.isChatModerator:
c.message = translator.translate(c.message, dest=selected_tl_language.get()).text
insert_in_box(tl_area, c)

def run_mchad():
if not (room := getRoom(id)) is None:
roomName = room['Name']
es = SSEClient(f'{MCHAD}/Listener/?room={roomName}')
for x in es:
data = json.loads(x.data)
if data == {}:
continue
if data['flag'] == 'insert':
if not is_translate_chat.get().startswith("T"):
try:
if CHAT_LANGUAGES[selected_chat_language.get()] in (langdetect.detect(c.message), 'All'):
insert_in_box(chat_area, c)
if CHAT_LANGUAGES[selected_chat_language.get()] in (langdetect.detect(data['content']['Stext']), 'All'):
insert_in_box(tl_area, custom_chat_message(roomName, data['content']['Stext']))
except LangDetectException:
insert_in_box(chat_area, c)
insert_in_box(tl_area, custom_chat_message(roomName, data['content']['Stext']))
else:
c.message = translator.translate(c.message, dest=CHAT_LANGUAGES[selected_chat_language.get()]).text
insert_in_box(chat_area, c)
if parseTranslation(c, selected_tl_language.get(), is_translate_tls.get().startswith("T")) != None or c.author.isChatOwner or c.author.isChatModerator:
c.message = translator.translate(c.message, dest=selected_tl_language.get()).text
insert_in_box(tl_area, c)
else:
break
data['content']['Stext'] = translator.translate(data['content']['Stext'], dest=CHAT_LANGUAGES[selected_chat_language.get()]).text
insert_in_box(tl_area, custom_chat_message(roomName, data['content']['Stext']))
else:
insert_in_box(tl_area, custom_chat_message('System', "Mchad room not found", False))

def insert_in_box(box, c):
if not isClosed:
box.configure(state=tk.NORMAL)
box.insert(tk.END, f'\n{c.author.name}')
box.insert(tk.END, f'{c.message}', 'message')
box.see(tk.END)
if int(box.index('end').split('.')[0]) - 1 > 300:
box.delete("1.0", "2.0")
box.configure(state=tk.DISABLED)

x = threading.Thread(target=run_chat)
box.configure(state=tk.NORMAL)
box.insert(tk.END, f'\n{c.author.name}: ')
box.insert(tk.END, f'{c.message}', 'message')
box.see(tk.END)
if int(box.index('end').split('.')[0]) - 1 > 300:
box.delete("1.0", "2.0")
box.configure(state=tk.DISABLED)

x = kthread.KThread(target=run_chat)
y = kthread.KThread(target=run_mchad)
x.start()
isClosed = False
y.start()
top.mainloop()
14 changes: 11 additions & 3 deletions mchad.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from tkinter.constants import E
import requests

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

def getRoom(id, idonly = True):
if idonly:
id += 'YT_'
return requests.get(f'{MCHAD}/Room/?link={id}').json()
id = 'YT_' + id
try:
return requests.get(f'{MCHAD}/Room/?link={id}').json()[0]
except IndexError:
return None

def getRoomByName(name):
return requests.get(f'{MCHAD}/Room/?name={name}').json()[0]

if __name__ == "__main__":
print('mchad test')
print(getRoomList())
print(getRoom('mJwpVT1WvLg'))
print(getRoom('0BBfB9N_VFs'))
print(getRoomByName('Translator Vee'))
6 changes: 4 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
googletrans==3.0.0
kthread==0.2.2
langdetect==1.0.9
pafy==0.5.5
python-vlc==3.0.12118
pytchat==0.5.5
youtube_dl==2021.6.6
requests==2.26.0
sseclient==0.0.27

0 comments on commit f374d00

Please sign in to comment.