1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #!/usr/bin/python3
- from mastodon import Mastodon, StreamListener
- from dateutil.tz import tzutc
- from dateutil import parser
- import datetime
- import re
- import csv
- API_URL = "https://botsin.space"
- regex_h = re.compile("\d+(?=\s(ore|ora|heu|Stu|stu|hor|hou))")
- regex_m = re.compile("\d+(?=\s(min|Min))")
- languages = {
- "it":["Ciao @"," ti ricorderò di andare a domire 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_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")
- return
- 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("/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)
|