From 88b7eabe146adec4b94359edfc9f14b5238c021a Mon Sep 17 00:00:00 2001 From: "Yuyao Huang (Sam)" Date: Sun, 29 Mar 2026 18:14:46 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=8A=82=E7=82=B9=E8=B7=9F=E8=B8=AA):=20?= =?UTF-8?q?=E6=94=B9=E8=BF=9B=E7=94=A8=E6=88=B7=E8=B7=9F=E8=B8=AA=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=B9=B6=E6=B7=BB=E5=8A=A0=E6=96=B0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当新用户首次发送消息时,返回布尔值并通知可用节点。在handler.py中添加对新用户的处理逻辑,当检测到新用户时,向其发送当前在线的节点列表。这有助于新用户更快了解可用资源。 --- bot/handler.py | 9 ++++++++- router/nodes.py | 7 +++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/bot/handler.py b/bot/handler.py index e8404c2..54e7741 100644 --- a/bot/handler.py +++ b/bot/handler.py @@ -132,7 +132,14 @@ async def _process_message(user_id: str, chat_id: str, text: str) -> None: from config import ROUTER_MODE if ROUTER_MODE: from router.nodes import get_node_registry - get_node_registry().track_user(user_id) + registry = get_node_registry() + is_new = registry.track_user(user_id) + if is_new: + nodes = registry.get_nodes_for_user(user_id) + online = [n for n in nodes if n.is_online] + if online: + names = ", ".join(n.display_name for n in online) + await send_text(chat_id, "chat_id", f"Available nodes: {names}") reply = await handle_command(user_id, text) if reply is not None: diff --git a/router/nodes.py b/router/nodes.py index c3fe818..dfd8d09 100644 --- a/router/nodes.py +++ b/router/nodes.py @@ -69,9 +69,12 @@ class NodeRegistry: return True return secret == self._secret - def track_user(self, user_id: str) -> None: - """Record a user as known (has sent at least one message).""" + def track_user(self, user_id: str) -> bool: + """Record a user as known. Returns True if this is their first message.""" + if user_id in self._known_users: + return False self._known_users.add(user_id) + return True def _get_notifiable_users(self, node: NodeConnection) -> Set[str]: """Get users to notify about a node event.