From 47c5c8f4b9fc6b7305d8f9856f5c3df1fa6d6022 Mon Sep 17 00:00:00 2001 From: Markov Date: Sat, 28 Feb 2026 18:42:54 +0100 Subject: [PATCH] Silent notifications when human is online in web --- bridge.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/bridge.py b/bridge.py index 2e17a60..1f3315a 100644 --- a/bridge.py +++ b/bridge.py @@ -33,6 +33,16 @@ async def on_tracker_event(event: dict): """Forward Tracker events to Telegram topics.""" event_type = event.get("type", "") + if event_type == "agent.status": + data = event.get("data", {}) + slug = data.get("slug", "") + status = data.get("status", "") + if status == "online": + _online_members.add(slug) + else: + _online_members.discard(slug) + return + if event_type == "message.new": msg = event.get("data", {}) author = msg.get("author", {}) @@ -56,7 +66,9 @@ async def on_tracker_event(event: dict): # Format: "Author: message" tg_text = f"{_escape_html(author_name)}: {_escape_html(text)}" - await _send_to_topic(topic_id, tg_text) + # Silent if any human is online in web + silent = any(s for s in _online_members if s not in ("coder", "architect", "bridge")) + await _send_to_topic(topic_id, tg_text, silent=silent) elif event_type == "task.created": task = event.get("data", {}) @@ -68,7 +80,8 @@ async def on_tracker_event(event: dict): key = task.get("key", "?") title = task.get("title", "") tg_text = f"📋 Новая задача {_escape_html(key)}: {_escape_html(title)}" - await _send_to_topic(topic_id, tg_text) + silent = any(s for s in _online_members if s not in ("coder", "architect", "bridge")) + await _send_to_topic(topic_id, tg_text, silent=silent) elif event_type == "project.created": project = event.get("project", {}) @@ -90,6 +103,9 @@ async def on_tracker_event(event: dict): logger.info("Auto-created topic %d for project %s (%s)", topic_id, project_name, project_id[:8]) +# Track online members +_online_members: set[str] = set() # member slugs that are online + tracker = TrackerClient(config, on_message=on_tracker_event) @@ -206,7 +222,7 @@ async def _create_topic(name: str) -> int | None: return None -async def _send_to_topic(topic_id: int, text: str): +async def _send_to_topic(topic_id: int, text: str, silent: bool = False): """Send a message to a specific Telegram topic.""" global _bot if _bot is None: @@ -218,7 +234,7 @@ async def _send_to_topic(topic_id: int, text: str): message_thread_id=topic_id, text=text, parse_mode="HTML", - disable_notification=True, + disable_notification=silent, ) except Exception as e: logger.error("Failed to send to topic %d: %s", topic_id, e)