#!/usr/bin/python from updater import UThread from license import LThread from checker import CThread from cleaner import NThread from telegrambot import TGThread from webserver import WSThread from time import sleep from macros import * from colors import * from threading import Event import config, sys, os, asyncio INFO('╔' + '═'*(len(config.APPNAME) + len(config.VERSION) + 3) + '╗') INFO(f"║ {CYAN}{BOLD}{config.APPNAME}{RESET} {config.VERSION} ║") INFO('╚' + '═'*(len(config.APPNAME) + len(config.VERSION) + 3) + '╝') if CONF.get('debug'): INFO('DEBUG TEST START ' + '*' * 20) DEBUG(f"{RESET}{BLACK}*{RED}*{GREEN}*{YELLOW}*{BLUE}*{MAGENTA}*{CYAN}*{WHITE}*") DEBUG(f"{RESET}{BOLD}{BLACK}*{RED}*{GREEN}*{YELLOW}*{BLUE}*{MAGENTA}*{CYAN}*{WHITE}*") DEBUG(f"{RESET}{BGBLACK}*{BGRED}*{BGGREEN}*{BGYELLOW}*{BGBLUE}*{BGMAGENTA}*{BGCYAN}*{BGWHITE}*") INFO('Test message') DEBUG('Test message') SUCC('Test message') WARN('Test message') ERR('Test message') CRIT('Test message') INFO('DEBUG TEST END ' + '*' * 22 + RESET) eupdate = Event() estop = Event() lt = LThread(eupdate) lt.daemon = True lt.start() wt = WSThread(eupdate) wt.daemon = True wt.start() ct = CThread(eupdate) ct.daemon = True ct.start() nt = NThread(eupdate) nt.daemon = True nt.start() tt = TGThread(eupdate, estop) tt.daemon = True tt.start() ut = UThread() ut.daemon = True ut.start() updated = False try: while 1: if lt.is_alive() and wt.is_alive() and ct.is_alive() and tt.is_alive() and ut.is_alive() and nt.is_alive(): sleep(1) elif lt.is_alive() and wt.is_alive() and ct.is_alive() and tt.is_alive() and nt.is_alive(): eupdate.set() if lt.is_alive(): lt.join() if wt.is_alive(): wt.join() if ct.is_alive(): ct.join() if nt.is_alive(): nt.join() if tt.is_alive(): tt.join() updated = True SUCC('Program updated, reboot!') break else: estop.set() sleep(1) CRIT('Program broken.') os._exit(3) except KeyboardInterrupt: sys.stdout.flush() print('\r', end='') estop.set() sleep(1) CRIT('STOP') except Exception as e: CRIT(str(e)) estop.set() sleep(1) os._exit(1) if updated: os.execl(sys.argv[0], *sys.argv)