From 281cbb0fdba95ffe2d268f156b8ce79394a685ab Mon Sep 17 00:00:00 2001
From: Remy Moll <mollator2@gmail.com>
Date: Thu, 14 May 2020 11:06:14 +0200
Subject: [PATCH] Better

---
 .google-cookie      |  2 +-
 main.py             | 66 ++++++++++++++++++++++++++++++++-------------
 permanent_vars.json |  1 +
 persistence.py      | 30 +++++++++++++++++++++
 4 files changed, 79 insertions(+), 20 deletions(-)
 create mode 100644 permanent_vars.json
 create mode 100644 persistence.py

diff --git a/.google-cookie b/.google-cookie
index 9decb19..8ac7432 100644
--- a/.google-cookie
+++ b/.google-cookie
@@ -1,5 +1,5 @@
 #LWP-Cookies-2.0
-Set-Cookie3: 1P_JAR="2020-05-13-15"; path="/"; domain=".google.com"; path_spec; domain_dot; secure; expires="2020-06-12 15:07:25Z"; version=0
+Set-Cookie3: 1P_JAR="2020-05-14-09"; path="/"; domain=".google.com"; path_spec; domain_dot; secure; expires="2020-06-13 09:04:23Z"; version=0
 Set-Cookie3: NID="204=n_wUpdR_TRFItRjyHxZ36B0EybjpBvLOa2ZsmpYnFPdVyLkmIaHc86rv9Ne06Ky5XEPRNNnsIHNzfmZc0NVnCf3HujqVbmYxN9OocwqASX0dYmH4B8Iy9UdLmvAUUfKC5FB3EkMMi_Q491lUiFSSbznjktAAMgcuHvJ7MBFAC7w"; path="/"; domain=".google.com"; path_spec; domain_dot; expires="2020-11-12 15:07:25Z"; HttpOnly=None; version=0
 Set-Cookie3: CGIC=""; path="/complete/search"; domain=".google.com"; path_spec; domain_dot; expires="2020-11-09 15:07:25Z"; HttpOnly=None; version=0
 Set-Cookie3: CGIC=""; path="/search"; domain=".google.com"; path_spec; domain_dot; expires="2020-11-09 15:07:25Z"; HttpOnly=None; version=0
diff --git a/main.py b/main.py
index 0e8481f..8dafe15 100644
--- a/main.py
+++ b/main.py
@@ -8,6 +8,7 @@ import datetime
 import googlesearch
 import emoji
 
+from persistence import PersistentVars
 
 class ChatBot():
 
@@ -22,18 +23,18 @@ class ChatBot():
         self.version = version
         self.name = name
 
-        # Counters
+        # Persisten variable
+        self.persistence = PersistentVars("permanent_vars.json")
+
+        # Uptime counter
         self.start_time = datetime.datetime.now()
-        self.message_read = 0
-        self.message_sent = 0
-        self.log = []
+        self.persistence.write("reboots", self.persistence.read("reboots")+1)
+
 
         # Dynamic variables for answering
         self.chat_id = ""
         self.offset = 0
 
-        # People in use
-        self.chat_members = {}
 
         # Available commands
         self.commands = {
@@ -46,6 +47,7 @@ class ChatBot():
             "events" : self.bot_print_events,
             "emojify" : self.bot_emojify,
             "wikipedia" : self.bot_show_wikipedia,
+            "bot_do_all" : self.bot_do_all,
         }
 
         self.message_loop()
@@ -78,15 +80,19 @@ class ChatBot():
     def handle_result(self, result):
         """Inspects the message and reacts accordingly. Can easily be extended"""
         for message_data in result:
-            self.message_read += 1
+            message_read = self.persistence.read("message_read")
+            self.persistence.write("message_read", message_read + 1)
             self.offset = message_data["update_id"] + 1
             message = message_data["message"]
             self.chat_id = message["chat"]["id"]
             author = message["from"]
 
-            if author["id"] not in self.chat_members:
-                self.chat_members[author["id"]] = author["first_name"] + " " + author["last_name"]
-                self.send_message("Welcome to this chat " + self.chat_members[author["id"]] + " !")
+            chat_members = self.persistence.read("chat_members")
+            if str(author["id"]) not in chat_members:
+                name = author["first_name"] + " " + author["last_name"]
+                chat_members[author["id"]] = name
+                self.persistence.write("chat_members", chat_members)
+                self.send_message("Welcome to this chat " + name + " !")
 
             if "text" in message:
                 print("Chat said: ", emoji.demojize(message["text"]))
@@ -114,13 +120,19 @@ class ChatBot():
     def send_message(self, message):
         print("SENDING: " + emoji.demojize(message))
 
-        data = {'chat_id': self.chat_id, 'text': message, "parse_mode": "HTML"}
+        data = {'chat_id': self.chat_id, 'text': emoji.emojize(message), "parse_mode": "HTML"}
         send_url = self.base_url + "sendMessage"
         try:
             r = requests.post(send_url, data=data)
         except:
-            self.log.append(str(datetime.datetime.now()) + " - did not send:\n" + message)
-        self.message_sent += 1
+            log = self.persistence.read("log")
+            log.append(str(datetime.datetime.now()) + " - did not send:\n" + message)
+            self.persistence.write("log", log)
+        message_sent = self.persistence.read("message_sent")
+        self.persistence.write("message_sent", message_sent + 1)
+
+
+
 
     ############################################################################
     """Command-implementation"""
@@ -133,11 +145,14 @@ class ChatBot():
     def bot_print_status(self, params):
         """Prints the bots current status and relevant information"""
         delta = str(datetime.datetime.now() - self.start_time)
-        message = "<pre>Status: Running \n"
+        message = "<pre>Status: Running :green_circle:\n"
         message += "Uptime: " + delta + "\n"
-        message += "Messages read: " + str(self.message_read) + "\n"
-        message += "Messages sent: " + str(self.message_sent) + "</pre>"
+        message += "Reboots: " + str(self.persistence.read("reboots")) + "\n"
+        message += "Messages read: " + str(self.persistence.read("message_read")) + "\n"
+        message += "Messages sent: " + str(self.persistence.read("message_sent")) + "</pre>"
         self.send_message(message)
+        if "full" in params:
+            self.bot_print_log([])
 
 
     def bot_show_weather(self, params):
@@ -206,7 +221,7 @@ class ChatBot():
                 out_string += emoji_dict[i] + " "
             else:
                 out_string += i
-        self.send_message(emoji.emojize(out_string))
+        self.send_message(out_string)
 
 
     def bot_show_help(self, params):
@@ -218,16 +233,22 @@ class ChatBot():
             send_text += self.commands[entry].__doc__ + "\n\n"
         self.send_message(send_text)
 
+
     def bot_print_log(self, params):
         """Shows an error-log, mostly of bad api-requests"""
+        if "clear" in params:
+            self.persistence.write("log",[])
+            self.send_message("Log cleared")
+            return
         send_text = ""
-        for event in self.log:
+        for event in self.persistence.read("log"):
             send_text += event + "\n"
         if send_text == "":
             send_text += "No errors up to now"
         self.send_message(send_text)
 
-    def bot_show_wikipedia(self,params):
+
+    def bot_show_wikipedia(self, params):
         """Shows the wikipedia entry for a given therm"""
         if len(params) > 2 or len(params) == 0:
             self.send_message("Please only search for one word at a time. 1rst param is for language (de or fr or en or ...)")
@@ -249,4 +270,11 @@ class ChatBot():
         self.send_message(url)
 
 
+    def bot_do_all(self,params):
+        """Executes every single command with random params"""
+        for key in self.commands:
+            if key != "bot_do_all":
+                	self.commands[key](["en","Freiburg"])
+
+
 bot = ChatBot("ChatterBot", telegram_api, version="1.0")
diff --git a/permanent_vars.json b/permanent_vars.json
new file mode 100644
index 0000000..5e0f291
--- /dev/null
+++ b/permanent_vars.json
@@ -0,0 +1 @@
+{"message_read": 6, "message_sent": 15, "log": [], "chat_members": {"364520272": "Remy Moll"}, "reboots": 4}
\ No newline at end of file
diff --git a/persistence.py b/persistence.py
new file mode 100644
index 0000000..189c156
--- /dev/null
+++ b/persistence.py
@@ -0,0 +1,30 @@
+import json
+import time
+
+class PersistentVars():
+    """"""
+
+    def __init__(self,savefile_path):
+        self.path = savefile_path
+
+    def write(self, name, value):
+        pre = self.read()
+        pre[name] = value
+        try:
+            file = open(self.path,"w")
+            json.dump(pre, file)
+            file.close()
+        except:
+            print("Config not written - critical")
+
+    def read(self, name=""):
+        try:
+            file = open(self.path,"r")
+            vars = json.load(file)
+            file.close()
+            if len(name) != 0:
+                vars = vars[name]
+        except:
+            vars = None
+
+        return vars