diff --git a/signalbot.py b/signalbot.py
index dd4c8d0fe030b7e5e3f2f446c3d1bac588653589..fb1512b458e4de1700eef7f0df01b28357345895 100755
--- a/signalbot.py
+++ b/signalbot.py
@@ -14,7 +14,7 @@ import requests  # Apache 2.0
 import schedule  # MIT
 from gi.repository import GLib  # LGPL v2.1+
 from pydbus import SystemBus  # LGPL v2+
-import deepl # MIT
+import deepl  # MIT
 
 from mod_birthdayreminder import ModuleBirthdayReminder
 from mod_challenge import ModuleChallenge
@@ -122,7 +122,7 @@ def load_config(filename):
 
 
 def handle_action(timestamp, source, groupID, message, attachments):
-    if not message.startswith(".") or len(message) <=2 or message[0:2]=="..":
+    if not message.startswith(".") or len(message) <= 2 or message[0:2] == "..":
         return
     print(timestamp)
     print(source)
@@ -139,8 +139,6 @@ def handle_action(timestamp, source, groupID, message, attachments):
                 groupInfo = group
                 break
 
-    
-
     try:
         message = message[1:].strip()
         msg_splitted = message.split(" ")
@@ -153,15 +151,16 @@ def handle_action(timestamp, source, groupID, message, attachments):
             remus_feinste(receiver)
         elif action == "trueamerican" and (groupInfo is None or action in groupInfo["COMMANDS"]):
             true_american(receiver)
-        elif (action == "yesno" or action == "yn")and (groupInfo is None or action in groupInfo["COMMANDS"]):
+        elif (action == "yesno" or action == "yn") and (groupInfo is None or action in groupInfo["COMMANDS"]):
             yes_no_wtf(receiver, action)
-        elif action == "dadjoke"and (groupInfo is None or action in groupInfo["COMMANDS"]):
+        elif action == "dadjoke" and (groupInfo is None or action in groupInfo["COMMANDS"]):
             dadjoke(receiver)
-        elif action == "links"and (groupInfo is not None and action in groupInfo["COMMANDS"]):
-            links( receiver, groupInfo)
+        elif action == "links" and (groupInfo is not None and action in groupInfo["COMMANDS"]):
+            links(receiver, groupInfo)
         elif action in FUN_DICT:
             send(FUN_DICT[action], receiver)
-        elif (action in ["savequote", "addquote", "createquote"]) and (groupInfo is not None and action in groupInfo["COMMANDS"]):
+        elif (action in ["savequote", "addquote", "createquote"]) and (
+                groupInfo is not None and action in groupInfo["COMMANDS"]):
             save_quote(receiver, " ".join(str(x) for x in msg_splitted[1:]), groupInfo)
         elif action == "randomquote" and (groupInfo is not None and action in groupInfo["COMMANDS"]):
             random_quote(receiver, groupInfo)
@@ -179,13 +178,15 @@ def handle_action(timestamp, source, groupID, message, attachments):
             request(receiver, " ".join(str(x) for x in msg_splitted[1:]))
         elif action == "challenge" and (groupInfo is None or action in groupInfo["COMMANDS"]):
             get_random_challenge(receiver)
-        elif action in ["savebirthday", "addbirthday", "createbirthday"] and (groupInfo is not None and action in groupInfo["COMMANDS"]):
+        elif action in ["savebirthday", "addbirthday", "createbirthday"] and (
+                groupInfo is not None and action in groupInfo["COMMANDS"]):
             save_birthday(receiver, " ".join(str(x) for x in msg_splitted[1:]), groupInfo)
         elif action == "allbirthdays" and (groupInfo is not None and action in groupInfo["COMMANDS"]):
             get_all_birthdays(receiver, groupInfo)
         elif action == "nextbirthday" and (groupInfo is not None and action in groupInfo["COMMANDS"]):
             get_next_birthday(receiver, groupInfo)
-        elif action in ["saveevent", "addevent", "createevent"] and (groupInfo is not None and action in groupInfo["COMMANDS"]):
+        elif action in ["saveevent", "addevent", "createevent"] and (
+                groupInfo is not None and action in groupInfo["COMMANDS"]):
             save_event(receiver, " ".join(str(x) for x in msg_splitted[1:]), groupInfo)
         elif action == "allevents" and (groupInfo is not None and action in groupInfo["COMMANDS"]):
             get_all_events(receiver, groupInfo)
@@ -198,7 +199,8 @@ def handle_action(timestamp, source, groupID, message, attachments):
         elif action == "kingscup" and (groupInfo is None or action in groupInfo["COMMANDS"]):
             get_kings_cup(receiver)
         else:
-            unknown_command(receiver, message) # wenn nicht berechtigt, dann "ich seh nix, ich weiss nix, ich hör nix" => unbekannter befehl
+            unknown_command(receiver,
+                            message)  # wenn nicht berechtigt, dann "ich seh nix, ich weiss nix, ich hör nix" => unbekannter befehl
     except Exception as ex:
         log.critical(f'Unknown error:"{ex}", timestamp="{timestamp}", source="{source}", groupID="{groupID}", '
                      f'message="{message}", attachments="{attachments}"')
@@ -225,7 +227,8 @@ def send_a(message, receiver, attachment):
         elif type(receiver) is list:
             signal.sendGroupMessage(message, [attachment], receiver)
     except Exception as ex:
-        log.error(f'Send Message with attachment Exception:"{ex}"", message="{message}", receiver="{receiver}", attachments="{attachment}"')
+        log.error(
+            f'Send Message with attachment Exception:"{ex}"", message="{message}", receiver="{receiver}", attachments="{attachment}"')
 
 
 def help_func(receiver, message, groupInfo):
@@ -248,24 +251,25 @@ def remus_feinste(receiver):
               "Originalrezept von Onkel Remus\n"
     send(message, receiver)
 
+
 def true_american(receiver):
-    message = "True American Regeln: So funktioniert das Spiel aus New Girl\n\n"\
-        "- Sie nun folgende Utensilien: Mindestens zwei weitere Mitspieler, drei Dosen Bier pro Spieler, eine Flasche Schnaps, einen Mülleimer, sowie einen Raum mit Möbeln und einem großen Tisch, den Sie am nächsten Tag mit Sicherheit putzen müssen. \n\n"\
-        "- Stellen Sie die Schnapsflasche, den \"König\", in die Mitte des Tisches und die Dosenbiere (die \"Soldaten\") um den König herum, um ihn zu beschützen. Platzieren Sie die Möbel im Raum in vier Zonen kreisförmig um den Tisch herum, sodass Sie sich bewegen können, ohne den Boden zu berühren, denn: Der Boden ist Lava! \n\n"\
-        "- Nun wählen Sie Teams: Halten sie sich mit Ihren Fingern eine Zahl von eins bis fünf vor die Stirn, die Person mit einem Finger weniger vor der Stirn ist Ihr Teamkollege. Falls Sie niemanden finden, sind Sie auf sich alleine gestellt. \n\n"\
-        "JFK! Jetzt wird gespielt.\n\n"\
-        "- Zu Beginn ruft einer der Mitspieler Laut \"JFK\", alle Anderen antworten \"FDR\", rennen zur Burg, nehmen sich ein Bier und sichern sich den Platz auf einem der Möbelstücke in der äußersten Zone. Nun wird im Uhrzeigersinn gespielt. Wer eine Aufgabe erfolgreich erledigt, trinkt einen Schluck und darf einen Platz weiter. Dabei gibt es drei verschiedene Aufgabentypen. \n\n"\
-        "- Erstens: Der Spieler, der an der Reihe ist, nennt zwei Gegenstände oder Personen, die Anderen schreien eine Gemeinsamkeit der Objekte in die Runde. Zweitens: Der Spieler beginnt ein Sprichwort, die anderen Mitspieler vollenden das Sprichwort. Drittens: Alle halten sich Zahlen (mit einer Hand) an die Stirn, Spieler mit gleichen Zahlen vollenden die Aufgabe. \n\n"\
-        "- Ist eine Aufgabe erfolgreich absolviert, trinken Sie einen Schluck und ziehen ein Möbelstück weiter. Dabei dürfen Sie nie den Boden berühren oder ein leeres Bier in der Hand halten. Schreit ein beliebiger Mitspieler \"JFK\", antworten alle Anderen mit \"FDR\" und müssen ihr Bier austrinken. \n\n"\
-        "- Wenn alle Biere vom Tisch getrunken wurden, ist der König, also die Schnapsflache, \"verwundbar\". Der Spieler, der zuerst die innerste Zone erreicht, kann dann einen Schluck aus der Schnapsflasche trinken und hat damit - zusammen mit seinem Teamkollegen - gewonnen. \n\n"\
-        "- Verloren hat der Spieler, der während des Spieles mit einem leeren Bier erwischt wird oder der den Boden, also die Lava berührt. Zurück ins Spiel kommen Sie, indem Sie ein ganzes Bier austrinken. Auf welchen Platz Sie dann gesetzt werden, entscheiden die Mitspielenden. \n\n"\
-        "Willkürliche Zusatzregeln\n"\
-        "Als wäre das Spiel noch nicht kompliziert und verwirrend genug, erklären wir Ihnen in unserem letzten Kapitel noch einige - zugegeben ziemlich willkürliche - Zusatzregeln.\n\n"\
-        "- Spielen Sie mit der \"Clinton-Zusatzregel\", so muss jeder Spieler, der eine Aufgabe nicht vollenden konnte, ein Kleidungsstück ablegen. Zusätzlich müssen sich bei Aufgabentyp 3 Spieler mit der gleichen Zahl \"hinter dem eisernen Vorhang\" (zum Beispiel in einem anderen Raum) küssen. \n\n"\
-        "- Ruft ein Spieler \"All trash belongs...\" so antworten die Anderen \"in the junkyard!\" und werfen eine leere Dose in den Mülleimer am anderen Ende des Raumes. Wenn jemand \"Donald Trump\" ruft, so müssen alle mit \"Build the wall!\" antworten und trinken. \n\n"\
-        "-Die wichtigste Regeln bei True American: Alles was bei True American gesagt wird, ist angeblich eine Lüge und es geht nicht um das Gewinnen, sondern darum, ein richtiger Amerikaner zu sein. \n\n\n"\
-        "#DankeFocus: https://praxistipps.focus.de/true-american-regeln-so-funktioniert-das-spiel-aus-new-girl_126279\n\n"\
-        "https://www.trueamericanrules.com/working-rules/"
+    message = "True American Regeln: So funktioniert das Spiel aus New Girl\n\n" \
+              "- Sie nun folgende Utensilien: Mindestens zwei weitere Mitspieler, drei Dosen Bier pro Spieler, eine Flasche Schnaps, einen Mülleimer, sowie einen Raum mit Möbeln und einem großen Tisch, den Sie am nächsten Tag mit Sicherheit putzen müssen. \n\n" \
+              "- Stellen Sie die Schnapsflasche, den \"König\", in die Mitte des Tisches und die Dosenbiere (die \"Soldaten\") um den König herum, um ihn zu beschützen. Platzieren Sie die Möbel im Raum in vier Zonen kreisförmig um den Tisch herum, sodass Sie sich bewegen können, ohne den Boden zu berühren, denn: Der Boden ist Lava! \n\n" \
+              "- Nun wählen Sie Teams: Halten sie sich mit Ihren Fingern eine Zahl von eins bis fünf vor die Stirn, die Person mit einem Finger weniger vor der Stirn ist Ihr Teamkollege. Falls Sie niemanden finden, sind Sie auf sich alleine gestellt. \n\n" \
+              "JFK! Jetzt wird gespielt.\n\n" \
+              "- Zu Beginn ruft einer der Mitspieler Laut \"JFK\", alle Anderen antworten \"FDR\", rennen zur Burg, nehmen sich ein Bier und sichern sich den Platz auf einem der Möbelstücke in der äußersten Zone. Nun wird im Uhrzeigersinn gespielt. Wer eine Aufgabe erfolgreich erledigt, trinkt einen Schluck und darf einen Platz weiter. Dabei gibt es drei verschiedene Aufgabentypen. \n\n" \
+              "- Erstens: Der Spieler, der an der Reihe ist, nennt zwei Gegenstände oder Personen, die Anderen schreien eine Gemeinsamkeit der Objekte in die Runde. Zweitens: Der Spieler beginnt ein Sprichwort, die anderen Mitspieler vollenden das Sprichwort. Drittens: Alle halten sich Zahlen (mit einer Hand) an die Stirn, Spieler mit gleichen Zahlen vollenden die Aufgabe. \n\n" \
+              "- Ist eine Aufgabe erfolgreich absolviert, trinken Sie einen Schluck und ziehen ein Möbelstück weiter. Dabei dürfen Sie nie den Boden berühren oder ein leeres Bier in der Hand halten. Schreit ein beliebiger Mitspieler \"JFK\", antworten alle Anderen mit \"FDR\" und müssen ihr Bier austrinken. \n\n" \
+              "- Wenn alle Biere vom Tisch getrunken wurden, ist der König, also die Schnapsflache, \"verwundbar\". Der Spieler, der zuerst die innerste Zone erreicht, kann dann einen Schluck aus der Schnapsflasche trinken und hat damit - zusammen mit seinem Teamkollegen - gewonnen. \n\n" \
+              "- Verloren hat der Spieler, der während des Spieles mit einem leeren Bier erwischt wird oder der den Boden, also die Lava berührt. Zurück ins Spiel kommen Sie, indem Sie ein ganzes Bier austrinken. Auf welchen Platz Sie dann gesetzt werden, entscheiden die Mitspielenden. \n\n" \
+              "Willkürliche Zusatzregeln\n" \
+              "Als wäre das Spiel noch nicht kompliziert und verwirrend genug, erklären wir Ihnen in unserem letzten Kapitel noch einige - zugegeben ziemlich willkürliche - Zusatzregeln.\n\n" \
+              "- Spielen Sie mit der \"Clinton-Zusatzregel\", so muss jeder Spieler, der eine Aufgabe nicht vollenden konnte, ein Kleidungsstück ablegen. Zusätzlich müssen sich bei Aufgabentyp 3 Spieler mit der gleichen Zahl \"hinter dem eisernen Vorhang\" (zum Beispiel in einem anderen Raum) küssen. \n\n" \
+              "- Ruft ein Spieler \"All trash belongs...\" so antworten die Anderen \"in the junkyard!\" und werfen eine leere Dose in den Mülleimer am anderen Ende des Raumes. Wenn jemand \"Donald Trump\" ruft, so müssen alle mit \"Build the wall!\" antworten und trinken. \n\n" \
+              "-Die wichtigste Regeln bei True American: Alles was bei True American gesagt wird, ist angeblich eine Lüge und es geht nicht um das Gewinnen, sondern darum, ein richtiger Amerikaner zu sein. \n\n\n" \
+              "#DankeFocus: https://praxistipps.focus.de/true-american-regeln-so-funktioniert-das-spiel-aus-new-girl_126279\n\n" \
+              "https://www.trueamericanrules.com/working-rules/"
     send_a(message, receiver, '/home/pi/signalbot/true_american_layout.png')
 
 
@@ -294,7 +298,6 @@ def links(receiver, groupInfo):
     if groupInfo is not None and "LINKS" in groupInfo:
         links = groupInfo["LINKS"]
 
-
     if len(links) == 0:
         message = "Keine Links hinterlegt!"
     else:
@@ -320,7 +323,7 @@ def save_quote(receiver, quote_line, groupInfo):
     send(quotes.save_quote(quote_line, groupInfo), receiver)
 
 
-def random_quote(receiver,groupInfo):
+def random_quote(receiver, groupInfo):
     send(quotes.get_random_quote(groupInfo), receiver)
 
 
@@ -422,12 +425,12 @@ def save_event(receiver, event_line, groupInfo):
     send(event_reminder.save_event(event_line, groupInfo), receiver)
 
 
-def get_all_events(receiver, groupInfo ):
+def get_all_events(receiver, groupInfo):
     send(event_reminder.get_eventlist(groupInfo), receiver)
 
 
 def get_next_event(receiver, groupInfo):
-    send( event_reminder.get_next_event(groupInfo), receiver)
+    send(event_reminder.get_next_event(groupInfo), receiver)
 
 
 def unknown_command(receiver, message):
@@ -438,28 +441,30 @@ def unknown_command(receiver, message):
 def get_tex_formula(receiver, message):
     send_a(message, receiver, tex.create_formula(message))
 
+
 def get_deepl_translation(receiver, message):
     if translator is None:
-        send("There is no translator available!",receiver )
+        send("There is no translator available!", receiver)
         return
 
     splitted = message.strip().split(",")
     lang = splitted[0].upper()
-    text =  ",".join(str(x) for x in splitted[1:]).strip()
-    
+    text = ",".join(str(x) for x in splitted[1:]).strip()
+
     try:
         result = translator.translate_text(text, target_lang=lang)
     except Exception as ex:
         send(f'{ex}', receiver)
         return
-        
+
     answer = "Computer says no"
-    if result :
-        answer = str(result.detected_source_lang)+" → " +str(lang)+"\n"
-        answer += text+"\n\n"
+    if result:
+        answer = str(result.detected_source_lang) + " → " + str(lang) + "\n"
+        answer += text + "\n\n"
         answer += result.text
 
-    send(answer,receiver )
+    send(answer, receiver)
+
 
 def get_kings_cup(receiver):
     send_a("Don't drink and derive!",receiver, "/home/pi/signalbot/kings_cup_regeln.png")
@@ -499,9 +504,10 @@ def init_schedule_jobs():
 def gg_remind_schichten():
     for group in GROUPS:
         if group["NAME"] == "GGOffiziell":
-            send(f'Bitte tragt euch in die Planung ein:\n {group["LINKS"]["Planung"]}',group["ID"])
+            send(f'Bitte tragt euch in die Planung ein:\n {group["LINKS"]["Planung"]}', group["ID"])
             break
 
+
 def gg_remind_stundenzettel():
     today = date.today().day
     gg_group = None
@@ -511,9 +517,10 @@ def gg_remind_stundenzettel():
             break
 
     if today in [20, 22, 24, 26]:
-        send("Bitte schickt eure ausgefüllten Stundenzettel!" ,gg_group["ID"])
+        send("Bitte schickt eure ausgefüllten Stundenzettel!", gg_group["ID"])
     elif today == 30:
-        send("too late suckaaa",gg_group["ID"])
+        send("too late suckaaa", gg_group["ID"])
+
 
 def start_schedule():
     while True:
@@ -533,7 +540,7 @@ if __name__ == "__main__":
     quotes = ModuleQuotes(GROUPS, log)
     games = ModuleFreeGames(FREE_GAMES_SUBSCRIBER, send_a, log)
     challenges = ModuleChallenge('/home/pi/signalbot/challenge.json', log)
-    birthday_reminder = ModuleBirthdayReminder(GROUPS , send, log)
+    birthday_reminder = ModuleBirthdayReminder(GROUPS, send, log)
     tex = ModuleTex(log)
     help = ModuleHelp('/home/pi/signalbot/betterhelp.json', log)
     event_reminder = ModuleEventReminder(GROUPS, send, log)
@@ -552,6 +559,5 @@ if __name__ == "__main__":
     schedule_thread = Thread(target=start_schedule)
     schedule_thread.start()
     print("schedule_thread started")
-    
 
     loop.run()
diff --git a/spielwiese.py b/spielwiese.py
index d974050e6f42dda78d3b200f7e1fadf8c9e900e5..9655d33ae507e1ed06b16ebee82f18f7b560bf39 100644
--- a/spielwiese.py
+++ b/spielwiese.py
@@ -1,7 +1,19 @@
+import requests  # Apache 2.0
+import numpy as np
+
 callbacktable = {"myFunc": "hello_world"}
 
+
 def hello_world():
     print('Hello World!')
 
+
 if __name__ == '__main__':
-   globals()[callbacktable["myFunc"]]()
\ No newline at end of file
+    globals()[callbacktable["myFunc"]]()
+    response = requests.get(f"https://history.muffinlabs.com/date", headers={"Accept": "application/json"})
+    result = response.json()
+    print('Done')
+    facts = np.random.choice(result['data']['Events'], 5)
+    print('5 Random History Facts about today:')
+    for fact in facts:
+        print(f'In {fact["year"]}: {fact["text"]}')