2 Commits
v2.3 ... v2.5

Author SHA1 Message Date
25bf0064b7 Updated to v2.5 2021-11-05 18:47:43 +02:00
363de17c08 Update 2.4 2021-11-03 09:20:15 +02:00
7 changed files with 163 additions and 237 deletions

View File

@@ -39,9 +39,15 @@ AutoZoom создан для автоматизации присоединени
2. Попробуйте запустить ваш `start.bat` в папке `AutoZoom`. Возможно, он сам отправит вас на страницу загрузки Python. 2. Попробуйте запустить ваш `start.bat` в папке `AutoZoom`. Возможно, он сам отправит вас на страницу загрузки Python.
Если же этого не произошло - сделать это можно вручную с официального сайта или из магазина приложений Если же этого не произошло - сделать это можно вручную с официального сайта или из магазина приложений
Microsoft Store (https://www.microsoft.com/ru-ru/p/python-37/9nj46sx7x90p?activetab=pivot:overviewtab&source=lp). Microsoft Store (https://www.microsoft.com/ru-ru/p/python-37/9nj46sx7x90p?activetab=pivot:overviewtab&source=lp).
В случае установки без MS Store - достаточно скачать инсталлер с оф. сайта Python (https://www.python.org/downloads/).
Для установки на Linux необходимо использовать стандартный менеджер пакетов (apt, yum, rpm и т.д.)
Инструкции по установке версий Python3 на Linux вы можете самостоятельно в зависимости от дистрибутива
и желаемой к установке версии Python3.
Для установки на Android (в данном случае - внутри Termux) нужно ввести `pkg install python`.
3. Дважды нажмите на `start.bat` и выберите пункт "Редактор" чтобы редактировать ваши уроки на любой 3. Дважды нажмите на `start.bat` и выберите пункт "Редактор" чтобы редактировать ваши уроки на любой
удобный день. Введите все нужные данные. Название конференции, дату, время, ссылку на приглашение. удобный день. Введите все нужные данные. Название конференции, дату, время, ссылку на приглашение.
В случае установки на Linux/Android - скрипт запуска будет `start.sh` и его можно запустить через `bash ./start.sh`
4. Теперь самая важная часть. Установите Zoom (https://zoom.us/download) на свой ПК. 4. Теперь самая важная часть. Установите Zoom (https://zoom.us/download) на свой ПК.
Запустите его и зарегистрируйтесь/войдите в аккаунт. При входе ОБЯЗАТЕЛЬНО Запустите его и зарегистрируйтесь/войдите в аккаунт. При входе ОБЯЗАТЕЛЬНО
@@ -143,4 +149,4 @@ AutoZoom и выбрать пункт "Настройки". Затем выбе
Приятного использования! Приятного использования!
P.S.: Отдельное спасибо Kusyaka за помощь в создании сего творения. P.S.: Отдельное спасибо Kusyaka за помощь в создании сего творения.
Без тебя, если честно, у меня бы ничего не вышло, дружище <3 Без тебя, если честно, у меня бы ничего не вышло, дружище <3

View File

@@ -55,12 +55,12 @@ except Exception as exp:
def nowtime(seconds=True, noice=True, color=True): def nowtime(seconds=True, noice=True, color=True):
now = datetime.now() now = datetime.now()
if seconds == True: if seconds:
justnow = now.strftime("%H:%M:%S") justnow = now.strftime("%H:%M:%S")
else: else:
justnow = now.strftime("%H:%M") justnow = now.strftime("%H:%M")
if noice == True: if noice:
if not color: if not color:
beautiful = f'[{justnow}]' beautiful = f'[{justnow}]'
else: else:
@@ -70,7 +70,7 @@ def nowtime(seconds=True, noice=True, color=True):
beautiful = f'{justnow}' beautiful = f'{justnow}'
else: else:
beautiful = f'{CYAN}{justnow}{RESET}' beautiful = f'{CYAN}{justnow}{RESET}'
return beautiful return beautiful
def act(x): def act(x):
@@ -83,7 +83,7 @@ def waitStart(runTime, action):
startTime = time(*(map(int, runTime.split(':')))) startTime = time(*(map(int, runTime.split(':'))))
while startTime > datetime.today().time(): while startTime > datetime.today().time():
sleep(2) sleep(2)
return action return action
def getPair(line): def getPair(line):
@@ -97,15 +97,15 @@ def getLessons():
f.write("[]") f.write("[]")
f.close() f.close()
lessons_list = [] lessons_list = []
appendLog(f'Created lessons.json') appendLog(f'Created lessons.json')
else: else:
with open(files_folder+'lessons.json', encoding="utf-8") as json_file: with open(files_folder+'lessons.json', encoding="utf-8") as json_file:
lessons_list = json.load(json_file) lessons_list = json.load(json_file)
json_file.close() json_file.close()
appendLog('File lessons.json loaded') appendLog('File lessons.json loaded')
return lessons_list return lessons_list
@@ -141,7 +141,7 @@ def main(source='deamon'):
except: except:
profilename = '' profilename = ''
pass pass
########################################## ##########################################
try: try:
@@ -200,14 +200,14 @@ def main(source='deamon'):
elif obs_choice.lower() in no_list: elif obs_choice.lower() in no_list:
setConfig("obs_exe", "Disabled") setConfig("obs_exe", "Disabled")
setConfig("obs_core", "Disabled") setConfig("obs_core", "Disabled")
clear() clear()
break break
else: else:
clear() clear()
continue continue
if not os.path.exists(files_folder+'telegram.conf'): if not os.path.exists(files_folder+'telegram.conf'):
clear() clear()
tg_choice = input(f'{RESET}Хотите использовать Telegram бота? {RESET}({BGREEN}Да{RESET}/{BRED}Нет{RESET}): ') tg_choice = input(f'{RESET}Хотите использовать Telegram бота? {RESET}({BGREEN}Да{RESET}/{BRED}Нет{RESET}): ')
@@ -218,7 +218,7 @@ def main(source='deamon'):
print(f'чтобы хорошо понимать что сейчас от вас нужно.') print(f'чтобы хорошо понимать что сейчас от вас нужно.')
none = input('\n > ') none = input('\n > ')
clear() clear()
while True: while True:
clear() clear()
@@ -229,16 +229,16 @@ def main(source='deamon'):
appendLog(f'Failed to configure Telegram Send: {exp}') appendLog(f'Failed to configure Telegram Send: {exp}')
clear() clear()
continue continue
telegram_send.send(messages=[f"🎊 Конфигурация правильна, всё работает!"], parse_mode="markdown", conf=f"{files_folder}telegram.conf") telegram_send.send(messages=[f"🎊 Конфигурация правильна, всё работает!"], parse_mode="markdown", conf=f"{files_folder}telegram.conf")
appendLog('Telegram Send successfully configured') appendLog('Telegram Send successfully configured')
clear() clear()
elif tg_choice.lower() in no_list: elif tg_choice.lower() in no_list:
with open(files_folder+'telegram.conf', 'w', encoding="utf-8") as f: with open(files_folder+'telegram.conf', 'w', encoding="utf-8") as f:
f.write('Not Configured') f.write('Not Configured')
f.close() f.close()
lessons_count = 0 lessons_count = 0
try: try:
@@ -277,7 +277,7 @@ def main(source='deamon'):
if getConfig("remove_old"): if getConfig("remove_old"):
del lessons_list[lessons_list.index(les)] del lessons_list[lessons_list.index(les)]
saveJson(files_folder+'lessons.json', lessons_list) saveJson(files_folder+'lessons.json', lessons_list)
appendLog(f'Old lesson named {lesson_name} removed') appendLog(f'Old lesson named {lesson_name} removed')
@@ -308,14 +308,14 @@ def main(source='deamon'):
while i < 10: while i < 10:
lesson_url = lesson_url.replace(f"https://us0{i}web.zoom.us/j/", "zoommtg://zoom.us/join?action=join&confno=") lesson_url = lesson_url.replace(f"https://us0{i}web.zoom.us/j/", "zoommtg://zoom.us/join?action=join&confno=")
i += 1 i += 1
lesson_url = lesson_url.replace("&", "^&") lesson_url = lesson_url.replace("&", "^&")
lesson_url = lesson_url.replace("?pwd", "^&pwd") lesson_url = lesson_url.replace("?pwd", "^&pwd")
if getConfig("debug"): if getConfig("debug"):
print(f'{nowtime()} Ориг. ссылка: {BRED}{lesson_url_original}{RESET}') print(f'{nowtime()} Ориг. ссылка: {BRED}{lesson_url_original}{RESET}')
print(f'{nowtime()} Измен. ссылка: {BRED}{lesson_url}{RESET}') print(f'{nowtime()} Измен. ссылка: {BRED}{lesson_url}{RESET}')
appendLog(f'Replaced link {lesson_url_original} with {lesson_url}') appendLog(f'Replaced link {lesson_url_original} with {lesson_url}')
os.system(f'start {lesson_url}') os.system(f'start {lesson_url}')
@@ -324,7 +324,7 @@ def main(source='deamon'):
if i == 0: if i == 0:
lesson_url = lesson_url.replace(f"https://zoom.us/j/", "zoommtg://zoom.us/join?action=join&confno=") lesson_url = lesson_url.replace(f"https://zoom.us/j/", "zoommtg://zoom.us/join?action=join&confno=")
while i < 10: while i < 10:
lesson_url = lesson_url.replace(f"https://us0{i}web.zoom.us/j/", "zoommtg://zoom.us/join?action=join&confno=") lesson_url = lesson_url.replace(f"https://us0{i}web.zoom.us/j/", "zoommtg://zoom.us/join?action=join&confno=")
i += 1 i += 1
@@ -334,7 +334,7 @@ def main(source='deamon'):
if getConfig("debug"): if getConfig("debug"):
print(f'{nowtime()} Ориг. ссылка: {BRED}{lesson_url_original}{RESET}') print(f'{nowtime()} Ориг. ссылка: {BRED}{lesson_url_original}{RESET}')
print(f'{nowtime()} Измен. ссылка: {BRED}{lesson_url}{RESET}') print(f'{nowtime()} Измен. ссылка: {BRED}{lesson_url}{RESET}')
appendLog(f'Replaced link {lesson_url_original} with {lesson_url}') appendLog(f'Replaced link {lesson_url_original} with {lesson_url}')
if sysname == "android": if sysname == "android":
@@ -357,7 +357,7 @@ def main(source='deamon'):
if easteregg_number == 69420: if easteregg_number == 69420:
appendLog('Easteregg summoned') appendLog('Easteregg summoned')
webbrowser.open('https://www.pornhub.com/view_video.php?viewkey=ph5f3eb1e206aa8') webbrowser.open('https://www.pornhub.com/view_video.php?viewkey=ph5f3eb1e206aa8')
print(f'{nowtime()} Ждём {BRED}10 секунд{RESET} до отслеживания Zoom...') print(f'{nowtime()} Ждём {BRED}10 секунд{RESET} до отслеживания Zoom...')
time.sleep(10) time.sleep(10)
@@ -374,7 +374,7 @@ def main(source='deamon'):
if retries == 1: if retries == 1:
appendLog('Lesson delay found') appendLog('Lesson delay found')
time.sleep(5) time.sleep(5)
retries += 1 retries += 1
@@ -388,7 +388,7 @@ def main(source='deamon'):
tgsend(getConfig("telegram_enabled"), f"⚠ Задержка конференции *{lesson_name}* превысила 3 минуты {profilename}") tgsend(getConfig("telegram_enabled"), f"⚠ Задержка конференции *{lesson_name}* превысила 3 минуты {profilename}")
print(f'{nowtime()} Задержка конференции {CYAN}{lesson_name}{RESET} превысила {BRED}3{RESET} минуты') print(f'{nowtime()} Задержка конференции {CYAN}{lesson_name}{RESET} превысила {BRED}3{RESET} минуты')
appendLog(f'Lesson delay exceeded: {retries} retries') appendLog(f'Lesson delay exceeded: {retries} retries')
if retries == 120: if retries == 120:
playSound("warning", nowtime()) playSound("warning", nowtime())
tgsend(getConfig("telegram_enabled"), f"⚠ Задержка конференции *{lesson_name}* превысила 10 минут {profilename}") tgsend(getConfig("telegram_enabled"), f"⚠ Задержка конференции *{lesson_name}* превысила 10 минут {profilename}")
@@ -405,7 +405,7 @@ def main(source='deamon'):
playSound("warning", nowtime()) playSound("warning", nowtime())
tgsend(getConfig("telegram_enabled"), f"⚠ Задержка конференции *{lesson_name}* превысила 30 минут, конференция сбошена {profilename}") tgsend(getConfig("telegram_enabled"), f"⚠ Задержка конференции *{lesson_name}* превысила 30 минут, конференция сбошена {profilename}")
print(f'{nowtime()} Задержка конференции {CYAN}{lesson_name}{RESET} превысила {BRED}30{RESET} минут, конференция сброшена') print(f'{nowtime()} Задержка конференции {CYAN}{lesson_name}{RESET} превысила {BRED}30{RESET} минут, конференция сброшена')
appendLog(f'Lesson delay exceeded: {retries} retries') appendLog(f'Lesson delay exceeded: {retries} retries')
playSound("ended", nowtime()) playSound("ended", nowtime())
@@ -423,17 +423,17 @@ def main(source='deamon'):
if getConfig("debug"): if getConfig("debug"):
print(f'{nowtime()} Не удалось остановить процесс OBS.') print(f'{nowtime()} Не удалось остановить процесс OBS.')
if not lesson_repeat: if not lesson_repeat:
del lessons_list[lessons_list.index(les)] del lessons_list[lessons_list.index(les)]
saveJson(files_folder+'lessons.json', lessons_list) saveJson(files_folder+'lessons.json', lessons_list)
if getConfig("debug"): if getConfig("debug"):
print(f'{nowtime()} Конференция {CYAN}{lesson_name}{RESET} в {BRED}{lesson_time}{RESET} удалена.') print(f'{nowtime()} Конференция {CYAN}{lesson_name}{RESET} в {BRED}{lesson_time}{RESET} удалена.')
print(f'\n{BBLACK}================================================{RESET}\n\n') print(f'\n{BBLACK}================================================{RESET}\n\n')
firstshow = True firstshow = True
lessons_count = lessons_count+1 lessons_count = lessons_count+1
@@ -450,7 +450,7 @@ def main(source='deamon'):
try: try:
if getConfig("debug"): if getConfig("debug"):
print(f'{nowtime()} Импортированы клавиши старта и остановки записи ({YELLOW}{getConfig("start")}{RESET} и {YELLOW}{getConfig("stop")}{RESET}).') print(f'{nowtime()} Импортированы клавиши старта и остановки записи ({YELLOW}{getConfig("start")}{RESET} и {YELLOW}{getConfig("stop")}{RESET}).')
start = getConfig("start") start = getConfig("start")
stop = getConfig("stop") stop = getConfig("stop")
except: except:
@@ -486,14 +486,14 @@ def main(source='deamon'):
try: try:
obs_process = subprocess.Popen(getConfig("obs_exe"), cwd=getConfig("obs_core")) obs_process = subprocess.Popen(getConfig("obs_exe"), cwd=getConfig("obs_core"))
appendLog(f'Sent instruction to open OBS') appendLog(f'Sent instruction to open OBS')
time.sleep(5) time.sleep(getConfig("obs_delay"))
except Exception as exp: except Exception as exp:
appendLog(f'Failed to open OBS: {exp}') appendLog(f'Failed to open OBS: {exp}')
print(f'{nowtime()} Не удалось открыть OBS для записи.') print(f'{nowtime()} Не удалось открыть OBS для записи.')
else: else:
if getConfig("debug"): if getConfig("debug"):
print(f'{nowtime()} Не включаем OBS для записи.') print(f'{nowtime()} Не включаем OBS для записи.')
firstshow = False firstshow = False
if lesson_obs: if lesson_obs:
@@ -504,12 +504,12 @@ def main(source='deamon'):
record_now = True record_now = True
print(f'{nowtime()} Сигнал записи OBS отправлен.') print(f'{nowtime()} Сигнал записи OBS отправлен.')
playSound("recordstart", nowtime()) playSound("recordstart", nowtime())
lesson_duration = (datetime.now() - lesson_start).total_seconds() lesson_duration = (datetime.now() - lesson_start).total_seconds()
if getConfig("debug"): if getConfig("debug"):
print(f'{nowtime()} Zoom подключён. Конференция идёт уже {BGREEN}{str(lesson_duration)} сек{RESET}. ({BGREEN}{str(round(lesson_duration/60, 2))} мин{RESET}.)') print(f'{nowtime()} Zoom подключён. Конференция идёт уже {BGREEN}{str(lesson_duration)} сек{RESET}. ({BGREEN}{str(round(lesson_duration/60, 2))} мин{RESET}.)')
time.sleep(5) time.sleep(5)
continue continue
else: else:
@@ -518,26 +518,26 @@ def main(source='deamon'):
if getConfig("debug"): if getConfig("debug"):
print(f'{nowtime()} {BRED}Конференция не обнаружена! {RESET}Повторная проверка через {BRED}10 {RESET}секунд...') print(f'{nowtime()} {BRED}Конференция не обнаружена! {RESET}Повторная проверка через {BRED}10 {RESET}секунд...')
time.sleep(10) time.sleep(10)
continue continue
if getConfig("debug"): if getConfig("debug"):
print(f'{nowtime()} Zoom отключился. Процесс {BRED}CptHost.exe{RESET} более не существует.') print(f'{nowtime()} Zoom отключился. Процесс {BRED}CptHost.exe{RESET} более не существует.')
appendLog(f'CptHost.exe not found, Zoom disconnected') appendLog(f'CptHost.exe not found, Zoom disconnected')
setTitle(f'Конференция "{lesson_name}" завершилась', sysname) setTitle(f'Конференция "{lesson_name}" завершилась', sysname)
if getConfig("debug"): if getConfig("debug"):
tgsend(getConfig("telegram_enabled"), f"◀ Конференция *{lesson_name}* длилась *{str(round(lesson_duration/60, 2))}* мин.") tgsend(getConfig("telegram_enabled"), f"◀ Конференция *{lesson_name}* длилась *{str(round(lesson_duration/60, 2))}* мин.")
print(f'{nowtime()} Конференция длилась {BGREEN}{str(lesson_duration)} сек{RESET}. ({BGREEN}{str(round(lesson_duration/60, 2))} мин{RESET}.)') print(f'{nowtime()} Конференция длилась {BGREEN}{str(lesson_duration)} сек{RESET}. ({BGREEN}{str(round(lesson_duration/60, 2))} мин{RESET}.)')
else: else:
tgsend(getConfig("telegram_enabled"), f"◀ Конференция *{lesson_name}* длилась *{str(int(lesson_duration/60))}* мин.") tgsend(getConfig("telegram_enabled"), f"◀ Конференция *{lesson_name}* длилась *{str(int(lesson_duration/60))}* мин.")
print(f'{nowtime()} Конференция длилась {BGREEN}{str(lesson_duration)} сек{RESET}. ({BGREEN}{str(int(lesson_duration/60))} мин{RESET}.)') print(f'{nowtime()} Конференция длилась {BGREEN}{str(lesson_duration)} сек{RESET}. ({BGREEN}{str(int(lesson_duration/60))} мин{RESET}.)')
appendLog(f'Lesson {lesson_name} duration was {str(int(lesson_duration/60))} m. ({str(lesson_duration)} s.)') appendLog(f'Lesson {lesson_name} duration was {str(int(lesson_duration/60))} m. ({str(lesson_duration)} s.)')
playSound("ended", nowtime()) playSound("ended", nowtime())
if lesson_obs: if lesson_obs:
@@ -559,15 +559,15 @@ def main(source='deamon'):
if not lesson_repeat: if not lesson_repeat:
del lessons_list[lessons_list.index(les)] del lessons_list[lessons_list.index(les)]
saveJson(files_folder+'lessons.json', lessons_list) saveJson(files_folder+'lessons.json', lessons_list)
appendLog(f'Lesson named {lesson_name} removed') appendLog(f'Lesson named {lesson_name} removed')
if getConfig("debug"): if getConfig("debug"):
print(f'{nowtime()} Конференция {CYAN}{lesson_name}{RESET} в {BRED}{lesson_time}{RESET} удалена.') print(f'{nowtime()} Конференция {CYAN}{lesson_name}{RESET} в {BRED}{lesson_time}{RESET} удалена.')
print(f'\n{BBLACK}================================================{RESET}\n\n') print(f'\n{BBLACK}================================================{RESET}\n\n')
firstshow = True firstshow = True
lessons_count = lessons_count+1 lessons_count = lessons_count+1
@@ -586,10 +586,10 @@ def main(source='deamon'):
if not lesson_repeat: if not lesson_repeat:
del lessons_list[lessons_list.index(les)] del lessons_list[lessons_list.index(les)]
saveJson(files_folder+'lessons.json', lessons_list) saveJson(files_folder+'lessons.json', lessons_list)
appendLog(f'Lesson named {lesson_name} removed') appendLog(f'Lesson named {lesson_name} removed')
if getConfig("debug"): if getConfig("debug"):
print(f'{nowtime()} Конференция {CYAN}{lesson_name}{RESET} в {BRED}{lesson_time}{RESET} удалена.') print(f'{nowtime()} Конференция {CYAN}{lesson_name}{RESET} в {BRED}{lesson_time}{RESET} удалена.')
@@ -604,7 +604,7 @@ def main(source='deamon'):
print(f'{nowtime()} Ожидание конференции сброшено.') print(f'{nowtime()} Ожидание конференции сброшено.')
else: else:
print('') print('')
time.sleep(1) time.sleep(1)
pass pass
@@ -656,6 +656,7 @@ def main(source='deamon'):
rpc.disconnect() rpc.disconnect()
clear() clear()
sys.exit() sys.exit()
elif source == 'menu': elif source == 'menu':
appendLog(f'Waiting for any input') appendLog(f'Waiting for any input')
@@ -665,6 +666,7 @@ def main(source='deamon'):
clear() clear()
setTitle("AutoZoom (Главная)", sysname) setTitle("AutoZoom (Главная)", sysname)
return return
except KeyboardInterrupt: except KeyboardInterrupt:
if source == 'deamon': if source == 'deamon':
appendLog(f'Deamon stopped, waiting for any input') appendLog(f'Deamon stopped, waiting for any input')
@@ -674,6 +676,7 @@ def main(source='deamon'):
rpc.disconnect() rpc.disconnect()
clear() clear()
sys.exit() sys.exit()
elif source == 'menu': elif source == 'menu':
appendLog(f'Deamon stopped, waiting for any input') appendLog(f'Deamon stopped, waiting for any input')

View File

@@ -35,6 +35,7 @@ default_config = {
"end_mode": "shutdown", "end_mode": "shutdown",
"obs_exe": None, "obs_exe": None,
"obs_core": None, "obs_core": None,
"obs_delay": 10,
"update_check": True, "update_check": True,
"write_logs": True, "write_logs": True,
"log_size": 512 "log_size": 512
@@ -72,11 +73,14 @@ else:
# Импортирование игралки звуков # Импортирование игралки звуков
if getOS() == "windows": try:
import winsound if getOS() == "windows":
from playsound import playsound import winsound
elif getOS() == "unix": from playsound import playsound
from playsound import playsound elif getOS() == "unix":
from playsound import playsound
except:
pass
# Установка заголовка окна cmd.exe # Установка заголовка окна cmd.exe
@@ -352,10 +356,14 @@ def getConfig(some_var):
except: except:
try: try:
repairConfig(config_list) try:
config_list = json.load(json_file) setConfig(some_var, default_config[some_var])
json_file.close() return default_config[some_var]
return config_list[some_var] except:
repairConfig(config_list)
config_list = json.load(json_file)
json_file.close()
return config_list[some_var]
except: except:
return default_config[some_var] return default_config[some_var]
except: except:

View File

@@ -27,7 +27,7 @@ if getConfig("firstboot"):
else: else:
continue continue
elif getOS() == "unix": elif getOS() == "unix":
while True: while True:
os.system('clear') os.system('clear')
@@ -46,7 +46,7 @@ if getConfig("firstboot"):
else: else:
continue continue
elif getOS() == "windows": elif getOS() == "windows":
setConfig("firstboot", False) setConfig("firstboot", False)
@@ -166,7 +166,7 @@ if len(libs) > 0:
if response != 0: if response != 0:
appendLog(f'Failed to install {each}') appendLog(f'Failed to install {each}')
sys.exit(f"{RESET}[{BRED}ERR{RESET}] Установка {YELLOW}{each} {RESET}провалилась.") sys.exit(f"{RESET}[{BRED}ERR{RESET}] Установка {YELLOW}{each} {RESET}провалилась.")
appendLog('Everything seems to be installed') appendLog('Everything seems to be installed')
print(f"{RESET}[{BGREEN}OK{RESET}] Все модули были успешно установлены.") print(f"{RESET}[{BGREEN}OK{RESET}] Все модули были успешно установлены.")

View File

@@ -9,6 +9,8 @@ import platform
import subprocess import subprocess
from pathlib import Path from pathlib import Path
import libinstaller
from functions import * from functions import *
appendLog('main.py start initialized', startup=True) appendLog('main.py start initialized', startup=True)
@@ -28,15 +30,13 @@ else:
BBLACK = BRED = BGREEN = BYELLOW = BBLUE = BMAGENTA = BCYAN = BWHITE = '' BBLACK = BRED = BGREEN = BYELLOW = BBLUE = BMAGENTA = BCYAN = BWHITE = ''
ULINE = REVERSE = '' ULINE = REVERSE = ''
import libinstaller
import wget import wget
import requests import requests
import keyboard import keyboard
import getpass import getpass
from zipfile import ZipFile from zipfile import ZipFile
version = 2.3 version = 2.5
path = Path(__file__).resolve().parent path = Path(__file__).resolve().parent
def mainMenu(): def mainMenu():

208
rpc.py
View File

@@ -6,7 +6,7 @@ import sys
from colors import * from colors import *
from functions import * from functions import *
version = '2.3' version = '2.5'
import libinstaller import libinstaller
from pypresence import Presence from pypresence import Presence
@@ -17,6 +17,22 @@ RPC = Presence(client_id,pipe=0)
connected = False connected = False
rpc_dict = {
"large_image": "1024_cover",
"small_image": {
"waiting": "status_waiting",
"conference": "status_lesson",
"menu": "status_menu",
"shutdown": "status_shutdown",
"settings": "status_settings",
"debug": "status_debug",
"editor": "status_editing",
"updating": "status_updating",
"support": "status_support"
},
"large_text": "AutoZoom • v%version%\nhttp://bit.ly/auto_zoom"
}
if getConfig("use_rpc") and getOS != "android": if getConfig("use_rpc") and getOS != "android":
try: try:
RPC.connect() RPC.connect()
@@ -53,14 +69,22 @@ def reset():
appendLog('Discord RPC status cleared') appendLog('Discord RPC status cleared')
def changePresence(sml_img, sml_txt, stt, dtls, start=None, end=None):
def waitLesson(lesson, start):
try: try:
if getConfig("use_rpc") and getOS != "android": if getConfig("use_rpc") and getOS != "android":
if connected == False: if connected == False:
connect() connect()
RPC.update(large_image='1024_cover', small_image='status_waiting', large_text=f'AutoZoom • v{str(version)}\nhttp://bit.ly/auto_zoom', small_text='Ожидание', state=f'Ждём начала «{lesson}»', details='Конференция не началась', start=start) RPC.update(
appendLog(f'Discord RPC changed to waitLesson (Lesson: {lesson}, Start: {start})') large_image=rpc_dict["large_image"],
small_image=rpc_dict["small_image"][sml_img],
large_text=rpc_dict["large_text"].replace("%version%", str(version)),
small_text=sml_txt,
state=stt,
details=dtls,
start=start,
end=end
)
appendLog(f'Discord RPC changed: (Small image: {sml_img}, Small text: {sml_txt}, State: {stt}, Details: {dtls}, Start: {str(start)}, End: {str(end)})')
except AttributeError: except AttributeError:
appendLog('Discord RPC failed to change status') appendLog('Discord RPC failed to change status')
if getConfig("debug"): if getConfig("debug"):
@@ -71,177 +95,43 @@ def waitLesson(lesson, start):
if getConfig("debug"): if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.') print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1) time.sleep(1)
except Exception as exp:
appendLog(f'Discord RPC failed to change status due to {exp}')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.\nОшибка: {BRED}{exp}{RESET}')
time.sleep(1)
def onLesson(lesson, start):
try: def waitLesson(conference, start):
if getConfig("use_rpc") and getOS != "android": changePresence("waiting", "Ожидание", f"Ждём начала «{conference}»", "Конференция не началась", start=start)
if connected == False:
connect() def onLesson(conference, start):
RPC.update(large_image='1024_cover', small_image='status_lesson', large_text=f'AutoZoom • v{str(version)}\nhttp://bit.ly/auto_zoom', small_text='Конференция', state=f'Слушаем «{lesson}»', details='Идёт конференция', start=start) changePresence("conference", "Конференция", f"Слушаем «{conference}»", "Идёт конференция", start=start)
appendLog(f'Discord RPC changed to onLesson (Lesson: {lesson}, Start: {start})')
except AttributeError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
except AssertionError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
def inMenu(): def inMenu():
try: changePresence("menu", "Главное меню", "Открыт список опций", "В главном меню")
if getConfig("use_rpc") and getOS != "android":
if connected == False:
connect()
RPC.update(large_image='1024_cover', small_image='status_menu', large_text=f'AutoZoom • v{str(version)}\nhttp://bit.ly/auto_zoom', small_text='Главное меню', state='Открыт список опций', details='В главном меню')
appendLog('Discord RPC changed to inMenu')
except AttributeError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
except AssertionError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
def shutdown(end): def shutdown(end):
try: changePresence("shutdown", "Выключение", "Отсчёт до авто-выключения", "Выключение ПК", end=end)
if getConfig("use_rpc") and getOS != "android":
if connected == False:
connect()
RPC.update(large_image='1024_cover', small_image='status_shutdown', large_text=f'AutoZoom • v{str(version)}\nhttp://bit.ly/auto_zoom', small_text='Выключение', state='Отсчёт до авто-выключения', details='Выключение ПК', end=end)
appendLog(f'Discord RPC changed to shutdown (End: {end})')
except AttributeError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
except AssertionError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
def inSettings(): def inSettings():
try: changePresence("settings", "Настройки", "Открыты настройки", "В главном меню")
if getConfig("use_rpc") and getOS != "android":
if connected == False:
connect()
RPC.update(large_image='1024_cover', small_image='status_settings', large_text=f'AutoZoom • v{str(version)}\nhttp://bit.ly/auto_zoom', small_text='Настройки', state='Открыты настройки', details='В главном меню')
appendLog('Discord RPC changed to inSettings')
except AttributeError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
except AssertionError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
def inDebug(): def inDebug():
try: changePresence("debug", "Отладка", "Открыто меню отладки", "В меню разработчика")
if getConfig("use_rpc") and getOS != "android":
if connected == False:
connect()
RPC.update(large_image='1024_cover', small_image='status_debug', large_text=f'AutoZoom • v{str(version)}\nhttp://bit.ly/auto_zoom', small_text='Отладка', state='Открыто меню отладки', details='В меню разработчика')
appendLog('Discord RPC changed to inDebug')
except AttributeError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
except AssertionError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
def inEditor(): def inEditor():
try: changePresence("editor", "Редактор", "Открыт редактор", "В главном меню")
if getConfig("use_rpc") and getOS != "android":
if connected == False:
connect()
RPC.update(large_image='1024_cover', small_image='status_editing', large_text=f'AutoZoom • v{str(version)}\nhttp://bit.ly/auto_zoom', small_text='Редактор', state='Открыт редактор', details='В главном меню')
appendLog('Discord RPC changed to inEditor')
except AttributeError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
except AssertionError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
def inUpdater(): def inUpdater():
try: changePresence("updating", "Обновление", "Открыт центр обновлений", "В главном меню")
if getConfig("use_rpc") and getOS != "android":
if connected == False:
connect()
RPC.update(large_image='1024_cover', small_image='status_updating', large_text=f'AutoZoom • v{str(version)}\nhttp://bit.ly/auto_zoom', small_text='Обновление', state='Открыт центр обновлений', details='В главном меню')
appendLog('Discord RPC changed to inUpdater')
except AttributeError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
except AssertionError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
def inHelp(): def inHelp():
try: changePresence("support", "Помощь", "Открыта помощь", "В главном меню")
if getConfig("use_rpc") and getOS != "android":
if connected == False:
connect()
RPC.update(large_image='1024_cover', small_image='status_support', large_text=f'AutoZoom • v{str(version)}\nhttp://bit.ly/auto_zoom', small_text='Помощь', state='Открыта помощь', details='В главном меню')
appendLog('Discord RPC changed to inHelp')
except AttributeError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
except AssertionError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
def lessonEnded(): def lessonEnded():
try: changePresence("waiting", "Ожидание", "Ждём указаний", "Все конференции закончились")
if getConfig("use_rpc") and getOS != "android":
if connected == False:
connect()
RPC.update(large_image='1024_cover', small_image='status_waiting', large_text=f'AutoZoom • v{str(version)}\nhttp://bit.ly/auto_zoom', small_text='Ожидание', state=f'Ждём указаний', details='Все конференции закончились')
appendLog('Discord RPC changed to lessonEnded')
except AttributeError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
except AssertionError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)
if __name__ == "__main__": if __name__ == "__main__":
try: changePresence("settings", "Отладка", "Модуль Discord RPC запущен в режиме тестирования", "Режим отладки")
RPC.connect()
RPC.update(large_image='1024_cover', small_image='status_settings', large_text=f'AutoZoom • v{str(version)}\nhttp://bit.ly/auto_zoom', small_text='Отладка', state='Модуль Discord RPC запущен в режиме тестирования', details='Режим отладки')
appendLog('Discord RPC changed to debug')
except AttributeError:
appendLog('Discord RPC failed to change status')
if getConfig("debug"):
print(f'{RESET}Модуль {BRED}Discord RPC {RESET}не смог подключиться.\nВозможно, ваш {CYAN}Discord {RESET}не открыт.')
time.sleep(1)

View File

@@ -115,14 +115,14 @@ def settings():
clear() clear()
continue continue
elif settings_choose == '2': elif settings_choose == '2':
setConfig("use_colors", not getConfig("use_colors")) setConfig("use_colors", not getConfig("use_colors"))
appendLog(f'Changed option "use_colors" to {getConfig("use_colors")}') appendLog(f'Changed option "use_colors" to {getConfig("use_colors")}')
clear() clear()
continue continue
elif settings_choose == '3': elif settings_choose == '3':
if sysname == 'windows': if sysname == 'windows':
setConfig("run_fullscreen", not getConfig("run_fullscreen")) setConfig("run_fullscreen", not getConfig("run_fullscreen"))
@@ -130,7 +130,7 @@ def settings():
clear() clear()
continue continue
elif settings_choose == '4': elif settings_choose == '4':
setConfig("sounds", not getConfig("sounds")) setConfig("sounds", not getConfig("sounds"))
appendLog(f'Changed option "sounds" to {getConfig("sounds")}') appendLog(f'Changed option "sounds" to {getConfig("sounds")}')
@@ -179,20 +179,20 @@ def settings():
none = input('Вы не выбрали верный путь для OBS.\n\n > ') none = input('Вы не выбрали верный путь для OBS.\n\n > ')
clear() clear()
break break
appendLog(f'Changed option "obs_exe" to {getConfig("obs_exe")}') appendLog(f'Changed option "obs_exe" to {getConfig("obs_exe")}')
appendLog(f'Changed option "obs_core" to {getConfig("obs_core")}') appendLog(f'Changed option "obs_core" to {getConfig("obs_core")}')
clear() clear()
continue continue
elif settings_choose == '6': elif settings_choose == '6':
setConfig("shutdown_enabled", not getConfig("shutdown_enabled")) setConfig("shutdown_enabled", not getConfig("shutdown_enabled"))
appendLog(f'Changed option "shutdown_enabled" to {getConfig("shutdown_enabled")}') appendLog(f'Changed option "shutdown_enabled" to {getConfig("shutdown_enabled")}')
clear() clear()
continue continue
elif settings_choose == '7': elif settings_choose == '7':
clear() clear()
settings2() settings2()
@@ -202,7 +202,7 @@ def settings():
clear() clear()
setTitle("AutoZoom (Главная)", sysname) setTitle("AutoZoom (Главная)", sysname)
return return
except KeyboardInterrupt: except KeyboardInterrupt:
rpc.inMenu() rpc.inMenu()
clear() clear()
@@ -218,7 +218,7 @@ def settings2():
setTitle("AutoZoom (Настройки)", sysname) setTitle("AutoZoom (Настройки)", sysname)
clear() clear()
if getConfig("use_colors"): if getConfig("use_colors"):
color_val = f'{BGREEN}Вкл.{RESET}' color_val = f'{BGREEN}Вкл.{RESET}'
elif not getConfig("use_colors"): elif not getConfig("use_colors"):
@@ -235,21 +235,21 @@ def settings2():
tg_var = f'{BRED}Не настроен{RESET}' tg_var = f'{BRED}Не настроен{RESET}'
else: else:
tg_var = f'{BRED}Не настроен{RESET}' tg_var = f'{BRED}Не настроен{RESET}'
if getConfig("telegram_enabled"): if getConfig("telegram_enabled"):
telegram_en_val = f'{BGREEN}Вкл.{RESET}' telegram_en_val = f'{BGREEN}Вкл.{RESET}'
elif not getConfig("telegram_enabled"): elif not getConfig("telegram_enabled"):
telegram_en_val = f'{BRED}Выкл.{RESET}' telegram_en_val = f'{BRED}Выкл.{RESET}'
else: else:
telegram_en_val = f'{BRED}ERROR{RESET}' telegram_en_val = f'{BRED}ERROR{RESET}'
if getConfig("update_check"): if getConfig("update_check"):
update_val = f'{BGREEN}Вкл.{RESET}' update_val = f'{BGREEN}Вкл.{RESET}'
elif not getConfig("update_check"): elif not getConfig("update_check"):
update_val = f'{BRED}Выкл.{RESET}' update_val = f'{BRED}Выкл.{RESET}'
else: else:
update_val = f'{BRED}ERROR{RESET}' update_val = f'{BRED}ERROR{RESET}'
shutdown_time_val = getConfig("shutdown_timeout") shutdown_time_val = getConfig("shutdown_timeout")
start_val = getConfig("start") start_val = getConfig("start")
stop_val = getConfig("stop") stop_val = getConfig("stop")
@@ -432,16 +432,19 @@ def settings3():
print(f' {BRED}2.{RESET} Размер лога действий ({YELLOW}{str(getConfig("log_size"))} Кб{RESET})') print(f' {BRED}2.{RESET} Размер лога действий ({YELLOW}{str(getConfig("log_size"))} Кб{RESET})')
print(f' {BBLACK}Размер файла лога превышая который он будет упакован в архив\n') print(f' {BBLACK}Размер файла лога превышая который он будет упакован в архив\n')
print(f' {BRED}3.{RESET} Добавить в автозапуск') print(f' {BRED}3.{RESET} Задержка до записи OBS ({YELLOW}{str(getConfig("obs_delay"))} сек.{RESET})')
print(f' {BBLACK}Через сколько секунд будет отправлен сигнал записи экрана\n')
print(f' {BRED}4.{RESET} Добавить в автозапуск')
print(f' {BBLACK}{winOnly(BRED, BBLACK, sysname, end=" ")}Автоматически запускать демона при входе в систему\n') print(f' {BBLACK}{winOnly(BRED, BBLACK, sysname, end=" ")}Автоматически запускать демона при входе в систему\n')
print(f' {BRED}4.{RESET} Удалять старые конференции ({remove_val})') print(f' {BRED}5.{RESET} Удалять старые конференции ({remove_val})')
print(f' {BBLACK}Автоматически удалять одноразовые конференции которые были до дня запуска\n') print(f' {BBLACK}Автоматически удалять одноразовые конференции которые были до дня запуска\n')
print(f' {BRED}5.{RESET} Сбросить все настройки') print(f' {BRED}6.{RESET} Сбросить все настройки')
print(f' {BBLACK}Восстановить настройки по умолчанию\n') print(f' {BBLACK}Восстановить настройки по умолчанию\n')
print(f' {BRED}6.{RESET} Назад') print(f' {BRED}7.{RESET} Назад')
print(f' {BBLACK}Вернуться на предыдущую страницу{RESET}\n') print(f' {BBLACK}Вернуться на предыдущую страницу{RESET}\n')
print(f' {BBLACK}Для переключения параметров Вкл/Выкл просто введите номер{RESET}') #\n Если окно приложения слишком мелкое - увеличьте его или листайте это меню{RESET}') print(f' {BBLACK}Для переключения параметров Вкл/Выкл просто введите номер{RESET}') #\n Если окно приложения слишком мелкое - увеличьте его или листайте это меню{RESET}')
@@ -468,6 +471,22 @@ def settings3():
continue continue
if settings_choose == '3': if settings_choose == '3':
try:
clear()
log_size_value = int(input(f'{RESET}Введите через сколько секунд отправлять сигнал записи:\n\n > {BRED}'))
setConfig("obs_delay", log_size_value)
continue
except:
clear()
print(f'{RESET}Нужно использовать целое число.')
time.sleep(2)
continue
appendLog(f'Changed option "obs_delay" to {getConfig["obs_delay"]}')
continue
if settings_choose == '4':
if sysname == "windows": if sysname == "windows":
@@ -503,11 +522,11 @@ def settings3():
else: else:
continue continue
elif settings_choose == '4': elif settings_choose == '5':
setConfig("remove_old", not getConfig("remove_old")) setConfig("remove_old", not getConfig("remove_old"))
appendLog(f'Changed option "remove_old" to {getConfig("remove_old")}') appendLog(f'Changed option "remove_old" to {getConfig("remove_old")}')
elif settings_choose == '5': elif settings_choose == '6':
appendLog('Resetting configuration') appendLog('Resetting configuration')
while True: while True:
@@ -541,7 +560,7 @@ def settings3():
clear() clear()
continue continue
elif settings_choose == '6': elif settings_choose == '7':
appendLog('Returned to settings page 2') appendLog('Returned to settings page 2')
clear() clear()
return return