diff --git a/.gitignore b/.gitignore index ac870d4..754534b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ credentials/ stream_sources/chyron.txt stream_sources/brb.txt *.log +timers/ diff --git a/channel_rewards/implemented/ChannelReward_Hydration.py b/channel_rewards/implemented/ChannelReward_Hydration.py index 9d932b3..3253b09 100644 --- a/channel_rewards/implemented/ChannelReward_Hydration.py +++ b/channel_rewards/implemented/ChannelReward_Hydration.py @@ -26,17 +26,27 @@ class ChannelReward_Hydration(AbstractChannelRewards, metaclass=ABCMeta): #print("sending:",user, 16, "!lights hydration") try: - if self.is_ChannelReward_enabled: - thread_ = threading.Thread(target=self.send_Lights_Command, args=(user, 16, "!lights hydration", "")) - thread_.daemon = True - self.threads.append(thread_) - thread_.start() - if self.is_ChannelReward_enabled: - prompt_ = self.get_Phrase(rewardPrompt) - thread_ = threading.Thread(target=self.send_TTS, args=(user, prompt_)) - thread_.daemon = True - self.threads.append(thread_) - thread_.start() + try: + if self.is_ChannelReward_enabled: + thread_ = threading.Thread(target=self.send_Lights_Command, args=(user, 16, "!lights hydration", "")) + thread_.daemon = True + self.threads.append(thread_) + thread_.start() + except: + if self.is_ChannelReward_enabled: + thread_ = threading.Thread(target=self.send_TTS, args=("", "Silly Nerd Fix The Lights Module")) + thread_.daemon = True + self.threads.append(thread_) + thread_.start() + try: + if self.is_ChannelReward_enabled: + prompt_ = self.get_Phrase(rewardPrompt) + thread_ = threading.Thread(target=self.send_TTS, args=(user, prompt_)) + thread_.daemon = True + self.threads.append(thread_) + thread_.start() + except: + pass except: pass diff --git a/standalone_webSource.py b/standalone_webSource.py index 13f17b4..31fcf2d 100644 --- a/standalone_webSource.py +++ b/standalone_webSource.py @@ -16,7 +16,13 @@ from cooldowns import Cooldown_Module import utilities_script as utility import chyron_module +import timers_module +import os +import praxis_logging +praxis_logger_obj = praxis_logging.praxis_logger() +praxis_logger_obj.init(os.path.basename(__file__)) +praxis_logger_obj.log("\n -Starting Logs: " + os.path.basename(__file__)) api:Flask = Flask(__name__) api.config["DEBUG"] = True @@ -40,12 +46,20 @@ def textSource_tempText(file_name): tempModule = tempText_Module.tempText_Module() return tempModule.getTempTextFile(file_name) -@api.route('/timer//') -def textSource_timers(timer_name): - #print("trying file: ", filename) - #tempModule = tempText_Module.tempText_Module() - #tempModule.getTempTextFile(filename) - return "Coming Soon" +@api.route('/timer/status//') +def textSource_timerStatus(timer_name): + tempModule = timers_module.Timers_Module() + result = tempModule.checkTimerStatus_fromFiles(timer_name) + returnString = "Timer %s is %s" % (timer_name, result) + return returnString + +@api.route('/timer/time//') +def textSource_timerTime(timer_name): + tempModule = timers_module.Timers_Module() + result = tempModule.checkTime_fromFiles(timer_name) + if result is None: result = "" + returnString = result + return returnString if __name__ == "__main__": init() diff --git a/timers_module.py b/timers_module.py index 7865f2f..22a2d97 100644 --- a/timers_module.py +++ b/timers_module.py @@ -1,8 +1,13 @@ import os import json +from praxis_logging import praxis_logger import time import datetime import utilities_script as utility +import importlib +import importlib.util +import sys +import inspect class timer(): def __init__(self, @@ -11,39 +16,55 @@ class timer(): endTime = datetime.datetime.now, trigger = "", trigger_exec = "", + timerFormat = "%Y-%m-%d %H:%M:%S.%f", tempTimer = True): self.name = name self.startTime = startTime self.endTime = endTime self.trigger = trigger self.trigger_exec = trigger_exec + self.timerFormat = timerFormat self.tempTimer = tempTimer # If enabled this will cause the Timer to be deleted upon shutdown or startup class Timers_Module(): def __init__(self): super().__init__() - self.timersList = [] + self.timersList = {} def main(self): - self.createTimer("test_timer", seconds=30) + self.createTimer("test_timer", seconds=15) + #self.createTimer("mega_test_timer", hours=20, seconds=10) #self.updateTimersList() + #for t in self.timersList: + #print(t) + + #while True: + #for t in self.timersList: + #print(t) + #print(self.checkTimerStatus_fromFiles("test_timer")) + #print(self.checkTimerStatus_fromFiles("test_timer_2")) + #time.sleep(0.5) + def updateTimersList(self): - self.compile_and_load() - - def compile_and_load(self): dic = {} implementations = self.get_implementations_dir() for dirName, subdirList, fileList in os.walk(implementations): for file in fileList: - name, startTime, endTime, trigger, trigger_exec, tempTimer = self.readFile(file) - newTimer = timer(name, startTime, endTime, trigger, trigger_exec, tempTimer) + print(file) + name, startTime, endTime, trigger, trigger_exec, timerFormat, tempTimer = self.readFile(file) + newTimer = timer( + name, + datetime.datetime.strptime(startTime, timerFormat), + datetime.datetime.strptime(endTime, timerFormat), + trigger, + trigger_exec, + utility.strToBool(tempTimer)) - dic[newTimer.name] = newTimer - self.timersList.append(self.timersList) - break + self.timersList[newTimer.name] = newTimer return dic + def get_base_dir(self) -> str: cwd = os.getcwd() split = os.path.split(cwd) @@ -64,25 +85,67 @@ class Timers_Module(): os.mkdir(path, 0x777) return path - def createTimer(self, name, days=0, hours=0, minutes=0, seconds=0, microseconds=0, trigger="", trigger_exec="", tempTimer=True): + def createTimer(self, name, days=0, hours=0, minutes=0, seconds=0, microseconds=0, trigger="", trigger_exec="", timerFormat='%Y-%m-%d %H:%M:%S.%f', tempTimer=True): startTime = datetime.datetime.now() targetTime = startTime + datetime.timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds, microseconds=microseconds) - newTimer= timer(name, startTime, targetTime, trigger, trigger_exec, tempTimer) + newTimer= timer(name, startTime, targetTime, trigger, trigger_exec, timerFormat, tempTimer) - self.timersList.append(newTimer) + self.timersList[newTimer.name] = newTimer self.makeFile(newTimer) - def checkTimer(self, name): + def checkTimerStatus_fromFiles(self, name): + try: + if name is not None: + name, startTime, endTime, trigger, trigger_exec, timerFormat, tempTimer = self.readFile(name+".json") + if datetime.datetime.strptime(endTime, timerFormat) < datetime.datetime.now(): + #print("do timer thing") + #self.TIMER_EXEC(name, datetime.datetime.strptime(startTime, '%Y-%m-%d %H:%M:%S.%f'), datetime.datetime.strptime(endTime, '%Y-%m-%d %H:%M:%S.%f'), trigger, trigger_exec, utility.strToBool(tempTimer)) + return True + else: + return False + else: + return False + except: + return None - name, startTime, endTime, trigger, trigger_exec, tempTimer = self.readFile(name) - if endTime < datetime.datetime.now(): - print("do timer thing") - self.TIMER_EXEC(name, startTime, endTime, trigger, trigger_exec, tempTimer) + def checkTime_fromFiles(self, name): + try: + name, startTime, endTime, trigger, trigger_exec, timerFormat, tempTimer = self.readFile(name+".json") + if name is not None: + endT = datetime.datetime.strptime(endTime, '%Y-%m-%d %H:%M:%S.%f') + if endT.timestamp() < datetime.datetime.now().timestamp(): + print("do timer thing") + endT = datetime.datetime.strptime(endTime, '%Y-%m-%d %H:%M:%S.%f') + curTime = datetime.datetime.now() + #curTime = datetime.datetime.strptime(curTime, '%Y-%m-%d %H:%M:%S.%f') + result = endT - datetime.timedelta(days=curTime.day, hours=curTime.hour, minutes=curTime.minute, seconds=curTime.second, microseconds=curTime.microsecond) + print(type(result)) + #self.TIMER_EXEC(name, datetime.datetime.strptime(startTime, '%Y-%m-%d %H:%M:%S.%f'), datetime.datetime.strptime(endTime, '%Y-%m-%d %H:%M:%S.%f'), trigger, trigger_exec, utility.strToBool(tempTimer)) + fixedEndTime = datetime.datetime.strftime(result, '%M:%S') + return str("Did a thing") + else: + endT = datetime.datetime.strptime(endTime, '%Y-%m-%d %H:%M:%S.%f') + curTime = str(datetime.datetime.now()) + curTime = datetime.datetime.strptime(curTime, '%Y-%m-%d %H:%M:%S.%f') + result = endT - datetime.timedelta(days=curTime.day, hours=curTime.hour, minutes=curTime.minute, seconds=curTime.second, microseconds=curTime.microsecond) + + fixedEndTime = datetime.datetime.strftime(result, '%M:%S') + #fixedTimeDelta = fixedEndTime - fixedCurTime + #praxis_logger.log(str(timeDelta)) + return str(fixedEndTime) + else: + return None + except: + return None def deleteTimer(self, name): - self.deleteFile(name) + try: + self.deleteFile(name+".json") + except: + print("Deletion Error") + self.timersList.pop(name) def TIMER_EXEC(self, name, startTime, endTime, trigger, trigger_exec, tempTimer): @@ -97,26 +160,27 @@ class Timers_Module(): dir = utility.get_dir("timers") script_dir = os.path.dirname(__file__) #<-- absolute dir the script is in relative_path = timer_obj.name + ".json" - real_file_path = os.path.join(script_dir, relative_path) - with open(real_file_path, 'r+') as cred_r: - data = json.load(timer_obj) - data['name'] = timer_obj.name - data['startTime'] = timer_obj.startTime - data['endTime'] = timer_obj.endTime - data['trigger'] = timer_obj.trigger - data['trigger_exec'] = timer_obj.trigger_exec - data['tempTimer'] = timer_obj.tempTimer + real_file_path = os.path.join(script_dir, dir, relative_path) with open(real_file_path, 'w') as cred_w: - json.dump(data, cred_w, indent=2) + #data = json.load(timer_obj) + dic = {} + dic['name'] = timer_obj.name + dic['startTime'] = str(timer_obj.startTime) + dic['endTime'] = str(timer_obj.endTime) + dic['trigger'] = timer_obj.trigger + dic['trigger_exec'] = timer_obj.trigger_exec + dic['timerFormat'] = timer_obj.timerFormat + dic['tempTimer'] = str(timer_obj.tempTimer) + json.dump(dic, cred_w, indent=2) + def readFile(self, name): dir = utility.get_dir("timers") script_dir = os.path.dirname(__file__) #<-- absolute dir the script is in relative_path = name #+ ".json" - real_file_path = os.path.join(script_dir, relative_path) + real_file_path = os.path.join(script_dir, dir, relative_path) - startTime, endTime, trigger, tempTimer = None with open(real_file_path, 'r') as cred_r: data = json.load(cred_r) name = data['name'] @@ -124,14 +188,15 @@ class Timers_Module(): endTime = data['endTime'] trigger = data['trigger'] trigger_exec = data['trigger_exec'] + timerFormat = data['timerFormat'] tempTimer = data['tempTimer'] - return name, startTime, endTime, trigger, trigger_exec, tempTimer + return name, startTime, endTime, trigger, trigger_exec, timerFormat, tempTimer def deleteFile(self, name): dir = utility.get_dir("timers") script_dir = os.path.dirname(__file__) #<-- absolute dir the script is in relative_path = name #+ ".json" - real_file_path = os.path.join(script_dir, relative_path) + real_file_path = os.path.join(script_dir, dir, relative_path) os.remove(real_file_path) diff --git a/utilities_script.py b/utilities_script.py index 4cfb4d0..b79c4c0 100644 --- a/utilities_script.py +++ b/utilities_script.py @@ -40,6 +40,12 @@ def rescale_value(value, min, max): #print("got ", returnValue) return returnValue +def strToBool(stringToTest): + if stringToTest == "True": + return True + else: + return False + def get_dir(selected_dir): """ Checks for the tts directory, and will create it if it does not exist