diff --git a/src/actions/basic.py b/src/actions/basic.py index a62a539b219afc1ba6d341ceacbd758837477bce..4462dfd70009463efd0fbe68071022d4fd3ad4e0 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 d4fe0adeff6fdbb96cb4a5084b041538910adcc4..0d9a9a8f34cec4268130ddad46554b6d2f64240c 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 e0c79d7c9b19aeac92fc4d8065b71a7532165b3b..3f81230de5ed5e78e933c674fc1e18145cae4120 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 3fff6b03c7c91336364e616b12f4798b4242bcc1..30a377f8f2d1b362a580b8b61dbdbf7b04741138 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 4a2e6b4c41801852ce25068fdf4830fce5b77a80..4c604f6bfa331373f79e45360053f718813773da 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 4673a7e67102d4a76ed8c447ef7d32b3fd0b4144..e94d0f0bb9799e9d542aa0d971dcc073d6344c2d 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