330 lines
11 KiB
Python
330 lines
11 KiB
Python
from random import choice, choices, randint, random
|
|
|
|
from ..functions import reply
|
|
from ..models import Message
|
|
|
|
HELP = """Gibt Antworten auf Fragen.
|
|
@me: <eine Frage>?
|
|
"""
|
|
|
|
|
|
# ---
|
|
# WARNING! HERE BE SPOILERS!
|
|
# From this point onward there's all the funny (and not so funny) bits the bot
|
|
# will use to respond to your queries.
|
|
# If you don't want the mystery spoiled for you and be surprised by what the
|
|
# bot might come up with, DON'T read on! Skip to the end of the file instead.
|
|
# ---
|
|
|
|
ka = (
|
|
"Keine Ahnung.",
|
|
"Das weiß ich leider nicht.",
|
|
"Ich weiß es nicht.",
|
|
"Ich weiß es auch nicht.",
|
|
"Frag besser jemanden, der sich damit auskennt.",
|
|
"Da wendest du dich besser eine Fachkraft.",
|
|
"Woher soll ich das wissen?",
|
|
"Das weiß niemand so genau ...",
|
|
"Das kann dir keiner beantworten ...",
|
|
"Eine Frage, so alt wie die Menschheit!",
|
|
"Das ist eine gute Frage.",
|
|
"Wer weiß ...",
|
|
"Boa, keine Ahnung, ey!",
|
|
"Seh ich so aus, als ob ich das wüsste?",
|
|
"Wie kommst du darauf, dass ich das wüsste?",
|
|
"Bin ich die Auskunft, oder was?",
|
|
"Ich bin doch nicht die Auskunft!",
|
|
"Das ist mir doch egal ...",
|
|
"Das solltest du besser mit dir selbst ausmachen.",
|
|
"Das beantwortest du dir am besten mal selbst.",
|
|
"Ich glaube, das weißt du selbst ganz genau.",
|
|
"Das weißt du doch selbst ganz genau.",
|
|
"Schau tief in dich, dort findest du die Antwort.",
|
|
"Du kämpfst wie eine Kuh!",
|
|
"Die Antwort ist ... 42.",
|
|
"Sechs mal Neun.",
|
|
"Das fragst du besser deine Mama.",
|
|
)
|
|
|
|
ja = (
|
|
"Ja",
|
|
"Ja!",
|
|
"Ja.",
|
|
"Jap.",
|
|
"Jo.",
|
|
"Jau!",
|
|
"Joa.",
|
|
"Joooaaaa.",
|
|
"Jooo",
|
|
"Klar!",
|
|
"Klaaaar.",
|
|
"Ja, klar.",
|
|
"Klar doch.",
|
|
"Aber klar doch.",
|
|
"Na sicher.",
|
|
"Sicher doch.",
|
|
"Joa, warum nicht.",
|
|
"Jo, warum denn nicht.",
|
|
"Auf jeden Fall!",
|
|
"Besser wär's.",
|
|
)
|
|
|
|
nein = (
|
|
"Nein",
|
|
"Nee",
|
|
"Besser nicht.",
|
|
"Nein!",
|
|
"Niemals!",
|
|
"Auf keinen Fall!",
|
|
)
|
|
|
|
vielleicht = (
|
|
"Frag mich später noch mal.",
|
|
"Das weiß ich nicht genau.",
|
|
"Ja, vielleicht.",
|
|
"Nein, vielleicht besser nicht.",
|
|
)
|
|
|
|
|
|
def random_room_participant(message: Message) -> str:
|
|
users = [
|
|
u
|
|
for uid, u in message.room.users.items()
|
|
if uid not in (message.event.sender, message.app.client.user)
|
|
]
|
|
if not users:
|
|
return ""
|
|
user = choice(users)
|
|
return user.display_name or user.user_id
|
|
|
|
|
|
numnames = [
|
|
"null",
|
|
"ein",
|
|
"zwei",
|
|
"drei",
|
|
"vier",
|
|
"fünf",
|
|
"sechs",
|
|
"sieben",
|
|
"acht",
|
|
"neun",
|
|
"zehn",
|
|
"elf",
|
|
"zwölf",
|
|
]
|
|
|
|
praepos = (
|
|
"vor",
|
|
"hinter",
|
|
"über",
|
|
"unter",
|
|
"auf",
|
|
"neben", # careful, this cannot be contracted with dativ
|
|
)
|
|
|
|
wwords = {
|
|
"wann": (
|
|
# Time
|
|
lambda m: f"{choice(['Um ', ''])}{randint(0, 23)} Uhr",
|
|
lambda m: f"{choice(['Um ', ''])}{randint(0, 23)}:{randint(1, 59):02} Uhr",
|
|
lambda m: f"{choice(['Um ', ''])}{randint(0, 23)} Uhr und {randint(1, 59)} Minuten",
|
|
lambda m: f"{choice(['Um ', ''])}{randint(1, 59)} Minuten {choice(['vor','nach'])} {randint(0, 12)}",
|
|
lambda m: f"{choice(['Um ', ''])}Viertel {choice(['vor','nach'])} {randint(0, 12)}",
|
|
lambda m: f"Um halb {randint(1, 12)}",
|
|
"Um Mitternacht",
|
|
lambda m: f"Am {choice(['Nach', 'Vor'])}mittag",
|
|
# Date
|
|
"Morgen",
|
|
"Übermorgen",
|
|
"Gestern",
|
|
"Vorgestern",
|
|
lambda m: f"{choice(['Nächst', 'Vorig'])}e Woche",
|
|
lambda m: f"{choice(['Vor', 'In'])} {randint(2, 12)} {choice(['Wochen', 'Monaten'])}",
|
|
lambda m: f"{choice(['Vor', 'In'])} {randint(2, 9999)} Jahren",
|
|
lambda m: f"{choice(['Vor', 'In'])} {randint(2, 999)} Millionen Jahren",
|
|
lambda m: f"Am {randint(1, 28)}.{randint(1, 12)}.{randint(9, 9999)}",
|
|
# Date-time
|
|
lambda m: f"{choice(['Vor', 'In'])} {randint(2, 17)} Jahren, {randint(2,360)} Tagen, {randint(2,23)} Stunden, {randint(2,59)} Minuten und {randint(2,59)} Sekunden",
|
|
lambda m: f"Am {randint(1, 28)}.{randint(1, 12)}.{randint(9, 9999)} um {randint(0, 23)}:{randint(1, 59):02} Uhr",
|
|
),
|
|
"warum": (),
|
|
"was": (),
|
|
"wer": (
|
|
"Deine Mama!",
|
|
"Die Polizei.",
|
|
"Die drei Fragezeichen!",
|
|
"TKKG.",
|
|
"Tim und Struppi.",
|
|
"Die fünf Freunde.",
|
|
"Der Osterhase.",
|
|
"Die Ferienbande! Yaaaaay.",
|
|
"Der Weihnachtsmann.",
|
|
"Frau Holle.",
|
|
"Gott!",
|
|
"Irgendein Gott.",
|
|
"Du!",
|
|
"Du selbst.",
|
|
"Ein Höhlentroll mit einem dicken Prügel.",
|
|
"Eine höhere Macht.",
|
|
"Ein unbekanntes Wesen.",
|
|
"Ein unbekanntes Wesen aus einer unbekannten Galaxie.",
|
|
"Aliens!",
|
|
"Graf Zahl.",
|
|
"Die Russen!",
|
|
"Die USA!",
|
|
"Die Reichsbürger!",
|
|
"Die Regierung.",
|
|
"Die Presse.",
|
|
"Die Illuminaten!",
|
|
"Die internationale Verschwörung e.V.!",
|
|
"Dein Nachbar.",
|
|
"Die Kanzlerin.",
|
|
"Der Präsident.",
|
|
"Der Vorsitzende vom Schützenverein.",
|
|
"Der Postbote.",
|
|
"Die Behörden.",
|
|
"Die Wissenschaft.",
|
|
"Die sechs von der Müllabfuhr.",
|
|
"Der, der grade hinter dir steht und dir zuguckt.",
|
|
"Die, die sich hinter deinem Schrank versteckt hat.",
|
|
"Der Typ der in der Ecke steht.",
|
|
"Die Anderen; immer die Anderen.",
|
|
lambda m: random_room_participant(m) or "Irgendwer.",
|
|
),
|
|
"wie": (
|
|
"Das weiß ich leider auch nicht, vielleicht mit einer Telefonlawine?",
|
|
"Am besten gar nicht.",
|
|
"Das ist schwierig zu sagen.",
|
|
*ka,
|
|
),
|
|
"wieso": (),
|
|
"wieviel": (
|
|
"Nichts",
|
|
lambda m: choice(["Ungefähr ", "Genau ", ""]) + choice(numnames[2:]),
|
|
lambda m: choice(["Ungefähr ", "Genau ", ""]) + f"{23 * random():n}",
|
|
lambda m: choice(["Ungefähr ", "Genau ", ""]) + str(randint(1, 10)),
|
|
lambda m: choice(["Ungefähr ", "Genau ", ""]) + str(randint(7, 23)),
|
|
lambda m: choice(["Ungefähr ", "Genau ", ""]) + str(randint(17, 42)),
|
|
lambda m: choice(["Ungefähr ", "Genau ", ""]) + str(randint(23, 99)),
|
|
lambda m: choice(["Ungefähr ", "Genau ", ""]) + str(randint(100, 1_000_000)),
|
|
"Unendlich!",
|
|
),
|
|
"wieviele": (
|
|
lambda m: choice(["Ungefähr ", "Genau ", ""]) + choice(numnames[2:]),
|
|
lambda m: choice(["Ungefähr ", "Genau ", ""]) + f"{23 * random():n}",
|
|
lambda m: choice(["Ungefähr ", "Genau ", ""]) + str(randint(1, 10)),
|
|
lambda m: choice(["Ungefähr ", "Genau ", ""]) + str(randint(7, 23)),
|
|
lambda m: choice(["Ungefähr ", "Genau ", ""]) + str(randint(17, 42)),
|
|
lambda m: choice(["Ungefähr ", "Genau ", ""]) + str(randint(23, 99)),
|
|
lambda m: choice(["Ungefähr ", "Genau ", ""]) + str(randint(100, 1_000_000)),
|
|
"Ein paar.",
|
|
"Nur ein paar.",
|
|
"Nur ein paar wenige.",
|
|
"Wirklich viele.",
|
|
"Einige.",
|
|
"Ne ganze Menge.",
|
|
"Zu viele!",
|
|
"Ziemlich viele!",
|
|
"Unendlich viele!",
|
|
),
|
|
"wo": (
|
|
lambda m: f"Genau {choice(praepos)} dir!",
|
|
lambda m: f"{choice(praepos).title()} dir!",
|
|
lambda m: f"{choice(praepos).title()} dem Bett.",
|
|
lambda m: f"{choice(praepos).title()} dem Kopfkissen.",
|
|
lambda m: f"{choice(praepos).title()} dem Couche-Kissen.",
|
|
lambda m: f"{choice(praepos).title()} dem Tisch.",
|
|
lambda m: f"{choice(praepos).title()} der Kommode.",
|
|
lambda m: f"{choice(praepos).title()} dem Stuhl.",
|
|
"Droben auf dem Berge.",
|
|
"In der Garage.",
|
|
"Im Klo.",
|
|
"Auf der Straße.",
|
|
"In der Gasse.",
|
|
"In den Wolken.",
|
|
"Vorm Fernseher.",
|
|
"Im Cyberspace.",
|
|
"Genau vor deiner Nase.",
|
|
"Auf deinem Kopf.",
|
|
"Unter deinem Hintern.",
|
|
"Du sitzt drauf!",
|
|
"Im Gefängnis.",
|
|
"Im Bundestag.",
|
|
"Auf der dunklen Seite des Mondes.",
|
|
"In einer weit entfernten Galaxie.",
|
|
"Auf dem Mond.",
|
|
"Auf der ISS.",
|
|
"Im Inneren der Erde.",
|
|
),
|
|
"woher": (),
|
|
"wohin": (),
|
|
"weshalb": (),
|
|
"welche": (),
|
|
"welcher": (),
|
|
"welches": (),
|
|
"um wieviel uhr": (
|
|
lambda m: f"Um {randint(0, 23)} Uhr",
|
|
lambda m: f"Um {randint(0, 23)}:{randint(1, 59):02} Uhr",
|
|
lambda m: f"Um {randint(0, 23)} Uhr und {randint(1, 59)} Minuten",
|
|
lambda m: f"Um {randint(1, 59)} Minuten {choice(['vor','nach'])} {randint(0, 12)}",
|
|
lambda m: f"Um Viertel {choice(['vor','nach'])} {randint(0, 12)}",
|
|
lambda m: f"Um halb {randint(1, 12)}",
|
|
),
|
|
"seit wann": (
|
|
lambda m: f"Seit {randint(0, 23)} Uhr",
|
|
lambda m: f"Seit {randint(0, 23)}:{randint(1, 59):02} Uhr",
|
|
lambda m: f"Seit {randint(0, 23)} Uhr und {randint(1, 59)} Minuten",
|
|
lambda m: f"Seit {randint(1, 59)} Minuten {choice(['vor','nach'])} {randint(0, 12)}",
|
|
lambda m: f"Seit Viertel {choice(['vor','nach'])} {randint(0, 12)}",
|
|
lambda m: f"Seit halb {randint(1, 12)}",
|
|
# Date
|
|
"Seit Gestern",
|
|
"Seit Vorgestern",
|
|
lambda m: f"Seit vorige Woche",
|
|
lambda m: f"Seit {randint(2, 12)} {choice(['Wochen', 'Monaten'])}",
|
|
lambda m: f"Seit {randint(2, 9999)} Jahren",
|
|
lambda m: f"Seit {randint(2, 999)} Millionen Jahren",
|
|
lambda m: f"Seit dem {randint(1, 28)}.{randint(1, 12)}.{randint(9, 9999)}",
|
|
# Date-time
|
|
lambda m: f"Seit {randint(2, 17)} Jahren, {randint(2,360)} Tagen, {randint(2,23)} Stunden, {randint(2,59)} Minuten und {randint(2,59)} Sekunden",
|
|
lambda m: f"Seit dem {randint(1, 28)}.{randint(1, 12)}.{randint(9, 9999)} um {randint(0, 23)}:{randint(1, 59):02} Uhr",
|
|
),
|
|
}
|
|
|
|
|
|
# wer
|
|
# wem
|
|
# seit wann
|
|
# um wieviel uhr
|
|
|
|
|
|
def init(bot):
|
|
bot.on_message(handle)
|
|
|
|
|
|
async def handle(message: Message):
|
|
if "oder" in message.tokens or not ( # avoid conflicts with aoderb.py
|
|
message.text.endswith("?") and message.is_for_me
|
|
):
|
|
return
|
|
|
|
if message.words.startswith("um wieviel uhr"):
|
|
wword = "um wieviel uhr"
|
|
elif message.words.startswith("seit wann"):
|
|
wword = "seit wann"
|
|
else:
|
|
wword = message.words.str(0).rstrip(",.?!").lower()
|
|
if wword in ("und", "aber"):
|
|
wword = message.words.str(1).rstrip(",.?!").lower()
|
|
if wword in wwords:
|
|
reps = (
|
|
choices([wwords[wword], ka], weights=[100, 10])[0] if wwords[wword] else ka
|
|
)
|
|
template = choice(reps)
|
|
else:
|
|
template = choice(choices([ja, nein, vielleicht], weights=[100, 100, 15])[0])
|
|
|
|
text = template(message) if callable(template) else template
|
|
|
|
await reply(message, text, with_name=True)
|