From 2424d5a43ee545a0aa6ad07602bfc804516312df Mon Sep 17 00:00:00 2001 From: clockblocker <asde3211q@gmail.com> Date: Tue, 4 Jan 2022 14:28:28 +0300 Subject: [PATCH] @all --- clockblocker_bot/actions/basic.py | 23 +++++++++++-- clockblocker_bot/utils/decorators.py | 51 ++++++++++++++++------------ 2 files changed, 50 insertions(+), 24 deletions(-) diff --git a/clockblocker_bot/actions/basic.py b/clockblocker_bot/actions/basic.py index 8d3f46c..fd95fb3 100644 --- a/clockblocker_bot/actions/basic.py +++ b/clockblocker_bot/actions/basic.py @@ -34,7 +34,7 @@ async def show_help(event: events.NewMessage.Event): events.NewMessage(pattern=r"\W*[пП]+\s*[рР]+\s*[иИ]+\s*[вВ]+\s*[Ее]+\s*[тТ]+\W*") ) @ignore_with_id(CLOCKBLOCKER_ID) -@beware_the_croud_policy +@beware_the_croud_policy(config.telegram_client) @mark_unread @clean_up_policy async def ci(event: events.NewMessage.Event): @@ -86,4 +86,23 @@ async def zoomers(event: events.NewMessage.Event): @mark_unread @clean_up_policy async def zoomer(event: events.NewMessage.Event): - return await event.respond("уууу тиктокер") \ No newline at end of file + return await event.respond("уууу тиктокер") + + +@config.telegram_client.on(events.NewMessage(pattern=".*@all.*", forwards=False)) +@mark_unread +@beware_the_croud_policy(config.telegram_client) +async def mention_all(event: events.NewMessage.Event): + if event.is_group: + chat = await event.get_chat() + participants = [] + async for participant in config.telegram_client.iter_participants(chat): + if participant.username: + if participant.username.lower().endswith("bot"): + continue + participants.append(f"@{participant.username}") + else: + participants.append( + f"[{participant.first_name}](tg://user?id={participant.id})" + ) + await event.respond(" ".join(participants)) diff --git a/clockblocker_bot/utils/decorators.py b/clockblocker_bot/utils/decorators.py index 089e86e..58f94da 100644 --- a/clockblocker_bot/utils/decorators.py +++ b/clockblocker_bot/utils/decorators.py @@ -39,17 +39,17 @@ def only_with_id(id): return only_inner -# def only_clockblocker(f): -# @functools.wraps(f) -# async def wrapper(event: events.NewMessage.Event): -# try: -# if event.message.from_id == CLOCKBLOCKER_ID: -# await f(event) +def only_clockblocker(f): + @functools.wraps(f) + async def wrapper(event: events.NewMessage.Event): + try: + if event.message.from_id == CLOCKBLOCKER_ID: + await f(event) -# except Exception as e: -# logger.error(f"Exception found: {e}") + except Exception as e: + logger.error(f"Exception found: {e}") -# return wrapper + return wrapper def mark_unread(f): @@ -78,18 +78,25 @@ def clean_up_policy(f): return wrapper -def beware_the_croud_policy(f): - @functools.wraps(f) - async def wrapper(event: events.NewMessage.Event): - try: - chat: chat_union = await event.get_chat() - ok = isinstance(chat, types.User) - if isinstance(chat, types.Chat) or isinstance(chat, types.Channel): - ok = chat.participants_count < 20 - if ok: - await f(event) +def beware_the_croud_policy(telegram_client): + print(telegram_client) + def beware_the_croud_policy_inner(f): + @functools.wraps(f) + async def wrapper(event: events.NewMessage.Event): + try: + chat: chat_union = await event.get_chat() + participants = [] + async for participant in telegram_client.iter_participants(chat): + participants.append(participant) + if isinstance(chat, types.Chat) or isinstance(chat, types.Channel): + ok = len(participants) < 50 + if ok: + await f(event) - except Exception as e: - logger.error(f"Exception found: {e}") + except Exception as e: + logger.error(f"Exception found: {e}") - return wrapper + return wrapper + return beware_the_croud_policy_inner + + -- GitLab