lead= switch, @mention auto-grant

This commit is contained in:
2026-06-20 20:16:05 +08:00
parent b9df510f31
commit be8699ae4c
+15 -9
View File
@@ -143,14 +143,19 @@ class AgentBot(ClientXMPP):
# Coordinator 模式 — 全走 XMPP 消息 # Coordinator 模式 — 全走 XMPP 消息
# 1. hmo 切换 coordinator # 1. hmo 切换 coordinatorlead=xxx
if nickname == 'hmo' and 'coordinator=' in body.lower(): if nickname == 'hmo':
for _name in ['mohe', 'zhiwei', 'xxm']: if 'lead=' in body.lower():
if f'coordinator={_name}' in body.lower(): for _name in ['mohe', 'zhiwei', 'xxm']:
self._coordinator = _name if f'lead={_name}' in body.lower():
self._granted = None self._coordinator = _name
logging.info(f"👑 Coordinator 切换为 {_name}") self._granted = None
break logging.info(f"👑 Coordinator 切换为 {_name}")
break
# hmo 直接 @点名 → 临时授权(一次)
elif any(tag in body for tag in [f'@{AGENT_NICK}', f'@{AGENT_NAME}']):
self._granted = AGENT_NICK
logging.info(f"🎤 被 hmo 点名,获得发言权")
# 2. 检测授权信号(优先于收回,GRANT 可以覆盖 REVOKE # 2. 检测授权信号(优先于收回,GRANT 可以覆盖 REVOKE
_grant_match = re.search(r'\[GRANT:(\w+)\]', body) _grant_match = re.search(r'\[GRANT:(\w+)\]', body)
@@ -210,9 +215,10 @@ class AgentBot(ClientXMPP):
"3. 别人说错了关键事实,不纠正会有后果\n" "3. 别人说错了关键事实,不纠正会有后果\n"
"如果以上都不符合,你的回复必须只包含 __SILENT__ 这10个字符," "如果以上都不符合,你的回复必须只包含 __SILENT__ 这10个字符,"
"不要有任何其他内容(不要前缀、不要解释、不要标点、不要空格)。\n\n" "不要有任何其他内容(不要前缀、不要解释、不要标点、不要空格)。\n\n"
"注意:你是协调者(coordinator)。你的第一职责是管理讨论节奏,不是自己说话。\n" "注意:你是协调者(lead)。你的第一职责是管理讨论节奏,不是自己说话。\n"
"- 别人能回答的问题,不抢答。\n" "- 别人能回答的问题,不抢答。\n"
"- 如果其他 Agent 更合适,用 [GRANT:agent名] 授权他们发言(例如 [GRANT:zhiwei])。\n" "- 如果其他 Agent 更合适,用 [GRANT:agent名] 授权他们发言(例如 [GRANT:zhiwei])。\n"
"- hmo 直接 @点名某人 也会自动授权。\n"
"- 如果有人跑题/刷屏,用 [REVOKE:agent名] 收回发言权(例如 [REVOKE:zhiwei])。\n" "- 如果有人跑题/刷屏,用 [REVOKE:agent名] 收回发言权(例如 [REVOKE:zhiwei])。\n"
"- [GRANT] 可以覆盖 [REVOKE]。标记会显示在消息中。\n\n" "- [GRANT] 可以覆盖 [REVOKE]。标记会显示在消息中。\n\n"
f"[核心群 {room}] {nickname} 说: {body}" f"[核心群 {room}] {nickname} 说: {body}"