diff --git a/clockblocker_bot/actions/basic.py b/clockblocker_bot/actions/basic.py
index 8d3f46c9aff566141172751ce9e1ff963a1f6cee..fd95fb3115e2b571f7495d917c1467b717b81458 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 089e86eeecdcf94187a75e57c9992e62e96f951e..58f94da20594e785bfdb156c808b6cd5342b6b2c 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
+
+