From c4a9b292b6053b297b7d9fb67b8f5cf23a9777e3 Mon Sep 17 00:00:00 2001 From: oloturia Date: Fri, 20 Jan 2023 01:54:09 +0100 Subject: [PATCH] now accepted relative time --- LICENSE | 0 README.md | 0 buonanotte.py | 147 ++++++++++++++++++++++++++---------------------- register_app.py | 0 schedule.csv | 0 5 files changed, 80 insertions(+), 67 deletions(-) mode change 100644 => 100755 LICENSE mode change 100644 => 100755 README.md mode change 100644 => 100755 buonanotte.py mode change 100644 => 100755 register_app.py delete mode 100644 schedule.csv diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/buonanotte.py b/buonanotte.py old mode 100644 new mode 100755 index 43a1a05..e591801 --- a/buonanotte.py +++ b/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) diff --git a/register_app.py b/register_app.py old mode 100644 new mode 100755 diff --git a/schedule.csv b/schedule.csv deleted file mode 100644 index e69de29..0000000