diff --git a/betterhelp.json b/betterhelp.json index 896ea5624e921a1250495da3f53fbe3f5032f750..14a980cbb541efdd68367e3c09c7e8ceb05ed3de 100644 --- a/betterhelp.json +++ b/betterhelp.json @@ -57,6 +57,13 @@ ], "Description": "Kings Cup Rules", "_Func": "echo" + }, + { + "Names": [ + ".today" + ], + "Description": "Random facts and events about today", + "_Func": "echo" } diff --git a/mod_today.py b/mod_today.py new file mode 100644 index 0000000000000000000000000000000000000000..9fe435c8f8a1624444d3c0c56fa0fabed6af2c06 --- /dev/null +++ b/mod_today.py @@ -0,0 +1,83 @@ +import requests # Apache 2.0 +import numpy as np +from bs4 import BeautifulSoup # MIT +from datetime import date, datetime + + +class ModuleToday: + def __init__(self, log): + self.tag = "%20s - " % "mToday" + self.log = log + + # self.load_today_from_csv(group) + self.update() + self.log.debug(f"{self.tag}Modul Today geladen") + + def loadTodayEvents(self): + try: + response = requests.get( + f"https://history.muffinlabs.com/date", headers={"Accept": "application/json"}) + result = response.json() + self.log.debug(f"{self.tag}Done loading events") + + return result['data']['Events'] + except (SyntaxError, ValueError) as exc: + self.log.warning( + f"{self.tag}Error while loading events: {exc}") + return [] + + def getTodayMessage(self): + message = "" + + today = date.today() + sToday = today.strftime("%d.%m.%Y") + message += f"Heute ist der {sToday}\n" + message += f"Der Tag dauert {self.sun['day_length']} Stunden.\n" + message += f"Sonnenaufgang: {self.sun['sunrise']}\n" + message += f"Sonnenuntergang: {self.sun['sunset']}\n" + + message += "\nWhat holiday is today?\n" + for title in self.whatIsList: + message += f'- {title}\n' + + facts = np.random.choice(self.todayEvents, 5) + message += '\n5 Random History Facts about today:\n' + for fact in facts: + message += f'In {fact["year"]}: {fact["text"]}\n' + + return message + + def crawl_what_is_list(self): + temp_list = [] + try: + data = requests.get( + "https://nationaltoday.com/what-is-today/").text + soup = BeautifulSoup(data, features="html.parser") + + for title in soup.find_all(class_="holiday-title"): + name = title.text + if name not in temp_list: + temp_list.append(name) + except Exception as ex: + self.log.error( + f"{self.tag}Failed crawling what-is-today list: {ex}") + return temp_list + + def loadTodaySun(self): + try: + response = requests.get( + f"https://api.sunrise-sunset.org/json?lat=51.2277411&lng=6.7734556&date=today", headers={"Accept": "application/json"}) + result = response.json() + self.log.debug(f"{self.tag}Done loading sun informations") + return result['results'] + + except (SyntaxError, ValueError) as exc: + self.log.warning( + f"{self.tag}Error while sun informations events: {exc}") + return [] + + def update(self): + self.todayEvents = self.loadTodayEvents() + self.whatIsList = self.crawl_what_is_list() + self.sun = self.loadTodaySun() + self.log.debug(f"{self.tag}Modul Today updated") diff --git a/signalbot.py b/signalbot.py index fb1512b458e4de1700eef7f0df01b28357345895..1f05d610605438e9d117b51ed4ce9f66f24c6cbe 100755 --- a/signalbot.py +++ b/signalbot.py @@ -24,6 +24,7 @@ from mod_help import ModuleHelp from mod_quotes import ModuleQuotes from mod_tex import ModuleTex from mod_eventreminder import ModuleEventReminder +from mod_today import ModuleToday # @TODO README Schreiben mit signal-cli Raspberry Pi Installationsanleitung + signal-cli Systembus Einrichtung + Systemd für den Signalbot # @TODO Einfacher Wrapper zum senden von Nachrichten per shell @@ -64,6 +65,7 @@ tex = None help = None event_reminder = None translator = None +today = None CONFIG = {} FUN_DICT = {} @@ -198,6 +200,8 @@ def handle_action(timestamp, source, groupID, message, attachments): get_deepl_translation(receiver, " ".join(str(x) for x in msg_splitted[1:])) elif action == "kingscup" and (groupInfo is None or action in groupInfo["COMMANDS"]): get_kings_cup(receiver) + elif action == "today" and (groupInfo is None or action in groupInfo["COMMANDS"]): + get_today(receiver) else: unknown_command(receiver, message) # wenn nicht berechtigt, dann "ich seh nix, ich weiss nix, ich hör nix" => unbekannter befehl @@ -469,6 +473,9 @@ def get_deepl_translation(receiver, message): def get_kings_cup(receiver): send_a("Don't drink and derive!",receiver, "/home/pi/signalbot/kings_cup_regeln.png") +def get_today(receiver): + send(today.getTodayMessage(), receiver) + def on_mqtt_message(client, userdata, msg): print(msg.topic + " " + str(msg.payload)) send(msg.topic + " " + str(msg.payload), CONFIG['Admins']['Fred']) @@ -498,6 +505,7 @@ def init_schedule_jobs(): schedule.every().day.at("09:00").do(run_threaded, event_reminder.check_for_events) schedule.every().tuesday.at("10:00").do(run_threaded, gg_remind_schichten) schedule.every().day.at("11:00").do(run_threaded, gg_remind_stundenzettel) + schedule.every().day.at("00:01").do(run_threaded,today.update()) # schedule.every(10).seconds.do(run_threaded, birthday_reminder.check_for_birthdays) @@ -544,7 +552,7 @@ if __name__ == "__main__": tex = ModuleTex(log) help = ModuleHelp('/home/pi/signalbot/betterhelp.json', log) event_reminder = ModuleEventReminder(GROUPS, send, log) - + today = ModuleToday(log) loop = GLib.MainLoop() bus = SystemBus()