Merge pull request #14 from ctx77/main

reworking some food-items, f-strings and only react when messages startswith the command and not when it is somewhere
This commit is contained in:
BaerbelBox
2024-08-03 07:27:24 +02:00
committed by GitHub
17 changed files with 149 additions and 144 deletions

View File

@@ -26,9 +26,9 @@ class Config(object):
if not append:
self._config_dict = {}
for l in f.readlines():
kv_pair = l.split(':')
kv_pair = l.split(':', 1)
if len(kv_pair) == 2:
self._config_dict[kv_pair[0].strip()] = kv_pair[1][:-1].strip()
self._config_dict[kv_pair[0].strip()] = kv_pair[1].strip()
mods = self._config_dict['mods'].split(',')
self._config_dict['mods'] = []
for mod in mods:
@@ -86,4 +86,4 @@ class Config(object):
@property
def first_greeting(self):
return self._config_dict['first_greeting']
return self._config_dict['first_greeting']

View File

@@ -1,5 +1,3 @@
import datetime
from FaustBot.Communication.Connection import Connection
from FaustBot.Model.UserProvider import UserProvider
from FaustBot.Modules.PrivMsgObserverPrototype import PrivMsgObserverPrototype
@@ -15,8 +13,7 @@ class CharactersCountObserver(PrivMsgObserverPrototype):
return ".characters - um abzufragen wieviel du bisher geschrieben hast."
def update_on_priv_msg(self, data, connection: Connection):
if data['message'].find('.characters') == -1:
return
user_provider = UserProvider()
output = data['nick']+": du hast "+str(user_provider.get_characters(data['nick']))+ " Zeichen geschrieben."
connection.send_back(output, data)
if data["message"].startswith(".characters"):
user_provider = UserProvider()
output = f"{data['nick']}: du hast {str(user_provider.get_characters(data['nick']))} Zeichen geschrieben."
connection.send_back(output, data)

View File

@@ -6,6 +6,12 @@ from FaustBot.Modules.PrivMsgObserverPrototype import PrivMsgObserverPrototype
class ICDObserver(PrivMsgObserverPrototype):
with open("care_icd10_de.csv", "r", encoding="utf8") as icd10_codes:
icd10_dict = {
row[0]: row[1]
for row in csv.reader(icd10_codes, delimiter=";", quotechar='"')
}
@staticmethod
def cmd():
return None
@@ -14,27 +20,18 @@ class ICDObserver(PrivMsgObserverPrototype):
def help():
return None
def get_icd(self, code):
icd10_codes = open('care_icd10_de.csv', 'r',encoding='utf8')
icd10 = csv.reader(icd10_codes, delimiter=';', quotechar='"')
for row in icd10:
if row[0] == code:
return code +' - ' + row[1]
return 0
def update_on_priv_msg(self, data, connection: Connection):
if data['channel'] != connection.details.get_channel():
return
regex = r'\b(\w\d{2}\.?\d?\d?)\b'
codes = re.findall(regex, data['message'])
for code in codes:
code = code.capitalize()
text = self.get_icd(code)
if text == 0:
if code.find('.') != -1:
code += '-'
else:
code += '.-'
text = self.get_icd(code)
if text != 0:
connection.send_back(text, data)
if data["channel"] == connection.details.get_channel():
regex = r"\b(\w\d{2}\.?\d?\d?)\b"
codes = re.findall(regex, data["message"])
for code in codes:
code = code.capitalize()
text = self.icd10_dict.get(code, False)
if text == False:
if "." in code:
code += "-"
else:
code += ".-"
text = self.icd10_dict.get(code, False)
if text:
connection.send_back(f"{code} - {text}", data)

View File

@@ -12,10 +12,9 @@ class ModmailObserver(PrivMsgObserverPrototype):
return ".modmail <msg> - Sendet allen Moderatoren <msg> per PN"
def update_on_priv_msg(self, data, connection: Connection):
if data['message'].find('.modmail') == -1:
return
mods = connection.details.get_mods()
print(mods)
message = data['message'].split('.modmail ')[1]
for mod in mods:
connection.send_to_user(mod, data['nick'] + ' meldet: ' + message)
if data["message"].startswith(".modmail"):
mods = connection.details.get_mods()
print(mods)
message = data["message"].split(".modmail ")[1]
for mod in mods:
connection.send_to_user(mod, f"{data['nick']} meldet: {message}")

View File

@@ -2,6 +2,8 @@ from FaustBot.Communication.Connection import Connection
from FaustBot.Modules.JoinObserverPrototype import JoinObserverPrototype
from FaustBot.Model.UserProvider import UserProvider
from time import sleep
class First_Greeter(JoinObserverPrototype):
"""
A Class only reacting to pings
@@ -20,12 +22,15 @@ class First_Greeter(JoinObserverPrototype):
self.first_greeting = greeting
def update_on_join(self, data, connection: Connection):
if data['channel'] == connection.details.get_channel():
if data['nick'].find("Guest") != -1:
if data["channel"] == connection.details.get_channel():
new_nick = data["nick"]
if (
new_nick.startswith("Guest")
or UserProvider().get_characters(new_nick) < 100
):
sleep(20)
connection.send_back(self.first_greeting + " " + data['nick'], data)
return
UProvider= UserProvider()
if(UProvider.get_characters(data['nick'])) < 100:
sleep(20)
connection.send_back(self.first_greeting + " " + data['nick'], data)
if "{NICK}" in self.first_greeting:
greeting = self.first_greeting.replace("{NICK}", new_nick)
else:
greeting = f"{self.first_greeting} {new_nick}"
connection.send_back(greeting, data)

View File

@@ -1,3 +1,5 @@
import random
from FaustBot.Communication import Connection
from FaustBot.Modules.PrivMsgObserverPrototype import PrivMsgObserverPrototype
@@ -12,6 +14,6 @@ class FreeHugsObserver(PrivMsgObserverPrototype):
return ".hug - verteilt Umarmungen"
def update_on_priv_msg(self, data: dict, connection: Connection):
if data['message'].find('.hug') == -1:
return
connection.send_back('\001ACTION knuddelt ' + data['nick'] + '.\001', data)
if data["message"].startswith(".hug"):
hug_word = random.choice(["umarmt", "knuddelt", "drückt"])
connection.send_back(f"\001ACTION {hug_word} {data['nick']}.\001", data)

View File

@@ -15,6 +15,7 @@ class GiveCookieObserver(PrivMsgObserverPrototype):
return ".cookie - verteilt Kekse; oder auch nicht"
def update_on_priv_msg(self, data: dict, connection: Connection):
if data['message'].find('.cookie') == -1:
return
connection.send_back('\001ACTION schenkt ' + data['nick'] + ' ' + random.choice(kekse) + '.\001', data)
if data["message"].startswith(".cookie"):
connection.send_back(
f"\001ACTION schenkt {data['nick']} {random.choice(kekse)}.\001", data
)

View File

@@ -15,6 +15,8 @@ class GiveDrinkObserver(PrivMsgObserverPrototype):
return ".drink - schenkt Getränke aus"
def update_on_priv_msg(self, data: dict, connection: Connection):
if data['message'].find('.drink') == -1:
return
connection.send_back('\001ACTION schenkt ' + data['nick'] + ' ' + random.choice(getraenke) + ' ein.\001', data)
if data["message"].startswith(".drink"):
connection.send_back(
f"\001ACTION schenkt {data.get('nick')} {random.choice(getraenke)} ein.\001",
data,
)

View File

@@ -11,17 +11,12 @@ from snacks import snacks
from kekse import kekseGoodOnes
def _servier(receiver,item,requester):
fluff_text = [" ohne zu kleckern",""," mit Begeisterung","",""," nach einer substantiellen Wartezeit"]
return "\001ACTION serviert {0} {1}{2}. Schöne Grüße von {3}\001".format(
receiver,item,random.choice(fluff_text),requester
)
def _servier(receiver, item, requester):
return f"\001ACTION serviert {receiver} {item}. Schöne Grüße von {requester}\001"
def _schenk(receiver,item,requester):
return "\001ACTION schenkt {0} {1} ein. Schöne Grüße von {2}\001".format(
receiver,item,requester
)
def _schenk(receiver, item, requester):
return f"\001ACTION schenkt {receiver} {item} ein. Schöne Grüße von {requester}\001"
non_good_serveables = getraenke + essen + icecream + giveextras + snacks
@@ -36,11 +31,11 @@ class GiveDrinkToObserver(PrivMsgObserverPrototype):
def help():
return ".give NUTZER - serviert jemand anderem Getränke oder Snacks"
def update_on_priv_msg(self,data ,connection: Connection):
if data["message"].find(".give") == -1:
def update_on_priv_msg(self, data, connection: Connection):
if not data["message"].startswith(".give"):
return
receiver = type = None
message_parts = data["message"].split()
message_parts = data["messageCaseSensitive"].split()
if len(message_parts) >= 2:
receiver = message_parts[1]
if len(message_parts) >= 3:
@@ -48,7 +43,7 @@ class GiveDrinkToObserver(PrivMsgObserverPrototype):
if receiver is None:
return
requester = data["nick"].lower()
if receiver == requester:
if receiver.lower() == requester:
if type == "kaffee":
connection.send_back("Fehler 418: Ich bin eine Teekanne",data)
else:
@@ -57,7 +52,7 @@ class GiveDrinkToObserver(PrivMsgObserverPrototype):
if type is None:
connection.send_back(_schenk(receiver,random.choice(getraenkegoodones),requester),data)
return
if type in ["drink","food","cookie","snack","massage","ice"]:
if type in ["drink", "food", "cookie", "snack", "massage", "ice"]:
if type == "drink":
connection.send_back(_schenk(receiver,random.choice(getraenke),requester),data)
elif type == "food":
@@ -70,9 +65,8 @@ class GiveDrinkToObserver(PrivMsgObserverPrototype):
connection.send_back(_servier(receiver,random.choice(icecream),requester),data)
elif type == "massage":
connection.send_back(
"\001ACTION knetet {0} feste den Rücken durch. {1} meinte ich solle dir was Gutes tun.\001".format(
receiver,requester
),data
f"\001ACTION knetet {receiver} feste den Rücken durch. {requester} meinte ich solle dir was Gutes tun.\001",
data,
)
return
matchingGoodDrinks = [drink for drink in getraenkegoodones if type in drink.lower()]
@@ -86,7 +80,5 @@ class GiveDrinkToObserver(PrivMsgObserverPrototype):
return
connection.send_back(
"Tut mir leid {0}, {1} haben wir nicht auf der Karte!".format(
requester,type
),data
f"Tut mir leid {requester}, {type} haben wir nicht auf der Karte!", data
)

View File

@@ -15,6 +15,8 @@ class GiveFoodObserver(PrivMsgObserverPrototype):
return ".food - gibt etwas zu essen aus"
def update_on_priv_msg(self, data: dict, connection: Connection):
if data['message'].find('.food') == -1:
return
connection.send_back('\001ACTION tischt ' + data['nick'] + ' ' + random.choice(essen) + ' auf.\001', data)
if data["message"].startswith(".food"):
connection.send_back(
f"\001ACTION tischt {data['nick']} {random.choice(essen)} auf.\001",
data,
)

View File

@@ -15,6 +15,8 @@ class GiveIceObserver(PrivMsgObserverPrototype):
return ".ice - serviert Eis"
def update_on_priv_msg(self, data: dict, connection: Connection):
if data['message'].find('.ice') == -1:
return
connection.send_back('\001ACTION serviert ' + data['nick'] + ' ' + random.choice(icecream) + '.\001', data)
if data["message"].startswith(".ice"):
connection.send_back(
f"\001ACTION serviert {data['nick']} {random.choice(icecream)}.\001",
data,
)

View File

@@ -4,15 +4,17 @@ from FaustBot.Model.UserProvider import UserProvider
import time
from collections import defaultdict
class Greeter(JoinObserverPrototype):
"""
A Class only reacting to pings
"""
greetings_dict = defaultdict(str)
greetings_dict['Luci'] = "Hewuu"
greetings_dict['pome'] = "Hewuu"
greetings_dict['Skadi'] = "Awoo"
greetings_dict["Luci"] = "Hewuu"
greetings_dict["pome"] = "Hewuu"
greetings_dict["Skadi"] = "Awoo {NICK}!"
@staticmethod
def cmd():
return None
@@ -27,17 +29,21 @@ class Greeter(JoinObserverPrototype):
self.greeting = greeting
def update_on_join(self, data, connection: Connection):
if data['channel'] == connection.details.get_channel():
if data['nick'].find("Guest") != -1:
if data["channel"] == connection.details.get_channel():
joined_user = data["nick"]
if (
joined_user.startswith("Guest")
or UserProvider().get_characters(joined_user) < 100
):
return
UProvider= UserProvider()
if(UProvider.get_characters(data['nick'])) < 100:
return
if data['channel'] == connection.details.get_channel():
if int(time.time()) - self.names[data['nick']] > 28800:
if Greeter.greetings_dict[data['nick']] != "":
connection.send_back(Greeter.greetings_dict[data['nick']]+" " + data['nick'], data)
else:
connection.send_back(self.greeting+" " + data['nick'], data)
self.names[data['nick']] = int(time.time())
if int(time.time()) - self.names[joined_user] > 28800:
greeting_text = self.greetings_dict.get(joined_user, self.greeting)
if "{NICK}" in greeting_text:
response = greeting_text.replace("{NICK}", joined_user)
else:
response = f"{greeting_text} {joined_user}"
connection.send_back(response, data)
self.names[joined_user] = int(time.time())

View File

@@ -15,18 +15,19 @@ class SeenObserver(PrivMsgObserverPrototype):
return ".seen <nick> - um abzufragen wann <nick> zuletzt hier war"
def update_on_priv_msg(self, data, connection: Connection):
if data['message'].find('.seen ') == -1:
return
if not self._is_idented_mod(data, connection):
return
who = data['message'].split(' ')[1]
user_provider = UserProvider()
activity = user_provider.get_activity(who)
output = data['nick']+": Ich habe "+who+" zuletzt am "+str(datetime.datetime.fromtimestamp(activity).strftime("%d.%m.%Y um %H:%M:%S"))+ ' Uhr gesehen'
if not self._is_idented_mod(data, connection):
connection.send_channel(output)
return
connection.send_back(output, data)
if data["message"].startswith(".seen ") and self._is_idented_mod(
data, connection
):
who = data["message"].split(" ")[1]
user_provider = UserProvider()
activity = user_provider.get_activity(who)
if activity == 0:
output = f"{data['nick']}: Ich habe {who} noch nicht gesehen."
else:
output = f"{data['nick']}: Ich habe {who} zuletzt am {str(datetime.datetime.fromtimestamp(activity).strftime('%d.%m.%Y um %H:%M:%S'))} Uhr gesehen."
connection.send_back(output, data)
def _is_idented_mod(self, data: dict, connection: Connection):
return data['nick'] in self._config.mods and connection.is_idented(data['nick'])
return data["nick"] in self._config.mods and connection.is_idented(data["nick"])

View File

@@ -15,6 +15,7 @@ class SnacksObserver(PrivMsgObserverPrototype):
return ".snack - teilt Snacks aus"
def update_on_priv_msg(self, data: dict, connection: Connection):
if data['message'].find('.snack') == -1:
return
connection.send_back('\001ACTION serviert ' + data['nick'] + ' ' + random.choice(snacks) + '.\001', data)
if data["message"].startswith(".snack"):
connection.send_back(
f"\001ACTION serviert {data['nick']} {random.choice(snacks)}.\001", data
)

View File

@@ -76,7 +76,7 @@ class TitleObserver(PrivMsgObserverPrototype):
else:
# with open("content.html", "w") as file:
# file.write(content)
raise Exception("Could not Parse Title for {}".format(url))
raise Exception(f"Could not Parse Title for {url}")
title = html.unescape(title)
title = title.replace("\n", " ").replace("\r", "")
@@ -84,5 +84,5 @@ class TitleObserver(PrivMsgObserverPrototype):
title = title.replace("&gt;", ">")
title = title.replace("&amp;", "&")
if title == "":
raise Exception("Empty Title for {}".format(url))
raise Exception(f"Empty Title for {url}")
return title

View File

@@ -6,7 +6,7 @@ Designed for non-technical channels
## Usage
### Requirements
- Python 3.5
- Python 3.8+
- pip
- wikipedia package (can be installed using pip; tested with version 1.4.0)
- virtualenv (optional)

View File

@@ -47,30 +47,30 @@ essen = [
'einen Teller selbstgedrehte Zucchini-Nudeln',
'mildes Möhrenmischmasch','gegrillten Kürbis','knusprige Frühlingsrollen mit Dip',
'drei frische Onigiri','den Kraftriegel der deutschen Arbeiterklasse',
'ein Klabusterbeerensorbet','Bratwurst mit Sauerkraut','ein Bündel Petersilie',
'Bratwurst mit Sauerkraut','ein Bündel Petersilie',
'eine Schale Stachelbeerkompott','Stulle mit Brot','einen laienhaft zubereiteten Fugofisch',
'ein Stück kichernden Käsekuchen mit Himbeeren','eine Handvoll rohe Mandeln',
'die Rechnung','entzückendes Erbsengemüse','Eierlikörkuchen mit vollständig ausgebackenem Eierlikör',
'drei Stücke traurige trockene Torte','Wassermelonensalat in einer ausgehöhlten Wassermelone',
'das feingemahlene Horn eines Narwals','einen Tuppen Gänseschmalz ohne Salz',
'das Leid der Vorväter','abgelaufenes Knäckebrot, das nicht mehr knackt',
'einen runderneuerten Obstkuchen mit einer Hundertschaft Obstfliegen',
'abgelaufenes Knäckebrot, das nicht mehr knackt',
'einen runderneuerten Obstkuchen mit upgegradeten Erdbeeren',
'Rock`n Roll-Rouladen','eine ganze Benjamin-Blümchen-Torte','eine Schüssel chaotische Chili-sin-Carne',
'eine zerbrochene Schallplatte','sauer eingelegten Aal in Aspik','Ameisen in Aspik',
'eine zerbrochene Schallplatte','sauer eingelegten Aal in Aspik',
'ein unidentifizierbares Experiment mit zu viel zerlaufener Butter',
'einen Hilferuf des Küchenlehrlings',
'einen Gruß des Küchenlehrlings',
'einen Klumpen Teig, der an einen Kuchen erinnert,','gefüllte Chocolate-Chip-Cookies',
'gedünsteten Brokkoli mit Lachsfilet','gebratenes Gemüse mit Erdnusssoße',
'einen unleserlichen Erpresserbrief','Quinoasalat mit feinen Tomaten',
'einen unleserlicher Brief eines voherigen Besuchers','Quinoasalat mit feinen Tomaten',
'einen italienischen Klassiker mit einem “Spritzer” Olivenöl',
'ein selbst gebackenes Kürbiskernbrötchen','ein knuspriges Laugendreieck',
'eine Wagenladung voll Spritzgebäck','einen Döner mit Mais',
'eine ominöse grellgrüne Grütze','einen benutzten Teller',
'Schlagsahne direkt aus der Sprühdose',
'ein Glas Erdnussbutter und einen Löffel',
'einen halb gegessenen Pfannkuchen','eine völlig verkohlte Crème Brûlée',
'einen halb gegessenen Pfannkuchen','eine nicht ganz perfekte Crème Brûlée',
'eine Portion Thunfischsalat','eine rohe Knoblauchzehe',
'eine Botschaft vom Weihnachtsmann (er ist enttäuscht von dir)',
'eine Botschaft vom Weihnachtsmann (er wünscht alles Gute)',
'Wok-Gemüse mit Udonnudeln','eine Schüssel Ramen mit einem Alibi-Ei',
'eine Kringelbratwurst mit Gurkensalat','ein Stück Lasagne nach einem alten Rezept',
'die Reliquie eines unbekannten Heiligen','ein Stück Hochzeitstorte mit 2kg Fondant',
@@ -98,7 +98,7 @@ essen = [
'ein knuspriges Langos mit Salz und Öl','einen Spieß frisch gebackener Kartoffelchips mit Salz und Essig',
'eine ganze Ananas','einen prall gefüllten Frühstücksburrito',
'eine mehr oder weniger gelungene Weihnachtsgans','eine Handvoll getrocknete Früchte',
'Gemüsestreifen mit Hummus-Dip','Bertie-Botts-Bohnen in nur den schlechten Geschmacksrichtungen',
'Gemüsestreifen mit Hummus-Dip','Bertie-Botts-Bohnen in den sonderbarsten Geschmacksrichtungen',
'drei brodelnde Kesselküchlein','eine Schale festklebender Bonbons aus Omas Schrank',
'Gourmet-Katzenfutter','ein Omelett mit Pilzen und Cheddar','eine Pizza Supreme mit gefülltem Rand',
'zwei französische Tacos mit algerischer Soße','eine Packung Schokofrösche',
@@ -133,7 +133,7 @@ essen = [
'einen deckenhohen Stapel Pfannkuchen und eine Flasche Ahornsirup','einen gegrillten Gemüsespieß',
'ein Panna Cotta mit Aprikosenkompott','eine knusprige Heuschrecke am Spieß',
'eine Schale liebevoll geschnittenes Obst','ein halbes Brötchen mit grober Leberwurst',
'eine täuschend echte Rolle Toilettenpapier','eine große Auswahl an Sushi-Spezialitäten und etwas Sojasoße',
'eine täuschend echte Rolle Toilettenpapier, aber es ist Kuchen','eine große Auswahl an Sushi-Spezialitäten und etwas Sojasoße',
'eine schmackhafte Ingwerwurzel','eine Portion Süßkartoffelpommes mit Mango-Chutney','ein Ticket zum Mond',
'eine gut abgeschmeckte Portion Kartoffeleintopf','eine Bockwurst mit Ketchup',
'einen Teller Eisbein mit Sauerkraut','eine Scheibe salzigen Kasseler','eine Portion Schmorgurken',
@@ -153,12 +153,11 @@ essen = [
'einen Teller Pasta Primaverda','eine heiße Ofenkartoffel','eine Pizza mit riesiger Ananasscheibe',
'eine halbe Pizza frutti-di-mare mit extra Knoblauch','eine krachende Kaisersemmel',
'eine Packung gebratener Hühnerherzen','einen sofort die Flucht ergreifenden Tausendfüßler',
'einen riesigen Königsberger Klops mit Kapernfüllung','ein verirrtes Silberfischchen',
'einen unverständlichen Gruß aus der Küche',
'einen riesigen Königsberger Klops mit Kapernfüllung','einen unverständlichen Gruß aus der Küche',
'ein schokoladiges Miniaturmodell des Sonnensystems mit Pluto als Kirsche','Gold, Weihrauch und Myrrhe',
'den kulinarischen Epitaph des Küchenchefs','ein halsbrecherisches Stuntmanöver mit klapperndem Geschirr',
'einen nicht wie die Abbildung auf der Karte aussehenden Burger','einen echten Cheeseburger zum Mitnnehmen',
'gefälschten Kokoskuchen mit Hornhautraspel','ein Replikat der Fettecke','einen einzelnen angekokelten Marshmallow',
'gefälschten Kokoskuchen mit Hornhautraspel','ein Replikat der Fettecke','einen einzelnen karamellisierten Marshmallow',
'einen seltenen niederländischen Bergkäse','den Nuclear Football mit Gebrauchsanleitung',
'ein Schokoladentörtchen mit geschmolzenem Kern','eine Partypackung Salzstangen',
'ein deftig belegtes Laugenbrötchen','zwei Fischfrikadellen mit Tomatensalat','die Reste der gestrigen Grillfeier',
@@ -172,9 +171,9 @@ essen = [
'eine überreife Banane mit braunen Stellen','einen fruchtigen Salat mit Honigmelone',
'eine ganze Aloe-Vera-Pflanze im Topf','ein Frühstücks-Abendessen',
'die abgelaufene Srirachasoße aus dem Kühlschrank','einen Teller nordische Fischsuppe',
'ein frisches Matjesbrötchen','eine Dose Schwertfisch mit abgelaufenem Verfallsdatum',
'ein frisches Matjesbrötchen','eine Dose Schwertfisch mit kürzlich abgelaufenem Verfallsdatum',
'Kartoffelpuffer mit Apfelmus','Spinat mit gummiartigem Rührei','Spinat mit knusprigen Fischstäbchen',
'eine nervös machende tickende Taschenuhr','eine einzelne Bertie-Botts-Bohne mit Hundefuttergeschmack',
'eine tickende Taschenuhr','eine einzelne Bertie-Botts-Bohne mit Hundefuttergeschmack',
'eine Rolle Klebestreifen ohne findbaren Anfang','eine Schale duftender Fenchelsuppe',
'eine Schale Fertigsalat aus dem Supermarkt','eine Schüssel Nudel-Rosenkohl-Eintopf','eine Schale Wrukeneintopf',
'eine glasierte Streuselschnecke','ein fruchtiger Mandarinenkuchen mit Teigstreuseln','ein Stück Fantakuchen',
@@ -198,8 +197,8 @@ essen = [
'klassisch in Bierteig frittierte Fish`n Chips','ein Stilleben aus Wachs','eine Schale ungewürztes Erbsenpüree',
'ein gegrilltes Hähnchen mit einer würzigen Tomaten-Curry-Soße','eine kaum Licht spendende Waltranfunsel',
'gedämpfte Miesmuscheln mit knusprigen Pommes','einen Geburtstagskuchen mit zu wenig Kerzen',
'einen Human Body Part Cake','einen seltsam grünlich schimmernden Leberkäse','eine angebrochene Packung Oreos',
'eine Eitrige mit einem Buckel und Krokodil','eine überraschende Wendung der Dinge','eine hinterlistige Intrige',
'einen seltsam grünlich schimmernden Leberkäse','eine angebrochene Packung Oreos',
'ein Krokodil','eine überraschende Wendung der Dinge','eine dramatische Intrige',
'einen geheimnisvollen Schlüssel unter einer Speiseglocke','einen Rücktrittsbrief des Papstes',
'ein unlösbares Rätsel','das Leibgericht von Theodore Roosevelt','die Bestellung des Sitznachbarn',
'ein saftiges Elchsteak mit Rotkohl','eine intergalaktische Spezialität','ein Rezept und passende Zutaten',
@@ -211,32 +210,32 @@ essen = [
'eine Packung Proteinpulver und Wasser','eine Pizza ohne Rand','eine aufgeklappte Calzone',
'eine Pizza mit ausschließlich Rand','ein Haar in der Suppe','vier Töpfe cremiger Muschelsuppe',
'eine Portion Rindfleisch und Brokkoli','ein von Javier Milei mit der Motorsäge zurechtgeschnittenes Beefsteak',
'ein closed-faced Sandwich','etwas Stroh und eine Maske','ein open-faced Sandwich',
'ein closed-faced Sandwich','ein open-faced Sandwich',
'einen auslaufenden Kautschukbaum','Sägespäne mit knuspriger Baumrinde','eine gleißend helle Sonne',
'ein Stück Sägespänekuchen','Lammbraten mit Minzsoße','einen strikten Diätplan',
'ein Stück Sägespänekuchen','Lammbraten mit Minzsoße',
'ein ambitioniertes Trainingsprogramm','einen straffen Tagesplan','einen Teller Englische Scones mit Marmelade',
'eine Portion Kanadische Poutine','einen Pfälzer Saumagen auf Sauerkraut','eine Packung knusprige Käsestangen',
'zwei Körbe fettiger Pizzabrötchen','eine Freikarte für einen sich im Niedergang befindenden Zirkus',
'einen ganzen Baumkuchen','ein Bündel Scheine','einen verdächtig stinkenden Fischburger',
'einen ganzen Baumkuchen','ein Bündel Scheine','einen Fischburger',
'einen doppelten Hamburger mit extra Käse','einen blinden Handspiegel','Dornröschens Spindel',
'eine Liste mit Restaurants in der Nähe','die Bremer Stadtmusikanten','ein Töpfchen mit endlosem süßen Brei',
'ein Stück frische Honigwabe','einen Teller Rote-Beete-Suppe mit saurer Sahne',
'einen Salzstreuer mit perfide abgeschraubtem Deckel','zwölf knusprige Chicken-Wings',
'einen Salzstreuer mit fast abgeschraubtem Deckel','zwölf knusprige Chicken-Wings',
'ein großes Lachsfilet mit knuspriger Haut','ein fest geschlossenes Glas Mayonnaise',
'aufgetauten Kuchen vom letzten Jahr','ein Lebkuchenhaus mit eingestürztem Dach','ein Stück Lebkuchen-Kuchen',
'auf offenem Feuer zubereitetes Bulgogi','den Orden pour le Mérite','eine billige Imitation vom Goldenen Vlies',
'das bei Alfred Biolek von Blixa Bargeld gekochte Risotto','das legendenumwobene Stück eines italienischen Rinds',
'einen Rasenziegel','eine Mütze Schlaf','eine Portion Obatzter','eine Raffaello-Torte',
'einen Tortenheber ohne Torte weit und breit','einen alten ledrigen linken Stiefel','eine Büste von Karl Marx',
'Kartoffelpüree aus der Tüte','eine ganze Zitrone','ein Fragment vom Elefantenfuß in Tschernobyl',
'Kartoffelpüree aus der Tüte','eine ganze Zitrone','eine Schale Elefantencreme',
'geschichteten Schokopudding mit Waldbeeren','eine Mao-Bibel','zwei Stücke Champignon-Spinat-Lasagne',
'eine Schale Haferbrei mit Honig','eine Schale Chiapudding mit Mango','eine weiche Birne','eine einzelne Walnuss',
'eine sich in seinen Haaren verfangene Fledermaus','einen Hauch von Verachtung für die niederen Dinge im Leben',
'eine Portion Reis mit Hühnerfrikassee','Jasminreis mit gedünstetem Kaisergemüse',
'das Herz eines gemeinsamen Feindes','eine Warnung','die Totenmaske des Tutanchamun',
'ein Brief eines gemeinsamen Feindes','eine Warnung','die Totenmaske des Tutanchamun',
'einen Brief von Hogwarts in grüner Tinte','drei westafrikanische Kichererbsenfrikadellen',
'einen Hornissenschwarm unter einer Käseglocke','gebackene Bananenbällchen mit Honig','billiges Sushi',
'eine Auswahl an winterlichen Gebäcken','ein Ohr von Vincent van Gogh','Sommerrollen mit Teriyaki-Sauce',
'gebackene Bananenbällchen mit Honig','billiges Sushi',
'eine Auswahl an winterlichen Gebäcken','Sommerrollen mit Teriyaki-Sauce',
'einen duftenden Bratapfel','dreizehn üppige Zimtschnecken','selbstgemachte Tacos mit Ortega-Soße',
'eine Schale geriebenen Gouda','überbackenes Toast Hawaii','einige Stücke russischen Zupfkuchen',
'gezuckerte Krapfen','eine heiße Apfeltasche','eine gigantische knusprige Krokette',
@@ -281,10 +280,9 @@ essen = [
'einige harte Salzkaramell-Bonbons','Mokka-Eiscreme mit einem klitzebisschen Pistazie',
'nicht weniger als zwanzig Semmelknödel','einen klobig-klebrigen Proteinriegel','das Antlitz der Fata Morgana',
'einen dreckigen Deal','ein einschneidendes Erfolgserlebnis','einen Berg fettige Ringelpommes',
'eine meterlange Gurkenspirale','eine Schale fein pürierter Selbstkontrolle','Nougat in Form von Meeresfrüchten',
'eine meterlange Gurkenspirale','Nougat in Form von Meeresfrüchten',
'einen Topf Matzah-Ball-Suppe','einen Laib geflochtenes Challah','eine XXL-Packung Merci',
'Pekingente mit Hoisin-Sauce',
]