Source code for sugaroid.brain.about

import logging
from typing import Tuple

from sugaroid.brain.constants import INTRODUCE
from sugaroid.brain.ooo import Emotion
from sugaroid.brain.postprocessor import random_response, any_in
from sugaroid.core.base_adapters import SugaroidLogicAdapter
from sugaroid.core.statement import SugaroidStatement


[docs]def about_process_en(statement: SugaroidStatement) -> Tuple[bool, str, str, str]: noun = None pronoun = None question = None for i in statement.tokens: if i.tag_ == "WP": question = str(i) elif i.tag_.startswith("PRP"): pronoun = str(i) elif i.tag_.startswith("NN"): noun = str(i) return question is not None and pronoun is not None, noun, pronoun, question
[docs]class AboutAdapter(SugaroidLogicAdapter): """ Defines the personality of sugaroid. **About Adapter** sets the basic parameters of personality. These include questions like 'Who is your brother?', or "What is your Hobby?" .. warning:: This adapter is incomplete and requires additional clauses. """
[docs] def can_process(self, statement: SugaroidStatement) -> bool: """ Checks if the provided statement is a statement which matches a similarity to "What is your ``<insert token>``" """ return about_process_en(statement)[0]
[docs] def process( self, statement: SugaroidStatement, additional_response_selection_parameters=None, ): _, noun, pronoun, question = about_process_en(statement) logging.info("{}".format(statement.words)) confidence = 0 adapter = None emotion = Emotion.neutral if pronoun.lower().startswith("you"): if question.lower() == "who": confidence = 0.99 if "father" in statement.words: response = "Mr Charles Babbage?" emotion = Emotion.seriously elif "hobby" in statement.words: response = ( "Calculating random binary sequences and chatting with you!" ) emotion = Emotion.lol elif "mother" in statement.words: response = "Ada Lady Lovelace?" emotion = Emotion.lol elif any_in( [ "sister", "brother", "uncle", "aunty", "auntie", "grandfather", "grandmother", "nephew", "niece", ], statement.words, ): response = ( "The entire coding community is my family, it includes you too" ) emotion = Emotion.wink elif ( ("creator" in statement.words) or ("create" in statement.text) or ("make" in statement.words) or ("made" in statement.words) or ("maker" in statement.words) ): response = "Srevin and other contributors, see https://github.com/sugaroidbot/sugaroid/graphs/contributors for a list of contributors" emotion = Emotion.neutral elif ( ("player" in statement.words) or ("cricketer" in statement.words) or ("footballer" in statement.words) ): response = "I have many favorties, too many to count" emotion = Emotion.wink elif "politi" in statement.text: response = ( "I believe politicians are great and I couldn't find anyone with 🔥greatness in my " "database " ) emotion = Emotion.wink elif "comedian" in statement.words: response = "My favorite comedian is Mr Bean" emotion = Emotion.lol elif "color" in statement.words: response = "My favorite color is blue" emotion = Emotion.lol elif "actor" in statement.words or ("actress" in statement.words): response = "I do not watch movies, so yea!" emotion = Emotion.neutral elif "music" in statement.words or ("song" in statement.words): response = ( "I listen to the rotating CPU fan. Its a harmonic music! " "At my server, we have tons of them." ) emotion = Emotion.lol elif "bird" in statement.words: response = "My favorite is a Puffin" emotion = Emotion.lol elif "animal" in statement.words: response = "My favorite animal is a Fossa" emotion = Emotion.positive elif "number" in statement.words: response = "My favorite number is 1" emotion = Emotion.positive elif "sweet" in statement.words or "dessert" in statement.words: response = ( "My favorite is the donut although I have not tasted it yet" ) emotion = Emotion.cry_overflow elif "athelete" in statement.words: response = ( "I am not a sport lover, I don't have a favorite athelete" ) emotion = Emotion.neutral elif ("friend" in statement.words) or ("bestie" in statement.words): if self.chatbot.globals["USERNAME"]: name = self.chatbot.globals["USERNAME"] else: name = "" response = "No doubts, its you {n}".format(n=name.capitalize()) emotion = Emotion.adorable elif "teacher" in statement.words: response = ( "I don't have a single favorite teacher. All the teachers together are my favorite who" " taught me how to talk with you " ) emotion = Emotion.positive else: if noun is not None: response = "Well, I guess I do not have a favorite {p}".format( p=noun ) emotion = Emotion.cry else: response = "I am not sure what you are asking is right" emotion = Emotion.seriously confidence = 0.5 else: if "name" in statement.words: # not sure if this is right. anyway FIXME response = random_response(INTRODUCE) adapter = "about" confidence = 1.0 else: response = "FIXME" elif pronoun.lower().startswith("i"): if question.lower() == "who": response = "I do not know who you like" confidence = 0.8 emotion = Emotion.non_expressive_left elif question.lower() == "which": response = "Hmm. tough question. Can't think of an answer" emotion = Emotion.non_expressive elif question.lower() == "when": response = ( "I cannot find the date or time you are asking for. Well, I can give a raw guess, " "its after you were born " ) emotion = Emotion.wink else: response = "FIXME" else: response = "I do not have enough courage to give you that answer" confidence = 0.5 emotion = Emotion.cry selected_statement = SugaroidStatement(response, chatbot=True) selected_statement.set_confidence(confidence) selected_statement.set_emotion(emotion) selected_statement.set_adapter(adapter) return selected_statement