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