import random
import requests
from chatterbot.logic import LogicAdapter
from sugaroid.core.base_adapters import SugaroidLogicAdapter
from sugaroid.core.statement import SugaroidStatement
from sugaroid.brain.ooo import Emotion
from sugaroid.brain.preprocessors import normalize
[docs]class JokeAdapter(SugaroidLogicAdapter):
"""
Gets a random joke from the v2.joke api
"""
[docs] def can_process(self, statement: SugaroidStatement) -> bool:
if (
("tell" in statement.words)
or ("say" in statement.words)
or ("crack" in statement.words)
) and ("joke" in statement.words):
return True
elif (len(statement.words) == 1) and (
self.chatbot.lp.similarity("joke", statement.text) >= 0.9
):
return True
elif "joke" in statement.words:
return True
return False
[docs] def process(
self,
statement: SugaroidStatement,
additional_response_selection_parameters=None,
):
# https://github.com/pratishrai/doraemon/blob/302a78f8ace4b4675f3cd293dce101ea448b3e13/cogs/fun.py#L1
try:
response2 = requests.get(
"https://v2.jokeapi.dev/joke/Any?blacklistFlags=nsfw,religious,political,racist,sexist,explicit"
).json()
try:
joke = response2["joke"]
except KeyError:
setup = response2["setup"]
delivery = response2["delivery"]
if self.chatbot.globals["rich"]:
joke = f"{setup}\n\n<i>{delivery}</i>"
else:
joke = f"{setup}\n\n{delivery}"
except Exception as e:
joke = f"I think I am a joke sometimes.. {e}"
selected_statement = SugaroidStatement(joke, chatbot=True)
selected_statement.set_confidence(1)
selected_statement.set_emotion(Emotion.lol)
return selected_statement