From 00040a408e475fc3fe7503d4650215a6e4a8ea97 Mon Sep 17 00:00:00 2001
From: Pavel Kirilin <win10@list.ru>
Date: Wed, 1 Jul 2020 00:35:04 +0400
Subject: [PATCH] Big updates. Description: - Added russian mappings for
 currencies. - Added some new replies. - Fixed swearing replies. - Optimized
 some patterns.

TODO: optimize converter.

Signed-off-by: Pavel Kirilin <win10@list.ru>
---
 src/actions/converter.py | 50 ++++++++++++++++++++++++++++++++++++----
 src/actions/fun.py       | 50 +++++++++++++++++++++-------------------
 src/actions/replies.py   | 34 ++++++++++++++++++++++++++-
 src/actions/speller.py   |  0
 4 files changed, 105 insertions(+), 29 deletions(-)
 create mode 100644 src/actions/speller.py

diff --git a/src/actions/converter.py b/src/actions/converter.py
index 8876470..8bd628f 100644
--- a/src/actions/converter.py
+++ b/src/actions/converter.py
@@ -8,6 +8,36 @@ from telethon import events
 
 logger = logging.getLogger(__name__)
 
+CURRENCY_MAPPING = {
+    "фунт": "GBP",
+    "фунта": "GBP",
+    "фунтов": "GBP",
+    "бакс": "USD",
+    "бакса": "USD",
+    "баксов": "USD",
+    "доллар": "USD",
+    "доллара": "USD",
+    "долларов": "USD",
+    "евро": "EUR",
+    "иена": "JPY",
+    "иены": "JPY",
+    "иен": "JPY",
+    "йена": "JPY",
+    "йены": "JPY",
+    "йен": "JPY",
+    "вон": "KRW",
+    "франк": "CHF",
+    "франка": "CHF",
+    "франков": "CHF",
+    "крона": "SEK",
+    "кроны": "SEK",
+    "крон": "SEK",
+    "гривна": "UAH",
+    "гривны": "UAH",
+    "гривен": "UAH",
+    "грiвен": "UAH",
+}
+
 SUPPORTED_CURRENCIES = [
     "GBP",
     "HUF",
@@ -21,10 +51,16 @@ SUPPORTED_CURRENCIES = [
     "KRW",
     "JPY",
 ]
-CURRENCY_PATTERN = rf"\s*((\d+)(\.\d+)?)\s+({'|'.join(SUPPORTED_CURRENCIES)})"
+
+CURRENCY_PATTERN = (
+    rf"\s*((\d+)(\.\d+)?)\s+("
+    rf"{'|'.join(SUPPORTED_CURRENCIES + list(CURRENCY_MAPPING.keys()))})"
+)
 
 
-@config.telegram_client.on(events.NewMessage(pattern=f".*{CURRENCY_PATTERN}.*"))
+@config.telegram_client.on(
+    events.NewMessage(pattern=re.compile(f".*{CURRENCY_PATTERN}.*", re.IGNORECASE))
+)
 @mark_unread
 async def replace_currency(event):
     async with httpx.AsyncClient() as f:
@@ -33,11 +69,17 @@ async def replace_currency(event):
     currencies = response_json["Valute"]
     groups = re.findall(CURRENCY_PATTERN, event.message.message)
     response = "**Полагаясь на текщий курс валют могу сказать следующее:**\n\n"
+    currency_mapper = []
     for group in groups:
         name = group[3]
+        if name in CURRENCY_MAPPING:
+            name = CURRENCY_MAPPING[name]
         val = float(group[0])
-        new_val = val * currencies[name]["Value"]
-        response += f"`{val:.2f} {name} = {new_val:.2f} RUB`\n"
+        new_val = val * currencies[name]["Value"] / currencies[name]["Nominal"]
+        val_id = f"{val:.2f} {name}"
+        if val_id not in currency_mapper:
+            response += f"`{val:.2f} {name} = {new_val:.2f} RUB`\n"
+            currency_mapper.append(val_id)
 
     await event.reply(response)
 
diff --git a/src/actions/fun.py b/src/actions/fun.py
index 2058a59..a559db1 100644
--- a/src/actions/fun.py
+++ b/src/actions/fun.py
@@ -1,5 +1,6 @@
 import logging
 import random
+import re
 
 from src.config import config
 from src.utils.responses import mark_unread
@@ -7,19 +8,19 @@ from telethon import events
 
 logger = logging.getLogger(__name__)
 swearing = [
-    "(И|и)ди нахуй",
-    "(И|и)ди в хуй",
-    "(П|п)ошел нахуй",
-    "(И|и)ди на хуй",
-    "(П|п)ошел на хуй",
-    "(П|п)ошел в пизду",
-    "(П|п)издуй нахуй",
-    "(П|п)издуй на хуй",
-    "(С|с)ъеби нахуй",
-    "(С|с)ъеби на хуй",
-    "(С|с)оси хуй",
-    "(Х|х)уй соси",
-    "(С|с)осать",
+    "[Ии]ди нахуй",
+    "[Ии]ди в хуй",
+    "[Пп]ошел нахуй",
+    "[Ии]ди на хуй",
+    "[Пп]ошел на хуй",
+    "[Пп]ошел в пизду",
+    "[Пп]издуй нахуй",
+    "[Пп]издуй на хуй",
+    "[Сс]ъеби нахуй",
+    "[Сс]ъеби на хуй",
+    "[Сс]оси хуй",
+    "[Хх]уй соси",
+    "[Сс]осать",
 ]
 
 
@@ -50,7 +51,11 @@ async def blyaficate(event: events.NewMessage.Event):
 
 @config.telegram_client.on(
     events.NewMessage(
-        pattern=rf"^({'|'.join(swearing)})\.?.*", forwards=False, outgoing=False
+        pattern=re.compile(
+            rf"^\s*(@s3rius_san,?\s+)?({'|'.join(swearing)})\.?.*", re.IGNORECASE
+        ),
+        forwards=False,
+        outgoing=False,
     )
 )
 @mark_unread
@@ -84,23 +89,20 @@ async def lenochka_reply(event: events.NewMessage.Event):
     await event.reply(
         random.choice(
             [
-                "Какая же ты агрессивная, Леночка.",
+                "Умерь свой пыл, они всего лишь люди.",
                 "Как обычно, верно подметила.",
                 "Тебе норм вообще, Леночка?",
                 "А что-нибудь поинтереснее не могла?",
                 "Завались, Леночка.",
-                "Паучье чутьё подсказывает мне, что это плохая шутка.",
-                "За такое поведение отправляют в EPAM поломойкой.",
-                "Аккуратнее будь.",
-                "Необучаемая дурочка.",
-                "Вот эти твои приколы уже достали.",
-                "Другого от тебя и не ожидал.",
+                "Дa иди ты нахуй уже, сука.",
+                "Где твои дaмские манеры?" "Аккуратнее будь.",
                 "У меня складывается ощущение, что ты бот.",
+                "Дa-дa-дa, это я уже где-то слышал.",
                 "Пока ребята не видят, может сходим ко мне на сервер?",
                 "Какая же ты смешная.",
-                "Думай прежде чем говорить такое.",
-                "Вспоминай всех богов, что тебе известны и начинай молиться.",
-                "Знаешь, что говорит один бот другому боту? Встретимся в /tmp.",
+                "1101000010100001110100001011111011010001100000011101"
+                "0000101110000010000011010001100001011101000110000011"
+                "110100001011100100101110",
             ]
         )
     )
diff --git a/src/actions/replies.py b/src/actions/replies.py
index 96ddbfc..1df60a1 100644
--- a/src/actions/replies.py
+++ b/src/actions/replies.py
@@ -1,5 +1,6 @@
 import logging
 import random
+import re
 
 from src.config import config
 from src.utils.responses import mark_unread
@@ -23,7 +24,38 @@ async def welcome(event: events.ChatAction.Event):
         )
 
 
-@config.telegram_client.on(events.NewMessage(pattern=r"^(П|п)ривет\.?", forwards=False))
+@config.telegram_client.on(
+    events.NewMessage(
+        pattern=re.compile(r"^[Пп]ривет\.?", re.IGNORECASE), forwards=False
+    )
+)
 @mark_unread
 async def hello(event):
     await event.respond(random.choice(["Здравствуте!", "Добрый день!", "Приветствую."]))
+
+
+@config.telegram_client.on(events.NewMessage(pattern=r"^\)+\.?$", outgoing=False))
+@mark_unread
+async def smile(event: events.NewMessage.Event):
+    await event.respond(event.message.message)
+
+
+@config.telegram_client.on(
+    events.NewMessage(
+        pattern=re.compile(r"^[Зз]дарова\s+(,\s*)?ебать\.?$", re.IGNORECASE),
+        outgoing=False,
+        forwards=False,
+    )
+)
+@mark_unread
+async def hello_fucker(event: events.NewMessage.Event):
+    await event.respond(
+        random.choice(
+            [
+                "Чего тебе, дружок?",
+                "И что ты хотел?",
+                "Ну, здравствуй.",
+                "И вам не хворать.",
+            ]
+        )
+    )
diff --git a/src/actions/speller.py b/src/actions/speller.py
new file mode 100644
index 0000000..e69de29
-- 
GitLab