Compare commits
	
		
			2 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						0528e44d07
	
				 | 
					
					
						|||
| df1f6d0470 | 
@ -3,6 +3,7 @@ from typing import Optional
 | 
			
		||||
 | 
			
		||||
MAX_TRIGGER_WORDS = 3
 | 
			
		||||
WORD_PATTERN = re.compile(r"(\w+)")
 | 
			
		||||
NAME_PATTERN = re.compile(r"^[Лл]еночк.*$", re.IGNORECASE)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BrainCell:
 | 
			
		||||
@ -26,8 +27,43 @@ class BrainCell:
 | 
			
		||||
        tokens = WORD_PATTERN.findall(sentence)
 | 
			
		||||
        if not tokens or len(tokens) > MAX_TRIGGER_WORDS:
 | 
			
		||||
            return None
 | 
			
		||||
        return self.be_polite(tokens) or self.say_yes(tokens) or self.say_no(tokens)
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def say_yes(tokens: list[str]) -> Optional[str]:
 | 
			
		||||
        """
 | 
			
		||||
        Always say yes.
 | 
			
		||||
 | 
			
		||||
        :param tokens: Sentence that needs a reply.
 | 
			
		||||
        :return: actual reply.
 | 
			
		||||
        """
 | 
			
		||||
        *_, last_token = tokens
 | 
			
		||||
        last_token_parts = last_token.lower().split("да")
 | 
			
		||||
        if len(last_token_parts) > 1:
 | 
			
		||||
            return f"Пизда{last_token_parts[-1]}."
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def say_no(tokens: list[str]) -> Optional[str]:
 | 
			
		||||
        """
 | 
			
		||||
        Don't you dare refuse me!
 | 
			
		||||
 | 
			
		||||
        :param tokens: Sentence that needs a reply.
 | 
			
		||||
        :return: actual reply.
 | 
			
		||||
        """
 | 
			
		||||
        if len(tokens) == 1 and tokens[0].lower() == "нет":
 | 
			
		||||
            return "Пидора ответ."
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def be_polite(tokens: list[str]) -> Optional[str]:
 | 
			
		||||
        """
 | 
			
		||||
        Be polite when talking to a woman.
 | 
			
		||||
 | 
			
		||||
        :param tokens: Sentence that needs a reply.
 | 
			
		||||
        :return: actual reply.
 | 
			
		||||
        """
 | 
			
		||||
        for token in tokens:
 | 
			
		||||
            if NAME_PATTERN.match(token):
 | 
			
		||||
                return "Какая я тебе нахуй Леночка, хуесос?"
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,26 @@
 | 
			
		||||
from typing import Union
 | 
			
		||||
 | 
			
		||||
import pytest
 | 
			
		||||
 | 
			
		||||
from lenochka.brain.brain_cell import BrainCell
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_replies() -> None:
 | 
			
		||||
@pytest.mark.parametrize(
 | 
			
		||||
    ("sentence", "expected_reply"),
 | 
			
		||||
    [
 | 
			
		||||
        ("Удав", "Пиздав."),
 | 
			
		||||
        ("Дакимакура", "Пиздакимакура."),
 | 
			
		||||
        ("Никак нет", None),
 | 
			
		||||
        ("нет", "Пидора ответ."),
 | 
			
		||||
        ("Уважаемая, Леночка", "Какая я тебе нахуй Леночка, хуесос?"),
 | 
			
		||||
        ("Леночка, принесите кофе", "Какая я тебе нахуй Леночка, хуесос?"),
 | 
			
		||||
        ("Да нет Леночка", "Какая я тебе нахуй Леночка, хуесос?"),
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
def test_replies(sentence: str, expected_reply: Union[str, None]) -> None:
 | 
			
		||||
    """Test reply generator."""
 | 
			
		||||
    cell = BrainCell()
 | 
			
		||||
    assert cell.create_reply("Удав") == "Пиздав."
 | 
			
		||||
    assert cell.create_reply("Дакимакура") == "Пиздакимакура."
 | 
			
		||||
    if expected_reply:
 | 
			
		||||
        assert cell.create_reply(sentence) == expected_reply
 | 
			
		||||
    else:
 | 
			
		||||
        assert cell.create_reply(sentence) is None
 | 
			
		||||
 | 
			
		||||
@ -18,6 +18,6 @@ def talk_to_the_wind() -> None:
 | 
			
		||||
    ears = ConnectionToEars(brain_connection)
 | 
			
		||||
    ears.register_message_handler(
 | 
			
		||||
        brain.think,
 | 
			
		||||
        regexp="да",
 | 
			
		||||
        regexp="(да|нет|леночка)",
 | 
			
		||||
    )
 | 
			
		||||
    world.start_polling(ears)
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,9 @@ nameOverride: "lenochka"
 | 
			
		||||
image:
 | 
			
		||||
  tag: "latest"
 | 
			
		||||
 | 
			
		||||
updateStrategy:
 | 
			
		||||
  type: Recreate
 | 
			
		||||
 | 
			
		||||
service:
 | 
			
		||||
  enabled: false
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user