Browse Source

now accepted relative time

oloturia 1 year ago
parent
commit
c4a9b292b6
5 changed files with 80 additions and 67 deletions
  1. 0 0
      LICENSE
  2. 0 0
      README.md
  3. 80 67
      buonanotte.py
  4. 0 0
      register_app.py
  5. 0 0
      schedule.csv

+ 0 - 0
LICENSE


+ 0 - 0
README.md


+ 80 - 67
buonanotte.py

@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/python3
 from mastodon import Mastodon, StreamListener
 from dateutil.tz import tzutc
 from dateutil import parser
@@ -7,78 +7,91 @@ import re
 import csv
 
 API_URL = "https://botsin.space"
-regex = re.compile("([0-1]\d|[2][0-3]):[0-5]\d")
+regex_h = re.compile("\d+(?=\s(ore|heu|Stu|stu|hor|hou))")
+regex_m = re.compile("\d+(?=\s(min|Min))")
 languages = {
-	"it":["Ciao @"," ti ricorderò di andare a dormire alle ore "," è ora di andare a dormire! Buonanotte!"],
-	"es":["Hola @"," te recordaré que te vayas a dormir a las "," es hora de ir a dormir, buenas noches!"],
-	"fr":["Salut @"," je vais te rappeler d'aller dormir à "," il est temps de dormir! Bonne nuit!"],
-	"pt":["Ola' @"," vou lembrá-lo a dormir as "," é hora de ir dormir! Boa noite!"],
-	"de":["Hallo @"," ich werde Sie daran erinnern um Uhr "," es ist Zeit zu schlafen! Gute Nacht!"],
-	"en":["Hello @"," I'll remind you to go to sleep at "," time to go to bed! Good night!"]
+    "it":["Ciao @"," ti ricorderò di andare a dormie fra "," è ora di andare a dormire! Buonanotte!"],
+    "es":["Hola @"," te recordaré que te vayas a dormi en "," es hora de ir a dormir, buenas noches!"],
+    "fr":["Salut @"," je vais te rappeler d'aller dormir en "," il est temps de dormir! Bonne nuit!"],
+    "pt":["Ola' @"," vou lembrá-lo a dormir em "," é hora de ir dormir! Boa noite!"],
+    "de":["Hallo @"," ich werde Sie daran erinnern in "," es ist Zeit zu schlafen! Gute Nacht!"],
+    "en":["Hello @"," I'll remind you to go to sleep in "," time to go to bed! Good night!"]
 }
 
 class goodListener(StreamListener):
 
-	def on_notification(self,notification):
-		try:
-			account = notification["account"]["acct"]
-			content = notification["status"]["content"]
-			goodNight = regex.search(content)
-			if content.find("dormire") != -1:
-				lang = 'it'
-			elif content.find("dormiria") != -1:
-				lang = 'es'
-			elif content.find("dormir") != -1:
-				lang = 'fr'
-			elif content.find("dormia") != -1:
-				lang = 'pt'
-			elif content.find("schlafen") != -1:
-				lang = 'de'
-			else:
-				lang = 'en'
-			greet = languages[lang][0]
-			reminder = languages[lang][1]	
-		except KeyError:
-			return
-		try:
-			result = goodNight.group()
-			if (parser.parse(result) < datetime.datetime.now()):
-				delta = 1
-			else:
-				delta = 0
-			datesleep = (datetime.datetime.now()+datetime.timedelta(days=delta)).strftime("%Y/%m/%d")+" "+result
-			with open("schedule.csv","a") as file:
-				row = [datesleep,account,lang]
-				writer = csv.writer(file)
-				writer.writerow(row)
-			mastodon.status_post(greet+account+reminder+result,visibility="direct")
-		except AttributeError:
-			return
+    def on_notification(self,notification):
+        try:
+            account = notification["account"]["acct"]
+            content = notification["status"]["content"]
 
-	def handle_heartbeat(self):
-		with open("schedule.csv","r") as file:
-			reader = csv.reader(file)
-			sentToBed = []
-			for line,row in enumerate(reader):
-				if (parser.parse(row[0]) < datetime.datetime.now()):
-					greet = languages[row[2]][0]
-					goodnight = languages[row[2]][2]
-					mastodon.status_post(greet+row[1]+goodnight,visibility="direct")
-					sentToBed.append(line)
-		if (len(sentToBed) > 0):
-			with open("schedule.csv","r") as file:
-				lines = file.readlines()
-			with open("schedule.csv","w") as file:
-				for line,row in enumerate(lines):
-					if not (line in sentToBed):
-						file.write(row)
+            goodNight_hours = regex_h.search(content)
+            goodNight_minutes = regex_m.search(content)
+            if content.find("dormire") != -1:
+                lang = 'it'
+            elif content.find("dormiria") != -1:
+                lang = 'es'
+            elif content.find("dormir") != -1:
+                lang = 'fr'
+            elif content.find("dormia") != -1:
+                lang = 'pt'
+            elif content.find("schlafen") != -1:
+                lang = 'de'
+            else:
+                lang = 'en'
+            greet = languages[lang][0]
+            reminder = languages[lang][1]   
+        except KeyError:
+            return
+
+        result = ""
+        try:
+            hours_delay = int(goodNight_hours.group())
+            result += goodNight_hours.group()+"h "
+        except AttributeError:
+            hours_delay = 0
+            
+        try:
+            minutes_delay = int(goodNight_minutes.group())
+            result += goodNight_minutes.group()+"m"
+        except AttributeError:
+            minutes_delay = 0
+
+        if hours_delay == minutes_delay == 0:
+            mastodon.status_post("Can't find a valid time")
+
+        datesleep = (datetime.datetime.now()+datetime.timedelta(hours=hours_delay,minutes=minutes_delay)).strftime("%Y/%m/%d %H:%M")
+        with open("/mnt/nas/tmp/schedule.csv","a") as file:
+            row = [datesleep,account,lang]
+            writer = csv.writer(file)
+            writer.writerow(row)
+        mastodon.status_post(greet+account+reminder+result,visibility="direct")
+        return
+
+    def handle_heartbeat(self):
+        with open("/mnt/nas/tmp/schedule.csv","r") as file:
+            reader = csv.reader(file)
+            sentToBed = []
+            for line,row in enumerate(reader):
+                if (parser.parse(row[0]) < datetime.datetime.now()):
+                    greet = languages[row[2]][0]
+                    goodnight = languages[row[2]][2]
+                    mastodon.status_post(greet+row[1]+goodnight,visibility="direct")
+                    sentToBed.append(line)
+        if (len(sentToBed) > 0):
+            with open("/mnt/nas/tmp/schedule.csv","r") as file:
+                lines = file.readlines()
+            with open("/mnt/nas/tmp/schedule.csv","w") as file:
+                for line,row in enumerate(lines):
+                    if not (line in sentToBed):
+                        file.write(row)
 
 
 if __name__ == "__main__":
-	with open("token") as f:
-		createapp = f.readlines()
-	createapp = [x.strip() for x in createapp]
-	TOKEN = createapp[0]
-	mastodon = Mastodon(access_token = TOKEN, api_base_url = API_URL)
-	listener = goodListener()
-	mastodon.stream_user(listener)
+    with open("/home/goodnight/Documents/buonanotte/token") as f:
+        createapp = f.readlines()
+    createapp = [x.strip() for x in createapp]
+    TOKEN = createapp[0]
+    mastodon = Mastodon(access_token = TOKEN, api_base_url = API_URL)
+    listener = goodListener()
+    mastodon.stream_user(listener)

+ 0 - 0
register_app.py


+ 0 - 0
schedule.csv