From 79945b758d879395428eccac0320a1dfcab0f22f Mon Sep 17 00:00:00 2001
From: Pavel Kirilin <win10@list.ru>
Date: Mon, 29 Jun 2020 02:39:58 +0400
Subject: [PATCH] Marking chats as unread. Description: - All replied messages
 marked as unread. - Added answers for lenochka.

Signed-off-by: Pavel Kirilin <win10@list.ru>
---
 src/actions/basic.py           |  5 +++++
 src/actions/fun.py             |  4 ++++
 src/actions/package_indexes.py |  6 +++++-
 src/actions/replies.py         |  5 ++++-
 src/actions/search_engines.py  |  3 ++-
 src/utils/responses.py         | 15 ++++++++++++++-
 6 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/src/actions/basic.py b/src/actions/basic.py
index a62a539..4462dfd 100644
--- a/src/actions/basic.py
+++ b/src/actions/basic.py
@@ -5,11 +5,13 @@ import pytz
 from telethon import events
 
 from src.config import config
+from src.utils.responses import mark_unread
 
 logger = logging.getLogger(__name__)
 
 
 @config.telegram_client.on(events.NewMessage(pattern="^.h$"))
+@mark_unread
 async def show_help(event):
     with open("./static_messages/help.txt") as f:
         contents = f.read()
@@ -17,6 +19,7 @@ async def show_help(event):
 
 
 @config.telegram_client.on(events.NewMessage(pattern="^.ci"))
+@mark_unread
 async def ci(event):
     with open("./static_messages/app.info") as f:
         contents = f.read()
@@ -24,6 +27,7 @@ async def ci(event):
 
 
 @config.telegram_client.on(events.NewMessage(pattern="^.t$"))
+@mark_unread
 async def show_time(event):
     tz = pytz.timezone("Europe/Moscow")
     now = datetime.utcnow()
@@ -33,6 +37,7 @@ async def show_time(event):
 
 
 @config.telegram_client.on(events.NewMessage(pattern=".*@all.*", forwards=False))
+@mark_unread
 async def mention_all(event: events.NewMessage.Event):
     if event.is_group:
         chat = await event.get_chat()
diff --git a/src/actions/fun.py b/src/actions/fun.py
index d4fe0ad..0d9a9a8 100644
--- a/src/actions/fun.py
+++ b/src/actions/fun.py
@@ -4,6 +4,7 @@ import random
 from telethon import events
 
 from src.config import config
+from src.utils.responses import mark_unread
 
 logger = logging.getLogger(__name__)
 swearing = [
@@ -24,6 +25,7 @@ swearing = [
 
 
 @config.telegram_client.on(events.NewMessage(pattern=r"^\.bl (.*)", forwards=False))
+@mark_unread
 async def blyaficate(event: events.NewMessage.Event):
     message = event.message.message.lstrip(".bl ").strip()
     response = ""
@@ -51,6 +53,7 @@ async def blyaficate(event: events.NewMessage.Event):
         pattern=rf"^({'|'.join(swearing)})\.?.*", forwards=False, outgoing=False
     )
 )
+@mark_unread
 async def swearing_reply(event):
     await event.reply(
         random.choice(
@@ -76,6 +79,7 @@ async def swearing_reply(event):
 @config.telegram_client.on(
     events.NewMessage(from_users=["clockblocker_tests_bot"], forwards=False)
 )
+@mark_unread
 async def lenochka_reply(event: events.NewMessage.Event):
     await event.reply(
         random.choice(
diff --git a/src/actions/package_indexes.py b/src/actions/package_indexes.py
index e0c79d7..3f81230 100644
--- a/src/actions/package_indexes.py
+++ b/src/actions/package_indexes.py
@@ -7,7 +7,7 @@ from telethon import events
 
 from src.config import config
 from src.utils.library_package import get_library_info, render_package_info
-from src.utils.responses import failed_search_answer
+from src.utils.responses import failed_search_answer, mark_unread
 
 logger = logging.getLogger(__name__)
 
@@ -19,6 +19,7 @@ class PackageIndex:
 
 
 @config.telegram_client.on(events.NewMessage(pattern=r"^\.pip (.*)"))
+@mark_unread
 async def find_py_package(event: events.NewMessage.Event):
     package_name = event.pattern_match.group(1).strip()
     async with httpx.AsyncClient() as client:
@@ -41,6 +42,7 @@ async def find_py_package(event: events.NewMessage.Event):
 
 
 @config.telegram_client.on(events.NewMessage(pattern=r"^\.cargo (.*)"))
+@mark_unread
 async def find_rs_package(event: events.NewMessage.Event):
     package_name = event.pattern_match.group(1).strip()
     async with httpx.AsyncClient() as client:
@@ -65,6 +67,7 @@ async def find_rs_package(event: events.NewMessage.Event):
 
 
 @config.telegram_client.on(events.NewMessage(pattern=r"^\.aur (.*)"))
+@mark_unread
 async def find_aur_package(event: events.NewMessage.Event):
     package_name = event.pattern_match.group(1).strip()
     async with httpx.AsyncClient() as client:
@@ -93,6 +96,7 @@ async def find_aur_package(event: events.NewMessage.Event):
 
 
 def mapper_function(index: PackageIndex):
+    @mark_unread
     async def function(event):
         package_name = event.pattern_match.group(1).strip()
         response_str = await get_library_info(
diff --git a/src/actions/replies.py b/src/actions/replies.py
index 3fff6b0..30a377f 100644
--- a/src/actions/replies.py
+++ b/src/actions/replies.py
@@ -4,11 +4,13 @@ import random
 from telethon import events
 
 from src.config import config
+from src.utils.responses import mark_unread
 
 logger = logging.getLogger(__name__)
 
 
 @config.telegram_client.on(events.ChatAction())
+@mark_unread
 async def welcome(event: events.ChatAction.Event):
     if event.user_joined or event.user_added:
         await event.respond(
@@ -23,7 +25,8 @@ async def welcome(event: events.ChatAction.Event):
 
 
 @config.telegram_client.on(events.NewMessage(pattern=r"^(П|п)ривет\.?", forwards=False))
+@mark_unread
 async def hello(event):
     await event.respond(
-        random.choice(["Привет!", "Добрый день!", "Добрейший вечерочек!"])
+        random.choice(["Здравствуй!", "Добрый день!", "Добрейший вечерочек!"])
     )
diff --git a/src/actions/search_engines.py b/src/actions/search_engines.py
index 4a2e6b4..4c604f6 100644
--- a/src/actions/search_engines.py
+++ b/src/actions/search_engines.py
@@ -5,12 +5,13 @@ import httpx
 from telethon import events
 
 from src.config import config
-from src.utils.responses import failed_search_answer, thinking
+from src.utils.responses import failed_search_answer, mark_unread, thinking
 
 logger = logging.getLogger(__name__)
 
 
 @config.telegram_client.on(events.NewMessage(pattern=r"^\.i (.*)", forwards=False))
+@mark_unread
 @thinking
 async def search_images(event: events.NewMessage.Event):
     query_str = event.pattern_match.group(1).strip()
diff --git a/src/utils/responses.py b/src/utils/responses.py
index 4673a7e..e94d0f0 100644
--- a/src/utils/responses.py
+++ b/src/utils/responses.py
@@ -3,7 +3,7 @@ import functools
 import logging
 import random
 
-from telethon import events
+from telethon import events, functions
 
 logger = logging.getLogger(__name__)
 
@@ -59,3 +59,16 @@ def thinking(f):
         await message.delete()
 
     return updated_function
+
+
+def mark_unread(f):
+    @functools.wraps(f)
+    async def wrapper(event: events.NewMessage.Event):
+        try:
+            await f(event)
+        except Exception as e:
+            logger.error(f"Exception found: {e}")
+        chat = await event.get_chat()
+        functions.messages.MarkDialogUnreadRequest(chat, unread=True)
+
+    return wrapper
-- 
GitLab