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