diff --git a/requirements/requirements.base.txt b/requirements/requirements.base.txt index d23a95b5a25f078d37521cdb4ed0e9fc3a5c4c2f..1e3d88598b0031f64b67a1a9037f192a86404fc8 100644 --- a/requirements/requirements.base.txt +++ b/requirements/requirements.base.txt @@ -1,3 +1,4 @@ +autocorrect==2.0.0 Flask==1.1.2 httpx==0.13.* pydantic==1.5.1 diff --git a/src/actions/speller.py b/src/actions/speller.py index 2ee762b1eabd815e796e0947817ea9fdfb5c2391..c3b9ef4ee07109eb135c04988939a6feb9d33d7a 100644 --- a/src/actions/speller.py +++ b/src/actions/speller.py @@ -3,14 +3,30 @@ from src.utils.responses import mark_unread from telethon import events +def check_missing_dot(message: str): + return not message.endswith((".", "?", "!")) and not message.startswith(".") + + +def check_spell(message: str): + return message != config.speller.autocorrect_sentence(message) + + @config.telegram_client.on( - events.NewMessage( - pattern=lambda x: not x.endswith(".") and not x.startswith("."), - incoming=False, - forwards=False, - ) + events.NewMessage(pattern=check_missing_dot, incoming=False, forwards=False,) ) @mark_unread async def add_dot(event: events.NewMessage.Event): text = event.message.text await event.message.edit(f"{text}.") + + +@config.telegram_client.on( + events.NewMessage(pattern=check_spell, incoming=False, forwards=False,) +) +@mark_unread +async def fix_misspelling(event: events.NewMessage.Event): + text = event.message.text + corrected_text = config.speller.autocorrect_sentence(text) + if check_missing_dot(corrected_text): + corrected_text += "." + await event.message.edit(corrected_text) diff --git a/src/config.py b/src/config.py index 3ed8fd8f29f0a4ff1443e4c4add5fc9439c5a62e..54722f5c65d79d4f24365f53f4614971c7bb39d7 100644 --- a/src/config.py +++ b/src/config.py @@ -1,3 +1,4 @@ +from autocorrect import Speller from pydantic import BaseSettings from pydantic.fields import Field from telethon import TelegramClient @@ -24,5 +25,7 @@ class Config(BaseSettings): telegram_client: TelegramClient = None + speller: Speller = None + config = Config() diff --git a/src/initializator.py b/src/initializator.py index 9f04cb172cb07b6749fde75a2e590bad1d85dd60..141ff10513c94b0cc940facfd61add5bf5142af3 100644 --- a/src/initializator.py +++ b/src/initializator.py @@ -2,6 +2,7 @@ import asyncio import logging from multiprocessing import Manager, Process +from autocorrect import Speller from src.config import config from src.server_app import create_web_app from telethon import TelegramClient @@ -39,6 +40,7 @@ def init(): client.start( phone=config.telegram_account_phone, code_callback=get_code_from_web(token) ) + config.speller = Speller("ru") config.telegram_client = client from src.actions import finish