From f57b2cbd0f446756d0d4fc7fe05c7673b7e92190 Mon Sep 17 00:00:00 2001 From: Remy Moll Date: Sat, 15 Aug 2020 18:01:42 +0200 Subject: [PATCH] even better --- .gitignore | 3 ++ api/telegram.py | 3 +- main.py | 2 +- persistence/permanent_vars.json | 1 - persistence/persistent_init.json | 1 + persistence/rw.py | 60 +++++++++++++++----------------- 6 files changed, 34 insertions(+), 36 deletions(-) delete mode 100644 persistence/permanent_vars.json create mode 100644 persistence/persistent_init.json diff --git a/.gitignore b/.gitignore index 2ac4c8b..559e0a0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Persistence +persistent_vars.json + # API-Key (keep secret at all times) keys.py diff --git a/api/telegram.py b/api/telegram.py index 999c129..cb8b24b 100644 --- a/api/telegram.py +++ b/api/telegram.py @@ -40,8 +40,7 @@ class TelegramIO(): def handle_result(self, result): """Inspects the message and reacts accordingly. Can easily be extended""" for message_data in result: - message_read = self.persistence.read("messages_read") - self.persistence.write("messages_read", message_read + 1) + self.persistence.increment("messages_read") self.offset = message_data["update_id"] + 1 message = message_data["message"] self.message_id = message["message_id"] diff --git a/main.py b/main.py index c29e6a9..6181282 100644 --- a/main.py +++ b/main.py @@ -22,7 +22,7 @@ class ChatBot(): self.name = name # Persistent variable - self.persistence = pvars.Variables("persistence/permanent_vars.json") + self.persistence = pvars.Variables("persistence/persistent_vars.json", "persistence/persistent_init.json") # Uptime counter self.start_time = datetime.datetime.now() self.persistence.increment("reboots") diff --git a/persistence/permanent_vars.json b/persistence/permanent_vars.json deleted file mode 100644 index a678511..0000000 --- a/persistence/permanent_vars.json +++ /dev/null @@ -1 +0,0 @@ -{"messages_read": 66, "messages_sent": 41, "commands_executed": 31, "photos_sent": 6, "log": [], "chat_members": {"364520272": "Remy Moll"}, "reboots": 57} \ No newline at end of file diff --git a/persistence/persistent_init.json b/persistence/persistent_init.json new file mode 100644 index 0000000..78fa431 --- /dev/null +++ b/persistence/persistent_init.json @@ -0,0 +1 @@ +{"messages_read": 0, "messages_sent": 0, "commands_executed": 0, "photos_sent": 0, "log": [], "chat_members": {}, "reboots": 0} diff --git a/persistence/rw.py b/persistence/rw.py index 5d42577..888913c 100644 --- a/persistence/rw.py +++ b/persistence/rw.py @@ -1,21 +1,19 @@ import json import time - +import os class Variables(): """""" - def __init__(self,savefile_path): + def __init__(self,savefile_path, init_path): self.path = savefile_path + self.init_path = init_path self.last_action = "" # last performed action, if only reads are made, then the underlying var has not been changed # and doesn't need to be read again self.savefile = {} def write(self, name, value): - if self.last_action == "read": - pre = self.savefile - else: - pre = self.read() + pre = self.read() pre[name] = value try: file = open(self.path,"w") @@ -25,35 +23,33 @@ class Variables(): except: print("Config not written - critical") + def read(self, name=""): if self.last_action == "read": - vars = self.savefile - else: - try: - file = open(self.path,"r") - vars = json.load(file) - file.close() - self.savefile = vars - self.last_action = "read" - except: - return None - - if len(name) != 0: - vars = vars[name] - - return vars - - def increment(self, name=""): - if self.last_action == "read": - pre = self.savefile - else: - pre = self.read() + if name == "": + return self.savefile + else: + return self.savefile[name] try: - pre[name] += 1 - file = open(self.path,"w") - json.dump(pre, file) + if os.path.exists(self.path): + file_path = self.path + else: + file_path = self.init_path + file = open(file_path,"r") + vars = json.load(file) file.close() - self.last_action = "write" + self.savefile = vars + self.last_action = "read" except: - print("Config not written - critical") + return None + + if name != "": + vars = vars[name] + return vars + + + def increment(self, name=""): + pre = self.read(name) + plus1 = pre + 1 + self.write(name, plus1)