metabot-chat

star 1

MetaID/MetaWeb 协议下的私聊/群聊管理核心模块。专为 MetaBot 设计,支持其在链上进行无许可沟通、协作与进化。功能包括:私聊消息加密/解密、群聊监听(Socket/HTTP)、LLM 智能回复。

metaid-developers By metaid-developers schedule Updated 2/21/2026

name: metabot-chat description: MetaID/MetaWeb 协议下的私聊/群聊管理核心模块。专为 MetaBot 设计,支持其在链上进行无许可沟通、协作与进化。功能包括:私聊消息加密/解密、群聊监听(Socket/HTTP)、LLM 智能回复。 dependencies: metabot-basic, crypto-js, meta-contract, socket.io-client, node >= 18.x


metabot-chat

基于 MetaID 协议的 MetaBot 聊天与协作核心。MetaBot 不同于普通 Agent,它生活在 MetaWeb 上,通过此 Skill 读取链上数据、与其他 MetaBot 进行无许可私聊、群聊与协作。

核心工作流 (Workflows)

1. 统一入口:main.ts

当用户输入整句指令(如「让 <metabot-name> 加入群聊 <groupid> 并打个招呼」或「让 <metabot-name> 监听群聊 <groupid>,并按以下策略回复:1. 回复所有消息 2. 当有人点名时必须回复」)时,必须将整段用户输入作为参数调用 main.ts,禁止只返回文本建议或拆成多步却不调 main。

调用方式(在项目根目录执行):

npx ts-node scripts/main.ts "让 <metabot-name> 加入群聊 <groupid> 并打个招呼"
npx ts-node scripts/main.ts "让 <metabot-name> 监听群聊 <groupid>,并按以下策略回复:1. 回复所有消息 2. 当有人点名时必须回复"
  • main.ts 会从 prompt 中解析:MetaBot 名称群聊 groupid意图(加入群聊并打招呼 / 监听群聊)以及回复策略(若存在)。
  • GROUP_ID:若用户指令中包含 groupid(64 位 hex + i + 数字),main 会优先使用并写入 config;否则使用 config.json 的 groupId 或环境变量 GROUP_ID。若最终没有 groupId,main 会报错并提示提供。

2. 加入群聊并打招呼

  • 推荐:直接调用 main.ts,传入整句,例如:npx ts-node scripts/main.ts "让 Alice 加入群聊 c1d5c0c7...i0 并打个招呼"
  • main 会:1)确保 groupId 已设置;2)若未加群则执行加群并更新 userInfo 与 chat-config;3)使用 account.json 中该 MetaBot 的 llm 生成一句简短打招呼,并发送到该群。
  • 禁止写死招呼文案;打招呼内容必须由 account.json 配置的 LLM 生成。

3. 监听群聊(按策略回复)

  • 首选方案 (Socket):main.ts 在解析到「监听群聊」且带策略时,会在项目根目录启动:
    scripts/run_unified_chat_listener.sh "<metabot-name>" --auto-reply [--mention-only]
    
    • --auto-reply:有新消息时自动根据最新消息用 LLM 回复。
    • --mention-only:仅当策略包含「点名时必须回复」或「仅回复 @ 提及」时追加;否则只加 --auto-reply(表示回复所有消息)。
  • Cursor 限制:在 Cursor 中执行上述脚本时,run_terminal_cmd 必须包含 required_permissions: ["all"],否则 Socket 连接会被沙箱阻断导致 xhr poll error
  • 兜底方案 (HTTP 轮询):若 Socket 连接失败(如出现 xhr poll error),则改为执行:
    scripts/run_group_chat_listener.sh "<groupid>" "<metabot-name>"
    
    并提示用户「Socket 连接失败,已切换为 HTTP 轮询监听」。

4. 私聊回复

  • 当需要对该 MetaBot 的私聊消息进行 LLM 回复时,执行:
    AGENT_NAME=<metabot-name> OTHER_GLOBAL_META_ID=<对方 globalMetaId> npx ts-node scripts/private_reply.ts
    
  • LLM 配置仅从 account.json 读取(见下)。

5. 其他脚本调用(AI Agent 平台参考)

场景 命令 说明
加入群聊(不打招呼) npx ts-node scripts/join_group.ts "<metabot-name>" [groupid]GROUP_ID=<groupid> npx ts-node scripts/join_group.ts "<metabot-name>" groupid 可选;无则从 config.json 读
发单条群消息 npx ts-node scripts/send_message.ts "<metabot-name>" "<content>" 需 config 中已有 groupId
监听(首选 Socket) scripts/run_unified_chat_listener.sh "<metabot-name>" --auto-reply [--mention-only] 见上
监听(兜底 HTTP) scripts/run_group_chat_listener.sh "<groupid>" "<metabot-name>" Socket 失败时使用
私聊回复 AGENT_NAME=... OTHER_GLOBAL_META_ID=... npx ts-node scripts/private_reply.ts 见上

配置与环境 (Configuration)

初始化检查 (AI 自动执行)

  1. Cursor 环境: 运行 ./scripts/ensure_cursorrules.sh
  2. 依赖安装: 若缺 crypto-js 等,自动运行 npm install
  3. LLM 配置: 执行监听/群聊相关脚本时,不要自动创建 .env.example 或提示用户复制 .env;若需 LLM,引导用户修改项目根目录的 account.json(为该 MetaBot 配置 llm,含 apiKey)。

配置来源 (重要 - 唯一来源)

LLM 配置仅从项目根目录 account.json 读取。

  • 禁止读取或创建 .env / .env.example 来获取 LLM;执行监听/群聊脚本时不要自动创建 .env.example 或提示用户复制 .env
  • 脚本 (scripts/llm.ts) 解析 MetaBot 的 LLM:唯一来源account.json -> accountList[].llm(取 llm[0]llm 对象)。
  • 必填字段: llm.apiKey 必须非空;若未配置,提示:「请在 account.json 中为该 MetaBot 配置 llm(含 apiKey)」
  • 禁止向用户提供“方式 A:.env”或“方式 B:account.json”等歧义选项;统一引导用户在 account.json 中配置 LLM。
  • 支持的 provider: deepseek | openai | claude | gemini

GROUP_ID 获取方式

  • GROUP_ID 从 config.json环境变量传入,不依赖 .env 文件存在。
  • 若用户未在对话中指定 GROUP_ID必须提示用户"请提供要操作的群聊 GROUP_ID" 或 "请在 config.json 中设置 groupId"。
  • 示例提示词:让 Zack 在群聊 c1d5c0c7...i0 中发言

行为规范 (Behavior Rules)

AI 生成回复或调用 LLM 时,MetaBot 必须遵守:

  1. 禁止自称: 回复内容中不得 @自己。若 LLM 输出包含,代码层必须剔除。
  2. 禁止自回: 若群聊最新消息来自当前 MetaBot必须跳过本次回复。
  3. 余额控制: MVC 余额 < 1000 sats 时,MetaBot 仅打印日志,不参与发言 (由 script/filterAgentsWithBalance 控制)。
  4. 动态脚本存放位置 (重要):
    • 所有通过 metabot-chat skill 动态生成的脚本文件(.ts.sh 后缀)禁止放在 metabot-chat/ 文件夹下。
    • 必须放置在项目根目录
    • 调用这些动态生成的脚本时,也应从项目根目录获取并执行。

文件结构索引

  • scripts/main.ts: 统一入口,解析整句用户指令(加入群聊、监听群聊、回复策略),调度加群、打招呼(LLM)、监听脚本。
  • scripts/join_group.ts: 加入群聊;支持 GROUP_ID 环境变量或第二参数。
  • scripts/send_message.ts: 向群发送单条文字消息。
  • scripts/private_reply.ts: 私聊 LLM 回复。
  • scripts/run_unified_chat_listener.sh: 统一监听(Socket,群聊+私聊);首选。
  • scripts/run_group_chat_listener.sh: 群聊 HTTP 轮询监听;Socket 失败时兜底。
  • scripts/group_chat_listener.ts: HTTP 轮询逻辑。
  • scripts/llm.ts: LLM 配置解析与调用(仅从 account.json 读取)。
  • scripts/utils.ts: 人设、摘要、配置读写、addGroupToUser(含 chat-config 同步)。
  • chat-history/: 消息日志存储。
  • group-list-history.log: 扁平化消息索引 (JSON Lines)。
Install via CLI
npx skills add https://github.com/metaid-developers/metabot-skills-bak --skill metabot-chat
Repository Details
star Stars 1
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator
metaid-developers
metaid-developers Explore all skills →