Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
c2c0d47dbb | |||
c0076bf5aa | |||
09a3d66656 | |||
504b748789 | |||
fe0a1a5202 | |||
4aa988f236 | |||
3cb46f2b26 | |||
0cdf5d8ce1 | |||
25bf0064b7 |
@@ -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
|
27
assets/colors.json
Normal file
27
assets/colors.json
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"utility": {
|
||||||
|
"reset": "\u001b[0m",
|
||||||
|
"underline": "\u001b[4m",
|
||||||
|
"reverse": "\u001b[7m"
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"black": "\u001b[30m",
|
||||||
|
"blue": "\u001b[34m",
|
||||||
|
"green": "\u001b[32m",
|
||||||
|
"red": "\u001b[31m",
|
||||||
|
"yellow": "\u001b[33m",
|
||||||
|
"magenta": "\u001b[35m",
|
||||||
|
"cyan": "\u001b[36m",
|
||||||
|
"white": "\u001b[37m"
|
||||||
|
},
|
||||||
|
"bright": {
|
||||||
|
"black": "\u001b[30;1m",
|
||||||
|
"blue": "\u001b[34;1m",
|
||||||
|
"green": "\u001b[32;1m",
|
||||||
|
"red": "\u001b[31;1m",
|
||||||
|
"yellow": "\u001b[33;1m",
|
||||||
|
"magenta": "\u001b[35;1m",
|
||||||
|
"cyan": "\u001b[36;1m",
|
||||||
|
"white": "\u001b[37;1m"
|
||||||
|
}
|
||||||
|
}
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
@@ -1 +1,2 @@
|
|||||||
python daemon.py
|
echo AutoZoom needs Python 3 to work. Please read README.md!
|
||||||
|
python3 daemon.py
|
73
daemon.py
73
daemon.py
@@ -14,10 +14,10 @@ from random import randint
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from datetime import datetime, date, timedelta
|
from datetime import datetime, date, timedelta
|
||||||
|
|
||||||
from functions import *
|
from modules.functions import *
|
||||||
|
|
||||||
if getConfig("use_colors"):
|
if getConfig("use_colors"):
|
||||||
from colors import *
|
from modules.colors import *
|
||||||
appendLog('Colors imported')
|
appendLog('Colors imported')
|
||||||
else:
|
else:
|
||||||
RESET = ''
|
RESET = ''
|
||||||
@@ -32,8 +32,7 @@ clear()
|
|||||||
setTitle("Загрузка daemon...", sysname)
|
setTitle("Загрузка daemon...", sysname)
|
||||||
appendLog('daemon.py start initialized', startup=True)
|
appendLog('daemon.py start initialized', startup=True)
|
||||||
|
|
||||||
import libinstaller
|
import modules.rpc as rpc
|
||||||
import rpc
|
|
||||||
|
|
||||||
if sysname == "windows":
|
if sysname == "windows":
|
||||||
import easygui
|
import easygui
|
||||||
@@ -109,7 +108,7 @@ def getLessons():
|
|||||||
return lessons_list
|
return lessons_list
|
||||||
|
|
||||||
|
|
||||||
def tgsend(enabled, message):
|
def tgsend(enabled, message, video=None):
|
||||||
if enabled:
|
if enabled:
|
||||||
if os.path.exists(files_folder+'telegram.conf'):
|
if os.path.exists(files_folder+'telegram.conf'):
|
||||||
tg_file = open(files_folder+'telegram.conf', 'r', encoding="utf-8")
|
tg_file = open(files_folder+'telegram.conf', 'r', encoding="utf-8")
|
||||||
@@ -118,14 +117,25 @@ def tgsend(enabled, message):
|
|||||||
if tg_text != 'Not Configured':
|
if tg_text != 'Not Configured':
|
||||||
|
|
||||||
try:
|
try:
|
||||||
telegram_send.send(messages=[f"{message}"], parse_mode="markdown", conf=files_folder+"telegram.conf")
|
if video is not None:
|
||||||
|
telegram_send.send(messages=[f"{message}"], videos=[f"{video}"], parse_mode="markdown", conf=files_folder+"telegram.conf")
|
||||||
|
else:
|
||||||
|
telegram_send.send(messages=[f"{message}"], parse_mode="markdown", conf=files_folder+"telegram.conf")
|
||||||
|
|
||||||
except Exception as excep:
|
except Exception as excep:
|
||||||
appendLog(f'Failed to send TG message "{message}": {exp}')
|
appendLog(f'Failed to send TG message "{message}": {exp}')
|
||||||
playSound("warning", nowtime())
|
playSound(getConfig("sound_warning"), nowtime())
|
||||||
print(f'{nowtime()} Не удалось отправить Telegram сообщение "{message}" (Ошибка: {exp})')
|
print(f'{nowtime()} Не удалось отправить Telegram сообщение "{message}" (Ошибка: {exp})')
|
||||||
|
|
||||||
|
|
||||||
|
async def tgsendVideo(msg, video, video_new):
|
||||||
|
print(f"{nowtime()} Отправка записи конференции {CYAN}{msg}{RESET}.")
|
||||||
|
try:
|
||||||
|
tgsend(getConfig("telegram_enabled"), msg, video=video)
|
||||||
|
os.rename(video, video_new)
|
||||||
|
except Exception as exp:
|
||||||
|
tgsend(getConfig("telegram_enabled"), f"⚠ Отправка видео `{video}` прошла с ошибкой `{exp}`")
|
||||||
|
|
||||||
def main(source='deamon'):
|
def main(source='deamon'):
|
||||||
|
|
||||||
global sysname
|
global sysname
|
||||||
@@ -380,17 +390,17 @@ def main(source='deamon'):
|
|||||||
|
|
||||||
if getConfig("debug"):
|
if getConfig("debug"):
|
||||||
if retries == 2:
|
if retries == 2:
|
||||||
playSound("warning", nowtime())
|
playSound(getConfig("sound_warning"), nowtime())
|
||||||
tgsend(getConfig("telegram_enabled"), f"⚠ Задержка конференции *{lesson_name}* обнаружена {profilename}")
|
tgsend(getConfig("telegram_enabled"), f"⚠ Задержка конференции *{lesson_name}* обнаружена {profilename}")
|
||||||
|
|
||||||
if retries == 36:
|
if retries == 36:
|
||||||
playSound("warning", nowtime())
|
playSound(getConfig("sound_warning"), nowtime())
|
||||||
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(getConfig("sound_warning"), nowtime())
|
||||||
tgsend(getConfig("telegram_enabled"), f"⚠ Задержка конференции *{lesson_name}* превысила 10 минут {profilename}")
|
tgsend(getConfig("telegram_enabled"), f"⚠ Задержка конференции *{lesson_name}* превысила 10 минут {profilename}")
|
||||||
print(f'{nowtime()} Задержка конференции {CYAN}{lesson_name}{RESET} превысила {BRED}10{RESET} минут')
|
print(f'{nowtime()} Задержка конференции {CYAN}{lesson_name}{RESET} превысила {BRED}10{RESET} минут')
|
||||||
appendLog(f'Lesson delay exceeded: {retries} retries')
|
appendLog(f'Lesson delay exceeded: {retries} retries')
|
||||||
@@ -398,17 +408,17 @@ def main(source='deamon'):
|
|||||||
if retries == 360:
|
if retries == 360:
|
||||||
|
|
||||||
if getConfig("debug"):
|
if getConfig("debug"):
|
||||||
playSound("warning", nowtime())
|
playSound(getConfig("sound_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} минут, конференция сброшена')
|
||||||
else:
|
else:
|
||||||
playSound("warning", nowtime())
|
playSound(getConfig("sound_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(getConfig("sound_ended"), nowtime())
|
||||||
|
|
||||||
if lesson_obs:
|
if lesson_obs:
|
||||||
|
|
||||||
@@ -475,7 +485,7 @@ def main(source='deamon'):
|
|||||||
|
|
||||||
setTitle(f'Идёт конференция "{lesson_name}"', sysname)
|
setTitle(f'Идёт конференция "{lesson_name}"', sysname)
|
||||||
|
|
||||||
playSound("started", nowtime())
|
playSound(getConfig("sound_started"), nowtime())
|
||||||
tgsend(getConfig("telegram_enabled"), f"▶ Зашёл на конференцию *{lesson_name}* в *{nowtime(False, False, False)}* {profilename}")
|
tgsend(getConfig("telegram_enabled"), f"▶ Зашёл на конференцию *{lesson_name}* в *{nowtime(False, False, False)}* {profilename}")
|
||||||
|
|
||||||
appendLog(f'Joined lesson {lesson_name} at {nowtime(False, False, False)}')
|
appendLog(f'Joined lesson {lesson_name} at {nowtime(False, False, False)}')
|
||||||
@@ -503,7 +513,7 @@ def main(source='deamon'):
|
|||||||
keyboard.release(start)
|
keyboard.release(start)
|
||||||
record_now = True
|
record_now = True
|
||||||
print(f'{nowtime()} Сигнал записи OBS отправлен.')
|
print(f'{nowtime()} Сигнал записи OBS отправлен.')
|
||||||
playSound("recordstart", nowtime())
|
playSound(getConfig("sound_recordstart"), nowtime())
|
||||||
|
|
||||||
lesson_duration = (datetime.now() - lesson_start).total_seconds()
|
lesson_duration = (datetime.now() - lesson_start).total_seconds()
|
||||||
|
|
||||||
@@ -532,20 +542,21 @@ def main(source='deamon'):
|
|||||||
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}.)')
|
||||||
|
fire_and_forget(tgsendVideo(f"{lesson_name}", "C:\\Users\\PC-Admin\\AutoZoom\\lessons\\meeting.mp4", f'C:\\Users\\PC-Admin\\AutoZoom\\lessons\\meeting_{datetime.now().strftime("%d.%m.%Y_%H-%M-%S")}.mp4'))
|
||||||
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(getConfig("sound_ended"), nowtime())
|
||||||
|
|
||||||
if lesson_obs:
|
if lesson_obs:
|
||||||
keyboard.press(stop)
|
keyboard.press(stop)
|
||||||
time.sleep(.25)
|
time.sleep(.25)
|
||||||
keyboard.release(stop)
|
keyboard.release(stop)
|
||||||
print(f'{nowtime()} Сигнал остановки записи через OBS отправлен.')
|
print(f'{nowtime()} Сигнал остановки записи через OBS отправлен.')
|
||||||
playSound("recordstop", nowtime())
|
playSound(getConfig("sound_recordstop"), nowtime())
|
||||||
record_now = False
|
record_now = False
|
||||||
time.sleep(3)
|
time.sleep(3)
|
||||||
|
|
||||||
@@ -579,7 +590,7 @@ def main(source='deamon'):
|
|||||||
lessons_list = getLessons()
|
lessons_list = getLessons()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
playSound("started", nowtime())
|
playSound(getConfig("sound_started"), nowtime())
|
||||||
tgsend(getConfig("telegram_enabled"), f"▶ Присоединился к конференции *{lesson_name}* в *{nowtime(False, False, False)}* {profilename}")
|
tgsend(getConfig("telegram_enabled"), f"▶ Присоединился к конференции *{lesson_name}* в *{nowtime(False, False, False)}* {profilename}")
|
||||||
|
|
||||||
appendLog(f'Joined lesson {lesson_name} at {nowtime(False, False, False)}')
|
appendLog(f'Joined lesson {lesson_name} at {nowtime(False, False, False)}')
|
||||||
@@ -622,7 +633,7 @@ def main(source='deamon'):
|
|||||||
|
|
||||||
appendLog(f'Shutting PC down in {str(getConfig("shutdown_timeout"))}')
|
appendLog(f'Shutting PC down in {str(getConfig("shutdown_timeout"))}')
|
||||||
|
|
||||||
playSound("shutdown", nowtime())
|
playSound(getConfig("sound_shutdown"), nowtime())
|
||||||
end_unix = int(time.time())+getConfig("shutdown_timeout")*60
|
end_unix = int(time.time())+getConfig("shutdown_timeout")*60
|
||||||
rpc.shutdown(end_unix)
|
rpc.shutdown(end_unix)
|
||||||
shutdown = inputimeout(prompt=f'{nowtime()} Нажмите {CYAN}Enter{RESET} чтобы предотвратить выключение ПК...', timeout=getConfig("shutdown_timeout")*60)
|
shutdown = inputimeout(prompt=f'{nowtime()} Нажмите {CYAN}Enter{RESET} чтобы предотвратить выключение ПК...', timeout=getConfig("shutdown_timeout")*60)
|
||||||
@@ -637,6 +648,28 @@ def main(source='deamon'):
|
|||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
appendLog('Shutting PC down')
|
appendLog('Shutting PC down')
|
||||||
os.system("shutdown /s /t 1")
|
os.system("shutdown /s /t 1")
|
||||||
|
elif getConfig("end_mode") == 'sleep':
|
||||||
|
try:
|
||||||
|
tgsend(getConfig("telegram_enabled"), f"⚠ Конференции кончились, отправление в сон {profilename}через {str(getConfig('shutdown_timeout'))} мин...")
|
||||||
|
print(f'{nowtime()} Ваш ПК автоматически заснёт через {BRED}{str(getConfig("shutdown_timeout"))} мин{RESET}.')
|
||||||
|
|
||||||
|
appendLog(f'Falling asleep in {str(getConfig("shutdown_timeout"))}')
|
||||||
|
|
||||||
|
playSound(getConfig("sound_shutdown"), nowtime())
|
||||||
|
end_unix = int(time.time())+getConfig("shutdown_timeout")*60
|
||||||
|
rpc.sleepmode(end_unix)
|
||||||
|
shutdown = inputimeout(prompt=f'{nowtime()} Нажмите {CYAN}Enter{RESET} чтобы предотвратить засыпание ПК...', timeout=getConfig("shutdown_timeout")*60)
|
||||||
|
|
||||||
|
appendLog('Sleep mode aborted')
|
||||||
|
clear()
|
||||||
|
except TimeoutOccurred:
|
||||||
|
clear()
|
||||||
|
print(f'{nowtime()} Время вышло, уводим ваш ПК в спящий режим...')
|
||||||
|
time.sleep(3)
|
||||||
|
tgsend(getConfig("telegram_enabled"), f"⚠ Время таймаута исткело, переводим ПК в спящий режим...")
|
||||||
|
time.sleep(5)
|
||||||
|
appendLog('Activating PC sleep mode')
|
||||||
|
os.system("rundll32.exe powrprof.dll, SetSuspendState Sleep")
|
||||||
# elif getConfig("end_mode") == 'restart':
|
# elif getConfig("end_mode") == 'restart':
|
||||||
# from datetime import datetime, time
|
# from datetime import datetime, time
|
||||||
# from time import sleep
|
# from time import sleep
|
||||||
@@ -687,7 +720,7 @@ def main(source='deamon'):
|
|||||||
return
|
return
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
from functions import getOS, setTitle
|
from modules.functions import getOS, setTitle
|
||||||
setTitle("AutoZoom (Демон)", getOS())
|
setTitle("AutoZoom (Демон)", getOS())
|
||||||
import sys
|
import sys
|
||||||
clear()
|
clear()
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
echo "Running AutoZoom daemon with Python 3. Please read README.md!"
|
echo "AutoZoom needs Python 3 to work. Please read README.md!"
|
||||||
python3 daemon.py
|
python3 daemon.py
|
5
install.bat
Normal file
5
install.bat
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
echo AutoZoom needs Python 3 to work. Please read README.md!
|
||||||
|
python3 .\modules\install.py
|
||||||
|
python3 -m pip install -r requirements.txt
|
||||||
|
echo Run start.bat to proceed to AutoZoom.
|
||||||
|
pause
|
4
install.sh
Normal file
4
install.sh
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
echo "AutoZoom needs Python 3 to work. Please read README.md!"
|
||||||
|
python3 ./modules/install.py
|
||||||
|
python3 -m pip install -r requirements.txt
|
||||||
|
echo "Run start.sh to proceed to AutoZoom."
|
196
libinstaller.py
196
libinstaller.py
@@ -1,196 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
import os, sys
|
|
||||||
from colors import *
|
|
||||||
from functions import getConfig, setConfig, getOS, yes_list, no_list
|
|
||||||
from functions import appendLog
|
|
||||||
from subprocess import check_output
|
|
||||||
|
|
||||||
if getConfig("firstboot"):
|
|
||||||
|
|
||||||
if getOS() == "android":
|
|
||||||
while True:
|
|
||||||
os.system('clear')
|
|
||||||
confirmation = input(f'{BRED}Внимание! {RESET}AutoZoom практически не оптимизирован под {CYAN}Android{RESET}.\nПродолжая использовать программу на ОС кроме {CYAN}Windows {RESET}вы действуете на свой страх и риск.\nПолноценная поддержка операционной системы Android не планируется.\nДля хоть какой-то работы нужно установить Zoom\nи заранее его настроить.\n\nВведите {BGREEN}Да {RESET}если вас не пугает указанное выше.\nВведите {BRED}Нет {RESET}если вас это не устраивает, программа сама закроется.\n\n > ')
|
|
||||||
|
|
||||||
if confirmation.lower() in yes_list:
|
|
||||||
setConfig("firstboot", False)
|
|
||||||
setConfig("obs_core", "Disabled")
|
|
||||||
setConfig("obs_exe", "Disabled")
|
|
||||||
setConfig("use_rpc", False)
|
|
||||||
break
|
|
||||||
|
|
||||||
elif confirmation.lower() in no_list:
|
|
||||||
setConfig("firstboot", True)
|
|
||||||
sys.exit()
|
|
||||||
break
|
|
||||||
|
|
||||||
else:
|
|
||||||
continue
|
|
||||||
|
|
||||||
elif getOS() == "unix":
|
|
||||||
while True:
|
|
||||||
os.system('clear')
|
|
||||||
confirmation = input(f'{BRED}Внимание! {RESET}AutoZoom плохо оптимизирован под {CYAN}Linux {RESET}и {CYAN}MacOS{RESET}.\nПродолжая использовать программу на ОС кроме {CYAN}Windows {RESET}вы действуете на свой страх и риск.\nПолноценная поддержка UNIX систем реализована не будет.\nДля хоть какой-то работы нужно установить Zoom\nи заранее его настроить.\n\nВведите {BGREEN}Да {RESET}если вас не пугает указанное выше.\nВведите {BRED}Нет {RESET}если вас это не устраивает, программа сама закроется.\n\n > ')
|
|
||||||
|
|
||||||
if confirmation.lower() in yes_list:
|
|
||||||
setConfig("firstboot", False)
|
|
||||||
setConfig("obs_core", "Disabled")
|
|
||||||
setConfig("obs_exe", "Disabled")
|
|
||||||
break
|
|
||||||
|
|
||||||
elif confirmation.lower() in no_list:
|
|
||||||
setConfig("firstboot", True)
|
|
||||||
sys.exit()
|
|
||||||
break
|
|
||||||
|
|
||||||
else:
|
|
||||||
continue
|
|
||||||
|
|
||||||
elif getOS() == "windows":
|
|
||||||
setConfig("firstboot", False)
|
|
||||||
|
|
||||||
#########################################################
|
|
||||||
libs = []
|
|
||||||
###################################
|
|
||||||
if getOS() == "windows":
|
|
||||||
try:
|
|
||||||
import easygui
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
appendLog("No module easygui")
|
|
||||||
libs.append("easygui")
|
|
||||||
###################################
|
|
||||||
try:
|
|
||||||
import tkinter
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
appendLog("No module tkinter")
|
|
||||||
libs.append("tkinter")
|
|
||||||
###################################
|
|
||||||
try:
|
|
||||||
from swinlnk.swinlnk import SWinLnk
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
appendLog("No module swinlnk")
|
|
||||||
libs.append("swinlnk")
|
|
||||||
###################################
|
|
||||||
try:
|
|
||||||
import keyboard
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
appendLog("No module keyboard")
|
|
||||||
libs.append("keyboard")
|
|
||||||
###################################
|
|
||||||
try:
|
|
||||||
import ast
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
appendLog("No module ast")
|
|
||||||
libs.append("ast")
|
|
||||||
###################################
|
|
||||||
try:
|
|
||||||
import inputimeout
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
appendLog("No module inputimeout")
|
|
||||||
libs.append("inputimeout")
|
|
||||||
###################################
|
|
||||||
try:
|
|
||||||
import telegram_send
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
appendLog("No module telegram_send")
|
|
||||||
libs.append("telegram_send")
|
|
||||||
###################################
|
|
||||||
try:
|
|
||||||
import wget
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
appendLog("No module wget")
|
|
||||||
libs.append("wget")
|
|
||||||
###################################
|
|
||||||
try:
|
|
||||||
import requests
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
appendLog("No module requests")
|
|
||||||
libs.append("requests")
|
|
||||||
###################################
|
|
||||||
if getOS() != "android":
|
|
||||||
try:
|
|
||||||
from playsound import playsound
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
appendLog("No module playsound")
|
|
||||||
libs.append("playsound")
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
if not "play-audio" in os.popen('pkg list-all').read():
|
|
||||||
os.system('pkg install play-audio')
|
|
||||||
except:
|
|
||||||
appendLog("Could not install play-audio")
|
|
||||||
###################################
|
|
||||||
try:
|
|
||||||
from zipfile import ZipFile
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
appendLog("No module zipfile")
|
|
||||||
libs.append("zipfile")
|
|
||||||
###################################
|
|
||||||
try:
|
|
||||||
import asyncio
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
appendLog("No module asyncio")
|
|
||||||
libs.append("asyncio")
|
|
||||||
###################################
|
|
||||||
try:
|
|
||||||
import getpass
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
appendLog("No module getpass")
|
|
||||||
libs.append("getpass")
|
|
||||||
###################################
|
|
||||||
try:
|
|
||||||
from pypresence import Presence
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
appendLog("No module pypresence")
|
|
||||||
libs.append("pypresence")
|
|
||||||
###################################
|
|
||||||
|
|
||||||
if len(libs) > 0:
|
|
||||||
print("Не хватает нужных модулей, пробуем установить...\nЭто может занять некоторое время. Пожалуйста, не закрывайте программу.")
|
|
||||||
appendLog('Missing some modules, trying to install them')
|
|
||||||
|
|
||||||
for each in libs:
|
|
||||||
try:
|
|
||||||
if getConfig("debug"):
|
|
||||||
response = os.system('"{}" -m pip install -U '.format(sys.executable) + each)
|
|
||||||
else:
|
|
||||||
response = os.system('"{}" -m pip install -U '.format(sys.executable) + each + " -q --no-warn-script-location")
|
|
||||||
except:
|
|
||||||
response = os.system('"{}" -m pip install -U '.format(sys.executable) + each + " -q --no-warn-script-location")
|
|
||||||
|
|
||||||
print(f"{RESET}[{BGREEN}OK{RESET}] Установлен модуль {YELLOW}{each}{RESET}.")
|
|
||||||
|
|
||||||
appendLog(f'Module {each} installed')
|
|
||||||
|
|
||||||
if response != 0:
|
|
||||||
appendLog(f'Failed to install {each}')
|
|
||||||
sys.exit(f"{RESET}[{BRED}ERR{RESET}] Установка {YELLOW}{each} {RESET}провалилась.")
|
|
||||||
|
|
||||||
appendLog('Everything seems to be installed')
|
|
||||||
print(f"{RESET}[{BGREEN}OK{RESET}] Все модули были успешно установлены.")
|
|
||||||
|
|
||||||
try:
|
|
||||||
if getOS() == "windows":
|
|
||||||
import easygui
|
|
||||||
import tkinter
|
|
||||||
from swinlnk.swinlnk import SWinLnk
|
|
||||||
|
|
||||||
import keyboard
|
|
||||||
import ast
|
|
||||||
import inputimeout
|
|
||||||
import telegram_send
|
|
||||||
import wget
|
|
||||||
import requests
|
|
||||||
import asyncio
|
|
||||||
import getpass
|
|
||||||
|
|
||||||
if getOS() != "android":
|
|
||||||
from playsound import playsound
|
|
||||||
|
|
||||||
from zipfile import ZipFile
|
|
||||||
from pypresence import Presence
|
|
||||||
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
sys.exit(f"\n#############################################################################\n{BGREEN} Пожалуйста, перезапустите программу для продолжения!{RESET}\n Если это сообщение видно не впервые - напишите {BRED}@profitroll {RESET}в {CYAN}Telegram {RESET}или\n включите {BRED}debug {RESET}в {BRED}files/config.json {RESET}и решите проблему самостоятельно.\n#############################################################################")
|
|
||||||
#########################################################
|
|
4
locales/_default.json
Normal file
4
locales/_default.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"avail_de": "AutoZoom ist auf Deutsch verfügbar. Sprache von Englisch auf Deutsch ändern?",
|
||||||
|
"avail_uk": "AutoZoom доступний українською. Змінити мову з англійської на українську?"
|
||||||
|
}
|
0
locales/de.json
Normal file
0
locales/de.json
Normal file
74
locales/en.json
Normal file
74
locales/en.json
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"answer_yes": ["y", "yes", "yep"],
|
||||||
|
"answer_no": ["n", "no", "nope"],
|
||||||
|
"functions": {
|
||||||
|
"compatability": "For Windows only!",
|
||||||
|
"winsound_error": "{0} Could not play winsound sound \"{1}\" (Error: {2})",
|
||||||
|
"playsound_error": "{0} Could not play playsound sound \"{1}\" (Error: {2})"
|
||||||
|
},
|
||||||
|
"rpc": {
|
||||||
|
"connection_error": "Module {0}Discord RPC {1}could not connect.\nYour {2}Discord {3}client might be closed.",
|
||||||
|
"connection_error_detailed": "Module {0}Discord RPC {1}could not connect.\nYour {2}Discord {3}client might be closed.\nError: {4}{5}",
|
||||||
|
"presence": {
|
||||||
|
"waiting": {
|
||||||
|
"smalltext": "Waiting",
|
||||||
|
"state": "Awaiting meeting «{0}»",
|
||||||
|
"details": "Meeting hasn't started"
|
||||||
|
},
|
||||||
|
"meeting": {
|
||||||
|
"smalltext": "Meeting",
|
||||||
|
"state": "Listening to «{0}»",
|
||||||
|
"details": "Ongoing meeting"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"smalltext": "Main menu",
|
||||||
|
"state": "Options list opened",
|
||||||
|
"details": "In the menus"
|
||||||
|
},
|
||||||
|
"shutdown": {
|
||||||
|
"smalltext": "Shutting down",
|
||||||
|
"state": "Countdown before auto-shutdown",
|
||||||
|
"details": "PC shutdown"
|
||||||
|
},
|
||||||
|
"sleep": {
|
||||||
|
"smalltext": "Sleeping mode",
|
||||||
|
"state": "Countdown before auto-sleep",
|
||||||
|
"details": "PC sleep mode"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"smalltext": "Settings",
|
||||||
|
"state": "Settings opened",
|
||||||
|
"details": "In the menus"
|
||||||
|
},
|
||||||
|
"debugmenu": {
|
||||||
|
"smalltext": "Debug",
|
||||||
|
"state": "Debug menu opened",
|
||||||
|
"details": "In the dev menu"
|
||||||
|
},
|
||||||
|
"editor": {
|
||||||
|
"smalltext": "Editor",
|
||||||
|
"state": "Meetings editor opened",
|
||||||
|
"details": "In the menus"
|
||||||
|
},
|
||||||
|
"updating": {
|
||||||
|
"smalltext": "Updater",
|
||||||
|
"state": "Updates center opened",
|
||||||
|
"details": "In the menus"
|
||||||
|
},
|
||||||
|
"support": {
|
||||||
|
"smalltext": "Support",
|
||||||
|
"state": "Help menu opened",
|
||||||
|
"details": "In the menus"
|
||||||
|
},
|
||||||
|
"ended": {
|
||||||
|
"smalltext": "Waiting",
|
||||||
|
"state": "Awaiting instructions",
|
||||||
|
"details": "All metings are over"
|
||||||
|
},
|
||||||
|
"debug": {
|
||||||
|
"smalltext": "Debug",
|
||||||
|
"state": "Discord RPC module is running in testing mode",
|
||||||
|
"details": "Debug mode"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
0
locales/uk.json
Normal file
0
locales/uk.json
Normal file
64
main.py
64
main.py
@@ -9,21 +9,63 @@ import platform
|
|||||||
import subprocess
|
import subprocess
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import libinstaller
|
from modules.functions import *
|
||||||
|
|
||||||
from functions import *
|
|
||||||
|
|
||||||
appendLog('main.py start initialized', startup=True)
|
appendLog('main.py start initialized', startup=True)
|
||||||
|
|
||||||
setTitle("", getOS())
|
setTitle("", getOS())
|
||||||
|
|
||||||
|
if getConfig("firstboot"):
|
||||||
|
|
||||||
|
if getOS() == "android":
|
||||||
|
while True:
|
||||||
|
os.system('clear')
|
||||||
|
confirmation = input(f'{BRED}Внимание! {RESET}AutoZoom практически не оптимизирован под {CYAN}Android{RESET}.\nПродолжая использовать программу на ОС кроме {CYAN}Windows {RESET}вы действуете на свой страх и риск.\nПолноценная поддержка операционной системы Android не планируется.\nДля хоть какой-то работы нужно установить Zoom\nи заранее его настроить.\n\nВведите {BGREEN}Да {RESET}если вас не пугает указанное выше.\nВведите {BRED}Нет {RESET}если вас это не устраивает, программа сама закроется.\n\n > ')
|
||||||
|
|
||||||
|
if confirmation.lower() in yes_list:
|
||||||
|
setConfig("firstboot", False)
|
||||||
|
setConfig("obs_core", "Disabled")
|
||||||
|
setConfig("obs_exe", "Disabled")
|
||||||
|
setConfig("use_rpc", False)
|
||||||
|
break
|
||||||
|
|
||||||
|
elif confirmation.lower() in no_list:
|
||||||
|
setConfig("firstboot", True)
|
||||||
|
sys.exit()
|
||||||
|
break
|
||||||
|
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
|
||||||
|
elif getOS() == "unix":
|
||||||
|
while True:
|
||||||
|
os.system('clear')
|
||||||
|
confirmation = input(f'{BRED}Внимание! {RESET}AutoZoom плохо оптимизирован под {CYAN}Linux {RESET}и {CYAN}MacOS{RESET}.\nПродолжая использовать программу на ОС кроме {CYAN}Windows {RESET}вы действуете на свой страх и риск.\nПолноценная поддержка UNIX систем реализована не будет.\nДля хоть какой-то работы нужно установить Zoom\nи заранее его настроить.\n\nВведите {BGREEN}Да {RESET}если вас не пугает указанное выше.\nВведите {BRED}Нет {RESET}если вас это не устраивает, программа сама закроется.\n\n > ')
|
||||||
|
|
||||||
|
if confirmation.lower() in yes_list:
|
||||||
|
setConfig("firstboot", False)
|
||||||
|
setConfig("obs_core", "Disabled")
|
||||||
|
setConfig("obs_exe", "Disabled")
|
||||||
|
break
|
||||||
|
|
||||||
|
elif confirmation.lower() in no_list:
|
||||||
|
setConfig("firstboot", True)
|
||||||
|
sys.exit()
|
||||||
|
break
|
||||||
|
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
|
||||||
|
elif getOS() == "windows":
|
||||||
|
setConfig("firstboot", False)
|
||||||
|
|
||||||
from daemon import main
|
from daemon import main
|
||||||
import settings
|
import modules.settings as settings
|
||||||
import editor
|
import modules.editor as editor
|
||||||
import rpc
|
import modules.rpc as rpc
|
||||||
|
|
||||||
if getConfig("use_colors"):
|
if getConfig("use_colors"):
|
||||||
from colors import *
|
from modules.colors import *
|
||||||
else:
|
else:
|
||||||
RESET = ''
|
RESET = ''
|
||||||
BLACK = RED = GREEN = YELLOW = BLUE = MAGENTA = CYAN = WHITE = ''
|
BLACK = RED = GREEN = YELLOW = BLUE = MAGENTA = CYAN = WHITE = ''
|
||||||
@@ -36,7 +78,7 @@ import keyboard
|
|||||||
import getpass
|
import getpass
|
||||||
from zipfile import ZipFile
|
from zipfile import ZipFile
|
||||||
|
|
||||||
version = 2.4
|
version = 2.7
|
||||||
path = Path(__file__).resolve().parent
|
path = Path(__file__).resolve().parent
|
||||||
|
|
||||||
def mainMenu():
|
def mainMenu():
|
||||||
@@ -237,7 +279,7 @@ def helpMenu():
|
|||||||
elif help_choose == '7':
|
elif help_choose == '7':
|
||||||
try:
|
try:
|
||||||
clear()
|
clear()
|
||||||
print(f'{BBLACK}»{RESET} Список поддержавших проект:\n\n{(requests.get("https://www.end-play.xyz/AutoZoomDonors.txt").text).replace("-", RESET+" •"+BRED)}{RESET}')
|
print(f'{BBLACK}»{RESET} Список поддержавших проект:\n\n{(requests.get("https://www.end-play.xyz/AutoZoomDonors.txt").content.decode("utf-8")).replace("-", RESET+" •"+BRED)}{RESET}')
|
||||||
except Exception as exp:
|
except Exception as exp:
|
||||||
clear()
|
clear()
|
||||||
appendLog(f'Failed to load donation list {exp}')
|
appendLog(f'Failed to load donation list {exp}')
|
||||||
@@ -462,7 +504,7 @@ def updater(serv_ver, version):
|
|||||||
appendLog('Changelog loaded')
|
appendLog('Changelog loaded')
|
||||||
clear()
|
clear()
|
||||||
print(f'{RESET}{changelog_text}\n')
|
print(f'{RESET}{changelog_text}\n')
|
||||||
print(changelog.text)
|
print(changelog.content.decode('utf-8'))
|
||||||
print(changelog_footer)
|
print(changelog_footer)
|
||||||
none = input('\n > ')
|
none = input('\n > ')
|
||||||
continue
|
continue
|
||||||
@@ -489,7 +531,7 @@ def updater(serv_ver, version):
|
|||||||
return
|
return
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
from functions import getConfig
|
from modules.functions import getConfig
|
||||||
from daemon import clear, getOS, setTitle
|
from daemon import clear, getOS, setTitle
|
||||||
import time
|
import time
|
||||||
setTitle("Загрузка main...", getOS())
|
setTitle("Загрузка main...", getOS())
|
||||||
|
@@ -1,5 +1,13 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# def col(color, type="util"):
|
||||||
|
# if type is "util":
|
||||||
|
# type="utility"
|
||||||
|
# elif type is "br":
|
||||||
|
# type="bright"
|
||||||
|
# elif type is "def":
|
||||||
|
# type="default"
|
||||||
|
|
||||||
RESET = '\u001b[0m'
|
RESET = '\u001b[0m'
|
||||||
|
|
||||||
BLACK = '\u001b[30m'
|
BLACK = '\u001b[30m'
|
@@ -1,10 +1,10 @@
|
|||||||
import rpc
|
import modules.rpc as rpc
|
||||||
from functions import *
|
from modules.functions import *
|
||||||
from datetime import datetime, date, timedelta
|
from datetime import datetime, date, timedelta
|
||||||
from daemon import getLessons, getConfig
|
from daemon import getLessons, getConfig
|
||||||
|
|
||||||
if getConfig("use_colors"):
|
if getConfig("use_colors"):
|
||||||
from colors import *
|
from modules.colors import *
|
||||||
appendLog('Colors imported')
|
appendLog('Colors imported')
|
||||||
else:
|
else:
|
||||||
RESET = ''
|
RESET = ''
|
@@ -1,14 +1,17 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import pip
|
from socket import send_fds
|
||||||
import time
|
import time
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import gzip
|
import gzip
|
||||||
import getpass
|
import getpass
|
||||||
|
import keyboard
|
||||||
|
from modules.telegram import telegramSendText
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
import asyncio, threading
|
||||||
from subprocess import check_output
|
from subprocess import check_output
|
||||||
|
|
||||||
path = Path(__file__).resolve().parent
|
path = Path(__file__).resolve().parent
|
||||||
@@ -16,30 +19,121 @@ sounds_folder = str(Path(str(path)+"/sounds/")) + os.sep
|
|||||||
files_folder = str(Path(str(path)+"/files/")) + os.sep
|
files_folder = str(Path(str(path)+"/files/")) + os.sep
|
||||||
logs_folder = str(Path(str(path)+"/logs/")) + os.sep
|
logs_folder = str(Path(str(path)+"/logs/")) + os.sep
|
||||||
|
|
||||||
yes_list = ['y', 'yes', 'д', 'да']
|
yes_list = ['y', 'yes', 'т', 'так', 'j', 'ja']
|
||||||
no_list = ['n', 'no', 'н', 'нет']
|
no_list = ['n', 'no', 'н', 'ні', 'nein']
|
||||||
|
|
||||||
default_config = {
|
default_config = {
|
||||||
"firstboot": True,
|
"firstrun": True,
|
||||||
"debug": False,
|
"debug": False,
|
||||||
"shutdown_timeout": 30,
|
"update_check": True,
|
||||||
"shutdown_enabled": False,
|
"logging": {
|
||||||
"start": "shift+f7",
|
"enabled": True,
|
||||||
"stop": "shift+f8",
|
"rotate_size": 512
|
||||||
"telegram_enabled": False,
|
},
|
||||||
"use_colors": True,
|
"meetings": {
|
||||||
"run_fullscreen": False,
|
"remove_old": True
|
||||||
"use_rpc": True,
|
},
|
||||||
"sounds": True,
|
"meeting_end": {
|
||||||
"remove_old": True,
|
"mode": "shutdown",
|
||||||
"end_mode": "shutdown",
|
"shutdown": {
|
||||||
"obs_exe": None,
|
"timeout": 30
|
||||||
"obs_core": None,
|
}
|
||||||
"obs_delay": 10,
|
},
|
||||||
"update_check": True,
|
"obs": {
|
||||||
"write_logs": True,
|
"enabled": False,
|
||||||
"log_size": 512
|
"path_bin": None,
|
||||||
|
"path_core": None,
|
||||||
|
"delay": 10,
|
||||||
|
"video": {
|
||||||
|
"send": False,
|
||||||
|
"path": None,
|
||||||
|
"filename": None
|
||||||
|
},
|
||||||
|
"keybinds": {
|
||||||
|
"record_start": "shift+f7",
|
||||||
|
"record_stop": "shift+f8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"telegram": {
|
||||||
|
"enabled": False,
|
||||||
|
"token": None,
|
||||||
|
"user_id": None
|
||||||
|
},
|
||||||
|
"appearance": {
|
||||||
|
"theme": "dark",
|
||||||
|
"colors": True,
|
||||||
|
"fullscreen": False
|
||||||
|
},
|
||||||
|
"rpc": {
|
||||||
|
"enabled": True,
|
||||||
|
"app_id": "800049969960058882"
|
||||||
|
},
|
||||||
|
"sounds": {
|
||||||
|
"enabled": True,
|
||||||
|
"sounds": {
|
||||||
|
"meeting_ended": "ended",
|
||||||
|
"record_start": "recordstart",
|
||||||
|
"record_stop": "recordstop",
|
||||||
|
"shutdown": "shutdown",
|
||||||
|
"meeting_started": "started",
|
||||||
|
"meeting_warning": "warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"binds": {
|
||||||
|
"app_start": {
|
||||||
|
"commands": [],
|
||||||
|
"keymaps": [],
|
||||||
|
"messages": []
|
||||||
|
},
|
||||||
|
"app_end": {
|
||||||
|
"commands": [],
|
||||||
|
"keymaps": [],
|
||||||
|
"messages": []
|
||||||
|
},
|
||||||
|
"queue_start": {
|
||||||
|
"commands": [],
|
||||||
|
"keymaps": [],
|
||||||
|
"messages": []
|
||||||
|
},
|
||||||
|
"queue_end": {
|
||||||
|
"commands": [],
|
||||||
|
"keymaps": [],
|
||||||
|
"messages": []
|
||||||
|
},
|
||||||
|
"meeting_start": {
|
||||||
|
"commands": [],
|
||||||
|
"keymaps": [],
|
||||||
|
"messages": []
|
||||||
|
},
|
||||||
|
"meeting_end": {
|
||||||
|
"commands": [],
|
||||||
|
"keymaps": [],
|
||||||
|
"messages": []
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
# "start": "shift+f7",
|
||||||
|
# "stop": "shift+f8",
|
||||||
|
# "telegram_enabled": False,
|
||||||
|
# "use_colors": True,
|
||||||
|
# "run_fullscreen": False,
|
||||||
|
# "rpc_use": True,
|
||||||
|
# "rpc_id": "800049969960058882",
|
||||||
|
# "sounds": True,
|
||||||
|
# "end_mode": "shutdown",
|
||||||
|
# "obs_exe": None,
|
||||||
|
# "obs_core": None,
|
||||||
|
# "obs_delay": 10,
|
||||||
|
# "write_logs": True,
|
||||||
|
# "log_size": 512,
|
||||||
|
# "sound_ended": "ended",
|
||||||
|
# "sound_recordstart": "recordstart",
|
||||||
|
# "sound_recordstop": "recordstop",
|
||||||
|
# "sound_shutdown": "shutdown",
|
||||||
|
# "sound_started": "started",
|
||||||
|
# "sound_warning": "warning"
|
||||||
|
# "shutdown_timeout": 30,
|
||||||
|
# "shutdown_enabled": False,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Функция возвращающая надпись Windows Only
|
# Функция возвращающая надпись Windows Only
|
||||||
@@ -109,15 +203,15 @@ def checkSize():
|
|||||||
log = os.stat(logs_folder + 'latest.log')
|
log = os.stat(logs_folder + 'latest.log')
|
||||||
|
|
||||||
if (log.st_size / 1024) > getConfig("log_size"):
|
if (log.st_size / 1024) > getConfig("log_size"):
|
||||||
with open(logs_folder + 'latest.log', 'rb') as f_in:
|
with open(logs_folder + 'latest.log', 'rb', encoding='utf-8') as f_in:
|
||||||
with gzip.open(f'{logs_folder}{datetime.now().strftime("%d.%m.%Y_%H:%M:%S")}.zip', 'wb') as f_out:
|
with gzip.open(f'{logs_folder}{datetime.now().strftime("%d.%m.%Y_%H:%M:%S")}.zip', 'wb') as f_out:
|
||||||
shutil.copyfileobj(f_in, f_out)
|
shutil.copyfileobj(f_in, f_out)
|
||||||
|
|
||||||
if getConfig("debug"):
|
if getConfig("debug"):
|
||||||
print(f'Copied {logs_folder}{datetime.now().strftime("%d.%m.%Y_%H:%M:%S")}.zip')
|
print(f'Copied {logs_folder}{datetime.now().strftime("%d.%m.%Y_%H:%M:%S")}.zip')
|
||||||
|
|
||||||
open(logs_folder + 'latest.log', 'w').close()
|
|
||||||
|
|
||||||
|
open(logs_folder + 'latest.log', 'w', encoding='utf-8').close()
|
||||||
|
|
||||||
i = 2
|
i = 2
|
||||||
|
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
@@ -126,13 +220,13 @@ def checkSize():
|
|||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
log = open(logs_folder + 'latest.log', 'a')
|
log = open(logs_folder + 'latest.log', 'a', encoding='utf-8')
|
||||||
open(logs_folder + 'latest.log', 'a').close()
|
open(logs_folder + 'latest.log', 'a', encoding='utf-8').close()
|
||||||
except:
|
except:
|
||||||
try:
|
try:
|
||||||
os.mkdir(logs_folder)
|
os.mkdir(logs_folder)
|
||||||
log = open(logs_folder + 'latest.log', 'a')
|
log = open(logs_folder + 'latest.log', 'a', encoding='utf-8')
|
||||||
open(logs_folder + 'latest.log', 'a').close()
|
open(logs_folder + 'latest.log', 'a', encoding='utf-8').close()
|
||||||
except:
|
except:
|
||||||
if getConfig("debug"):
|
if getConfig("debug"):
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
@@ -151,13 +245,13 @@ def appendLog(message, startup=False, shutdown=False):
|
|||||||
checkSize()
|
checkSize()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
log = open(logs_folder + 'latest.log', 'a')
|
log = open(logs_folder + 'latest.log', 'a', encoding='utf-8')
|
||||||
open(logs_folder + 'latest.log', 'a').close()
|
open(logs_folder + 'latest.log', 'a', encoding='utf-8').close()
|
||||||
except:
|
except:
|
||||||
try:
|
try:
|
||||||
os.mkdir(logs_folder)
|
os.mkdir(logs_folder)
|
||||||
log = open(logs_folder + 'latest.log', 'a')
|
log = open(logs_folder + 'latest.log', 'a', encoding='utf-8')
|
||||||
open(logs_folder + 'latest.log', 'a').close()
|
open(logs_folder + 'latest.log', 'a', encoding='utf-8').close()
|
||||||
except:
|
except:
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
print('Log file could not be created')
|
print('Log file could not be created')
|
||||||
@@ -229,6 +323,23 @@ def strCleaner(string):
|
|||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
# Load json to dict
|
||||||
|
def jsonLoad(filename):
|
||||||
|
"""Loads arg1 as json and returns its contents"""
|
||||||
|
with open(filename, "r", encoding='utf8') as file:
|
||||||
|
output = json.load(file)
|
||||||
|
file.close()
|
||||||
|
return output
|
||||||
|
|
||||||
|
# Save json dict to filename
|
||||||
|
def jsonSave(contents, filename):
|
||||||
|
"""Dumps dict/list arg1 to file arg2"""
|
||||||
|
with open(filename, "w", encoding='utf8') as file:
|
||||||
|
json.dump(contents, file, ensure_ascii=False, indent=4)
|
||||||
|
file.close()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
# Функция добавления переменных, если их нет
|
# Функция добавления переменных, если их нет
|
||||||
def repairConfig(some_dic):
|
def repairConfig(some_dic):
|
||||||
|
|
||||||
@@ -272,7 +383,7 @@ def setConfig(some_var, some_val):
|
|||||||
try:
|
try:
|
||||||
config_list[some_var] = some_val
|
config_list[some_var] = some_val
|
||||||
saveJson(files_folder+'config.json', config_list)
|
saveJson(files_folder+'config.json', config_list)
|
||||||
appendLog(f'Changed variable "{somevar}" to {some_val}')
|
appendLog(f'Changed variable "{some_var}" to {some_val}')
|
||||||
|
|
||||||
except:
|
except:
|
||||||
|
|
||||||
@@ -282,7 +393,7 @@ def setConfig(some_var, some_val):
|
|||||||
json_file.close()
|
json_file.close()
|
||||||
config_list[some_var] = some_val
|
config_list[some_var] = some_val
|
||||||
saveJson(files_folder+'config.json', config_list)
|
saveJson(files_folder+'config.json', config_list)
|
||||||
appendLog(f'Changed variable "{somevar}" to {some_val}')
|
appendLog(f'Changed variable "{some_var}" to {some_val}')
|
||||||
|
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
@@ -319,12 +430,12 @@ def setConfig(some_var, some_val):
|
|||||||
json_file.close()
|
json_file.close()
|
||||||
config_list[some_var] = some_val
|
config_list[some_var] = some_val
|
||||||
saveJson(files_folder+'config.json', config_list)
|
saveJson(files_folder+'config.json', config_list)
|
||||||
appendLog(f'Changed variable "{somevar}" to {some_val}')
|
appendLog(f'Changed variable "{some_var}" to {some_val}')
|
||||||
|
|
||||||
except:
|
except:
|
||||||
config_list[some_var] = some_val
|
config_list[some_var] = some_val
|
||||||
saveJson(files_folder+'config.json', config_list)
|
saveJson(files_folder+'config.json', config_list)
|
||||||
appendLog(f'Changed variable "{somevar}" to {some_val}')
|
appendLog(f'Changed variable "{some_var}" to {some_val}')
|
||||||
|
|
||||||
except:
|
except:
|
||||||
return "Error"
|
return "Error"
|
||||||
@@ -426,4 +537,68 @@ def getState(process="CptHost.exe"):
|
|||||||
def saveJson(filename, value):
|
def saveJson(filename, value):
|
||||||
with open(filename, 'w', encoding="utf-8") as f:
|
with open(filename, 'w', encoding="utf-8") as f:
|
||||||
json.dump(value, f, indent=4, ensure_ascii=False)
|
json.dump(value, f, indent=4, ensure_ascii=False)
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
|
# Fire some function
|
||||||
|
_loop = None
|
||||||
|
def fire_and_forget(coro):
|
||||||
|
global _loop
|
||||||
|
if _loop is None:
|
||||||
|
_loop = asyncio.new_event_loop()
|
||||||
|
threading.Thread(target=_loop.run_forever, daemon=True).start()
|
||||||
|
_loop.call_soon_threadsafe(asyncio.create_task, coro)
|
||||||
|
|
||||||
|
|
||||||
|
def configSet(key: str, value, *args: str):
|
||||||
|
"""Set key to a value
|
||||||
|
|
||||||
|
Args:
|
||||||
|
* key (str): The last key of the keys path.
|
||||||
|
* value (str/int/float/list/dict/None): Some needed value.
|
||||||
|
* *args (str): Path to key like: dict[args][key].
|
||||||
|
"""
|
||||||
|
this_dict = jsonLoad(f"{files_folder}config.json")
|
||||||
|
string = "this_dict"
|
||||||
|
|
||||||
|
for arg in args:
|
||||||
|
string += f'["{arg}"]'
|
||||||
|
|
||||||
|
if type(value) in [str]:
|
||||||
|
string += f'["{key}"] = "{value}"'
|
||||||
|
else:
|
||||||
|
string += f'["{key}"] = {value}'
|
||||||
|
|
||||||
|
exec(string)
|
||||||
|
jsonSave(this_dict, f"{files_folder}config.json")
|
||||||
|
return
|
||||||
|
|
||||||
|
def configGet(key: str, *args: str):
|
||||||
|
"""Get value of the config key
|
||||||
|
|
||||||
|
Args:
|
||||||
|
* key (str): The last key of the keys path.
|
||||||
|
* *args (str): Path to key like: dict[args][key].
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
* any: Value of provided key
|
||||||
|
"""
|
||||||
|
this_dict = jsonLoad(f"{files_folder}config.json")
|
||||||
|
this_key = this_dict
|
||||||
|
for dict_key in args:
|
||||||
|
this_key = this_key[dict_key]
|
||||||
|
return this_key[key]
|
||||||
|
|
||||||
|
async def execBind(action: str, kind="command"):
|
||||||
|
"""Execute binded action
|
||||||
|
|
||||||
|
Args:
|
||||||
|
* action (str): Bind, command or message.
|
||||||
|
* kind (str, optional): "keybind", "command" or "message". Defaults to "command".
|
||||||
|
"""
|
||||||
|
if kind == "message":
|
||||||
|
telegramSendText(message=action)
|
||||||
|
elif kind == "keybind":
|
||||||
|
keyboard.press_and_release(action)
|
||||||
|
else:
|
||||||
|
os.system(action)
|
||||||
|
return
|
23
modules/install.py
Normal file
23
modules/install.py
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import os
|
||||||
|
from modules.functions import getOS, appendLog
|
||||||
|
|
||||||
|
libs = ["keyboard", "ast", "inputimeout", "telegram_send", "wget", "requests", "zipfile", "asyncio", "getpass", "pypresence"]
|
||||||
|
|
||||||
|
if getOS() == "windows":
|
||||||
|
libs.append("easygui")
|
||||||
|
libs.append("tkinter")
|
||||||
|
libs.append("swinlnk")
|
||||||
|
|
||||||
|
if getOS() != "android":
|
||||||
|
libs.append("playsound")
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
if not "play-audio" in os.popen('pkg list-all').read():
|
||||||
|
os.system('pkg install play-audio')
|
||||||
|
except:
|
||||||
|
appendLog("Could not install play-audio")
|
||||||
|
|
||||||
|
with open('requirements.txt', 'w', encoding='utf-8') as f:
|
||||||
|
f.writelines('\n'.join(libs))
|
145
modules/rpc.py
Normal file
145
modules/rpc.py
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import time
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from modules.colors import *
|
||||||
|
from modules.functions import *
|
||||||
|
|
||||||
|
version = '2.7'
|
||||||
|
|
||||||
|
from pypresence import Presence
|
||||||
|
|
||||||
|
client_id = getConfig("rpc_id")
|
||||||
|
|
||||||
|
try:
|
||||||
|
RPC = Presence(client_id,pipe=0)
|
||||||
|
except Exception as exp:
|
||||||
|
appendLog(f'Discord RPC failed to initialize 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)
|
||||||
|
|
||||||
|
connected = False
|
||||||
|
|
||||||
|
rpc_dict = {
|
||||||
|
"large_image": "1024_cover",
|
||||||
|
"small_image": {
|
||||||
|
"waiting": "status_waiting",
|
||||||
|
"meeting": "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("rpc_use") and getOS != "android":
|
||||||
|
try:
|
||||||
|
RPC.connect()
|
||||||
|
connected = True
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
connected = False
|
||||||
|
|
||||||
|
def disconnect():
|
||||||
|
global connected
|
||||||
|
|
||||||
|
if getConfig("rpc_use") and getOS != "android":
|
||||||
|
try:
|
||||||
|
RPC.close()
|
||||||
|
connected = False
|
||||||
|
appendLog('Discord RPC disconnected')
|
||||||
|
except:
|
||||||
|
appendLog('Discord RPC failed to disconnect')
|
||||||
|
|
||||||
|
def connect():
|
||||||
|
global connected
|
||||||
|
|
||||||
|
try:
|
||||||
|
RPC.connect()
|
||||||
|
connected = True
|
||||||
|
appendLog('Discord RPC connected')
|
||||||
|
except:
|
||||||
|
appendLog('Discord RPC failed to connect')
|
||||||
|
|
||||||
|
def reset():
|
||||||
|
if getConfig("rpc_use") and getOS != "android":
|
||||||
|
RPC.clear()
|
||||||
|
appendLog('Discord RPC status cleared')
|
||||||
|
|
||||||
|
|
||||||
|
def changePresence(sml_img, sml_txt, stt, dtls, start=None, end=None):
|
||||||
|
try:
|
||||||
|
if getConfig("rpc_use") and getOS != "android":
|
||||||
|
if connected == False:
|
||||||
|
connect()
|
||||||
|
RPC.update(
|
||||||
|
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:
|
||||||
|
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)
|
||||||
|
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 waitLesson(meeting, start):
|
||||||
|
changePresence("waiting", "Ожидание", f"Ждём начала «{meeting}»", "Конференция не началась", start=start)
|
||||||
|
|
||||||
|
def onLesson(meeting, start):
|
||||||
|
changePresence("meeting", "Конференция", f"Слушаем «{meeting}»", "Идёт конференция", start=start)
|
||||||
|
|
||||||
|
def inMenu():
|
||||||
|
changePresence("menu", "Главное меню", "Открыт список опций", "В главном меню")
|
||||||
|
|
||||||
|
def shutdown(end):
|
||||||
|
changePresence("shutdown", "Выключение", "Отсчёт до авто-выключения", "Выключение ПК", end=end)
|
||||||
|
|
||||||
|
def sleepmode(end):
|
||||||
|
changePresence("shutdown", "Спящий режим", "Отсчёт до авто-засыпания", "Спящий режим ПК", end=end)
|
||||||
|
|
||||||
|
def inSettings():
|
||||||
|
changePresence("settings", "Настройки", "Открыты настройки", "В главном меню")
|
||||||
|
|
||||||
|
def inDebug():
|
||||||
|
changePresence("debug", "Отладка", "Открыто меню отладки", "В меню разработчика")
|
||||||
|
|
||||||
|
def inEditor():
|
||||||
|
changePresence("editor", "Редактор", "Открыт редактор", "В главном меню")
|
||||||
|
|
||||||
|
def inUpdater():
|
||||||
|
changePresence("updating", "Обновление", "Открыт центр обновлений", "В главном меню")
|
||||||
|
|
||||||
|
def inHelp():
|
||||||
|
changePresence("support", "Помощь", "Открыта помощь", "В главном меню")
|
||||||
|
|
||||||
|
def lessonEnded():
|
||||||
|
changePresence("waiting", "Ожидание", "Ждём указаний", "Все конференции закончились")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
changePresence("settings", "Отладка", "Модуль Discord RPC запущен в режиме тестирования", "Режим отладки")
|
@@ -1,12 +1,12 @@
|
|||||||
import rpc
|
import modules.rpc as rpc
|
||||||
import pathlib
|
import pathlib
|
||||||
import shutil
|
import shutil
|
||||||
from functions import *
|
import telegram_send
|
||||||
#from daemon import
|
from modules.functions import *
|
||||||
|
|
||||||
|
|
||||||
if getConfig("use_colors"):
|
if getConfig("use_colors"):
|
||||||
from colors import *
|
from modules.colors import *
|
||||||
appendLog('Colors imported')
|
appendLog('Colors imported')
|
||||||
else:
|
else:
|
||||||
RESET = ''
|
RESET = ''
|
||||||
@@ -152,6 +152,7 @@ def settings():
|
|||||||
if obs_choice.lower() in yes_list:
|
if obs_choice.lower() in yes_list:
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
|
import easygui
|
||||||
filename = easygui.fileopenbox('Выберите путь до obs32.exe или obs64.exe')
|
filename = easygui.fileopenbox('Выберите путь до obs32.exe или obs64.exe')
|
||||||
if filename.find("obs64.exe") != -1:
|
if filename.find("obs64.exe") != -1:
|
||||||
setConfig("obs_exe", filename)
|
setConfig("obs_exe", filename)
|
||||||
@@ -174,6 +175,11 @@ def settings():
|
|||||||
else:
|
else:
|
||||||
easygui.msgbox("Неверный путь")
|
easygui.msgbox("Неверный путь")
|
||||||
break
|
break
|
||||||
|
except NameError:
|
||||||
|
appendLog(f'Module "easygui" is not imported')
|
||||||
|
none = input('Модуль "easygui" не импортирован.\n\n > ')
|
||||||
|
clear()
|
||||||
|
break
|
||||||
except Exception as exp:
|
except Exception as exp:
|
||||||
appendLog(f'Could not select OBS path: {exp}')
|
appendLog(f'Could not select OBS path: {exp}')
|
||||||
none = input('Вы не выбрали верный путь для OBS.\n\n > ')
|
none = input('Вы не выбрали верный путь для OBS.\n\n > ')
|
||||||
@@ -298,9 +304,9 @@ def settings2():
|
|||||||
print(f'{RESET}Нужно использовать целое число.')
|
print(f'{RESET}Нужно использовать целое число.')
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
elif settings_choose == '2':
|
elif settings_choose == '2':
|
||||||
|
|
||||||
if sysname == 'windows':
|
if sysname == 'windows':
|
||||||
@@ -317,10 +323,10 @@ def settings2():
|
|||||||
print(f'{RESET}Нужно использовать комбинацию клавиш в виде текста.')
|
print(f'{RESET}Нужно использовать комбинацию клавиш в виде текста.')
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
clear()
|
clear()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
elif settings_choose == '3':
|
elif settings_choose == '3':
|
||||||
|
|
||||||
if sysname == 'windows':
|
if sysname == 'windows':
|
||||||
@@ -337,18 +343,18 @@ def settings2():
|
|||||||
print(f'{RESET}Нужно использовать комбинацию клавиш в виде текста.')
|
print(f'{RESET}Нужно использовать комбинацию клавиш в виде текста.')
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
clear()
|
clear()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
elif settings_choose == '4':
|
elif settings_choose == '4':
|
||||||
|
|
||||||
setConfig("telegram_enabled", not getConfig("telegram_enabled"))
|
setConfig("telegram_enabled", not getConfig("telegram_enabled"))
|
||||||
appendLog(f'Changed option "telegram_enabled" to {getConfig("telegram_enabled")}')
|
appendLog(f'Changed option "telegram_enabled" to {getConfig("telegram_enabled")}')
|
||||||
|
|
||||||
clear()
|
clear()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
elif settings_choose == '5':
|
elif settings_choose == '5':
|
||||||
|
|
||||||
clear()
|
clear()
|
||||||
@@ -367,30 +373,30 @@ def settings2():
|
|||||||
except:
|
except:
|
||||||
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()
|
||||||
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
elif settings_choose == '6':
|
elif settings_choose == '6':
|
||||||
setConfig("update_check", not getConfig("update_check"))
|
setConfig("update_check", not getConfig("update_check"))
|
||||||
appendLog(f'Changed option "update_check" to {getConfig("update_check")}')
|
appendLog(f'Changed option "update_check" to {getConfig("update_check")}')
|
||||||
|
|
||||||
clear()
|
clear()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
elif settings_choose == '7':
|
elif settings_choose == '7':
|
||||||
appendLog('Going to settings page 3')
|
appendLog('Going to settings page 3')
|
||||||
clear()
|
clear()
|
||||||
settings3()
|
settings3()
|
||||||
|
|
||||||
elif settings_choose == '8':
|
elif settings_choose == '8':
|
||||||
appendLog('Returned to settings page 1')
|
appendLog('Returned to settings page 1')
|
||||||
clear()
|
clear()
|
||||||
return
|
return
|
||||||
|
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
rpc.inMenu()
|
rpc.inMenu()
|
||||||
clear()
|
clear()
|
||||||
@@ -405,21 +411,21 @@ def settings3():
|
|||||||
|
|
||||||
setTitle("AutoZoom (Настройки)", sysname)
|
setTitle("AutoZoom (Настройки)", sysname)
|
||||||
clear()
|
clear()
|
||||||
|
|
||||||
if getConfig("write_logs"):
|
if getConfig("write_logs"):
|
||||||
logs_val = f'{BGREEN}Вкл.{RESET}'
|
logs_val = f'{BGREEN}Вкл.{RESET}'
|
||||||
elif not getConfig("write_logs"):
|
elif not getConfig("write_logs"):
|
||||||
logs_val = f'{BRED}Выкл.{RESET}'
|
logs_val = f'{BRED}Выкл.{RESET}'
|
||||||
else:
|
else:
|
||||||
logs_val = f'{BRED}ERROR{RESET}'
|
logs_val = f'{BRED}ERROR{RESET}'
|
||||||
|
|
||||||
if getConfig("remove_old"):
|
if getConfig("remove_old"):
|
||||||
remove_val = f'{BGREEN}Вкл.{RESET}'
|
remove_val = f'{BGREEN}Вкл.{RESET}'
|
||||||
elif not getConfig("remove_old"):
|
elif not getConfig("remove_old"):
|
||||||
remove_val = f'{BRED}Выкл.{RESET}'
|
remove_val = f'{BRED}Выкл.{RESET}'
|
||||||
else:
|
else:
|
||||||
remove_val = f'{BRED}ERROR{RESET}'
|
remove_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")
|
||||||
@@ -440,11 +446,14 @@ def settings3():
|
|||||||
|
|
||||||
print(f' {BRED}5.{RESET} Удалять старые конференции ({remove_val})')
|
print(f' {BRED}5.{RESET} Удалять старые конференции ({remove_val})')
|
||||||
print(f' {BBLACK}Автоматически удалять одноразовые конференции которые были до дня запуска\n')
|
print(f' {BBLACK}Автоматически удалять одноразовые конференции которые были до дня запуска\n')
|
||||||
|
|
||||||
|
print(f' {BRED}6.{RESET} Кастомизация звуков и RPC')
|
||||||
|
print(f' {BBLACK}Изменить звуковые файлы и APPLICATION ID используемого Discord RPC\n')
|
||||||
|
|
||||||
print(f' {BRED}6.{RESET} Сбросить все настройки')
|
print(f' {BRED}7.{RESET} Сбросить все настройки')
|
||||||
print(f' {BBLACK}Восстановить настройки по умолчанию\n')
|
print(f' {BBLACK}Восстановить настройки по умолчанию\n')
|
||||||
|
|
||||||
print(f' {BRED}7.{RESET} Назад')
|
print(f' {BRED}8.{RESET} Назад')
|
||||||
print(f' {BBLACK}Вернуться на предыдущую страницу{RESET}\n')
|
print(f' {BBLACK}Вернуться на предыдущую страницу{RESET}\n')
|
||||||
|
|
||||||
print(f' {BBLACK}Для переключения параметров Вкл/Выкл просто введите номер{RESET}') #\n Если окно приложения слишком мелкое - увеличьте его или листайте это меню{RESET}')
|
print(f' {BBLACK}Для переключения параметров Вкл/Выкл просто введите номер{RESET}') #\n Если окно приложения слишком мелкое - увеличьте его или листайте это меню{RESET}')
|
||||||
@@ -466,7 +475,7 @@ def settings3():
|
|||||||
print(f'{RESET}Нужно использовать целое число.')
|
print(f'{RESET}Нужно использовать целое число.')
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
appendLog(f'Changed option "log_size" to {getConfig["log_size"]}')
|
appendLog(f'Changed option "log_size" to {getConfig["log_size"]}')
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -482,7 +491,7 @@ def settings3():
|
|||||||
print(f'{RESET}Нужно использовать целое число.')
|
print(f'{RESET}Нужно использовать целое число.')
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
appendLog(f'Changed option "obs_delay" to {getConfig["obs_delay"]}')
|
appendLog(f'Changed option "obs_delay" to {getConfig["obs_delay"]}')
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -516,17 +525,22 @@ def settings3():
|
|||||||
none = input(f'Не удалось добавить в автозапуск:\n{BRED}{exp}{RESET}\n\n > ')
|
none = input(f'Не удалось добавить в автозапуск:\n{BRED}{exp}{RESET}\n\n > ')
|
||||||
appendLog(f'Could not add autorun: {exp}')
|
appendLog(f'Could not add autorun: {exp}')
|
||||||
continue
|
continue
|
||||||
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
elif settings_choose == '5':
|
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 == '6':
|
elif settings_choose == '6':
|
||||||
|
appendLog('Going to customize page')
|
||||||
|
clear()
|
||||||
|
#customize()
|
||||||
|
|
||||||
|
elif settings_choose == '7':
|
||||||
appendLog('Resetting configuration')
|
appendLog('Resetting configuration')
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
@@ -535,7 +549,7 @@ def settings3():
|
|||||||
|
|
||||||
if reset_decision.lower() in yes_list:
|
if reset_decision.lower() in yes_list:
|
||||||
|
|
||||||
from functions import default_config
|
from modules.functions import default_config
|
||||||
|
|
||||||
saveJson(files_folder+'config.json', default_config)
|
saveJson(files_folder+'config.json', default_config)
|
||||||
appendLog('Configuration dropped to default')
|
appendLog('Configuration dropped to default')
|
||||||
@@ -554,17 +568,17 @@ def settings3():
|
|||||||
else:
|
else:
|
||||||
clear()
|
clear()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
clear()
|
clear()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
elif settings_choose == '7':
|
elif settings_choose == '8':
|
||||||
appendLog('Returned to settings page 2')
|
appendLog('Returned to settings page 2')
|
||||||
clear()
|
clear()
|
||||||
return
|
return
|
||||||
|
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
rpc.inMenu()
|
rpc.inMenu()
|
||||||
clear()
|
clear()
|
27
modules/telegram.py
Normal file
27
modules/telegram.py
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import time
|
||||||
|
import requests
|
||||||
|
|
||||||
|
from modules.functions import configGet, configSet
|
||||||
|
|
||||||
|
def telegramSendText(message, force=False, token=configGet("token", "telegram")):
|
||||||
|
if configGet("enabled", "telegram") or force:
|
||||||
|
try:
|
||||||
|
requests.post(f'https://api.telegram.org/bot{token}/sendMessage?chat_id={configGet("user_id", "telegram")}&text={message}&parse_mode=markdown')
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def telegramLink(token):
|
||||||
|
try:
|
||||||
|
code =
|
||||||
|
while True:
|
||||||
|
answer = requests.post(f"https://api.telegram.org/bot{token}/getUpdates").json()
|
||||||
|
for entry in answer["result"]:
|
||||||
|
if "message" in entry:
|
||||||
|
if str(code) in entry["message"]["text"]:
|
||||||
|
telegramSendText("Бот успешно привязан к AutoZoom!", force=True, token=token)
|
||||||
|
configSet("user_id", entry["message"]["from"]["id"], "telegram")
|
||||||
|
print(f"Бот успешно привязан к аккаунту {entry['message']['from']['first_name']}!")
|
||||||
|
return {"success": True, "user_id": entry["message"]["from"]["id"]}
|
||||||
|
time.sleep(1)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
return {"success": False, "user_id": None}
|
302
rpc.py
302
rpc.py
@@ -1,302 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
import time
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
from colors import *
|
|
||||||
from functions import *
|
|
||||||
|
|
||||||
version = '2.4'
|
|
||||||
|
|
||||||
import libinstaller
|
|
||||||
from pypresence import Presence
|
|
||||||
|
|
||||||
client_id = '800049969960058882'
|
|
||||||
|
|
||||||
RPC = Presence(client_id,pipe=0)
|
|
||||||
|
|
||||||
connected = False
|
|
||||||
|
|
||||||
if getConfig("use_rpc") and getOS != "android":
|
|
||||||
try:
|
|
||||||
RPC.connect()
|
|
||||||
connected = True
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
connected = False
|
|
||||||
|
|
||||||
def disconnect():
|
|
||||||
global connected
|
|
||||||
|
|
||||||
if getConfig("use_rpc") and getOS != "android":
|
|
||||||
try:
|
|
||||||
RPC.close()
|
|
||||||
connected = False
|
|
||||||
appendLog('Discord RPC disconnected')
|
|
||||||
except:
|
|
||||||
appendLog('Discord RPC failed to disconnect')
|
|
||||||
|
|
||||||
def connect():
|
|
||||||
global connected
|
|
||||||
|
|
||||||
try:
|
|
||||||
RPC.connect()
|
|
||||||
connected = True
|
|
||||||
appendLog('Discord RPC connected')
|
|
||||||
except:
|
|
||||||
appendLog('Discord RPC failed to connect')
|
|
||||||
|
|
||||||
def reset():
|
|
||||||
if getConfig("use_rpc") and getOS != "android":
|
|
||||||
RPC.clear()
|
|
||||||
appendLog('Discord RPC status cleared')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def waitLesson(lesson, start):
|
|
||||||
try:
|
|
||||||
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'Ждём начала «{lesson}»', details='Конференция не началась', start=start)
|
|
||||||
appendLog(f'Discord RPC changed to waitLesson (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)
|
|
||||||
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:
|
|
||||||
if getConfig("use_rpc") and getOS != "android":
|
|
||||||
if connected == False:
|
|
||||||
connect()
|
|
||||||
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)
|
|
||||||
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)
|
|
||||||
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 inMenu():
|
|
||||||
try:
|
|
||||||
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)
|
|
||||||
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 shutdown(end):
|
|
||||||
try:
|
|
||||||
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)
|
|
||||||
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 inSettings():
|
|
||||||
try:
|
|
||||||
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)
|
|
||||||
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 inDebug():
|
|
||||||
try:
|
|
||||||
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)
|
|
||||||
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 inEditor():
|
|
||||||
try:
|
|
||||||
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)
|
|
||||||
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 inUpdater():
|
|
||||||
try:
|
|
||||||
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)
|
|
||||||
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 inHelp():
|
|
||||||
try:
|
|
||||||
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)
|
|
||||||
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 lessonEnded():
|
|
||||||
try:
|
|
||||||
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)
|
|
||||||
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)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
try:
|
|
||||||
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)
|
|
||||||
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)
|
|
@@ -1,3 +1,3 @@
|
|||||||
echo AutoZoom needs Python 3 to work. Please read README.md!
|
echo AutoZoom needs Python 3 to work. Please read README.md!
|
||||||
python main.py
|
python3 main.py
|
||||||
pause
|
pause
|
2
start.sh
2
start.sh
@@ -1,4 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
echo "AutoZoom needs Python 3 to work. Please read README.md!"
|
echo "AutoZoom needs Python 3 to work. Please read README.md!"
|
||||||
python3 main.py
|
python3 main.py
|
10
themes/dark.json
Normal file
10
themes/dark.json
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"windows": {
|
||||||
|
"foreground": "7",
|
||||||
|
"background": "0"
|
||||||
|
},
|
||||||
|
"linux": {
|
||||||
|
"foreground": "white",
|
||||||
|
"background": "black"
|
||||||
|
}
|
||||||
|
}
|
10
themes/light.json
Normal file
10
themes/light.json
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"windows": {
|
||||||
|
"foreground": "0",
|
||||||
|
"background": "f"
|
||||||
|
},
|
||||||
|
"linux": {
|
||||||
|
"foreground": "black",
|
||||||
|
"background": "white"
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user