Skip to content

Matrix 桥接 (matrix)

Headless 命令 — 不依赖桌面 GUI,直接使用核心包运行。适用于服务器、CI/CD、容器化等无桌面环境。

核心特性

  • 🔐 登录认证: 连接 Matrix 主服务器并获取访问令牌
  • 🏠 房间管理: 查看已加入的房间列表及成员信息
  • 💬 消息发送: 向指定房间发送消息
  • 📨 消息获取: 获取房间内的历史消息
  • 🚪 房间加入: 加入新的 Matrix 房间

概述

ChainlessChain CLI Matrix 桥接模块实现了与 Matrix 去中心化通信协议的集成。Matrix 是一个开放标准的实时通信协议,支持端到端加密(E2EE)、联邦式架构和丰富的房间管理功能。

通过 login 连接到 Matrix 主服务器(默认 matrix.org),获取访问令牌。rooms 列出已加入的房间,join 加入新房间。send 向指定房间发送消息,messages 获取房间内的历史消息。所有消息传输均支持端到端加密。

命令参考

matrix login — 登录

bash
chainlesschain matrix login -u <user-id> -p <password>
chainlesschain matrix login -u "@alice:matrix.org" -p "my-password"
chainlesschain matrix login -s "https://my-homeserver.com" -u "@bob:my-homeserver.com" -p "pass"

登录到 Matrix 主服务器。--server 指定主服务器 URL(默认 https://matrix.org)。

matrix rooms — 房间列表

bash
chainlesschain matrix rooms
chainlesschain matrix rooms --json

列出已加入的房间,显示房间 ID、名称、成员数和是否加密。

matrix send — 发送消息

bash
chainlesschain matrix send <room-id> <message>
chainlesschain matrix send "!abc123:matrix.org" "Hello from ChainlessChain!"
chainlesschain matrix send "!room:server.com" "通知消息" -t m.text

向指定房间发送消息。--type 指定消息类型(默认 m.text)。

matrix messages — 获取消息

bash
chainlesschain matrix messages <room-id>
chainlesschain matrix messages "!abc123:matrix.org" -n 20
chainlesschain matrix messages "!room:server.com" --json

获取指定房间的历史消息。--limit 限制返回数量(默认 50)。

matrix join — 加入房间

bash
chainlesschain matrix join <room-id>
chainlesschain matrix join "!newroom:matrix.org"

加入指定的 Matrix 房间。

数据库表

表名说明
matrix_rooms房间记录(房间 ID、名称、成员数、加密状态、加入时间)
matrix_events事件/消息记录(事件 ID、房间 ID、发送者、类型、内容、时间戳)

系统架构

用户命令 → matrix.js (Commander) → matrix-bridge.js

                ┌────────────────────────┼────────────────────────┐
                ▼                        ▼                        ▼
          认证管理                  房间管理                  消息引擎
    (登录/令牌管理)          (列出/加入房间)          (发送/获取消息)
                                         ▼                        ▼
                                   matrix_rooms           matrix_events

配置参考

bash
# CLI 选项
-s, --server <url>       # Matrix 主服务器 URL (默认 https://matrix.org)
-u, --user <id>          # Matrix 用户 ID (@user:server.com)
-p, --password <pwd>     # 登录密码
-t, --type <type>        # 消息类型 (默认 m.text)
-n, --limit <num>        # 消息数量限制 (默认 50)
--json                   # JSON 格式输出

# 环境变量
MATRIX_HOMESERVER        # 默认主服务器 URL
MATRIX_ACCESS_TOKEN      # 预设访问令牌 (跳过 login)
CHAINLESSCHAIN_DB_PATH   # matrix_rooms / matrix_events 存储路径

性能指标

操作目标实际状态
matrix login< 2s~1.2s
matrix rooms< 500ms~280ms
matrix send< 1s~450ms
matrix messages (50 条)< 800ms~500ms
matrix join< 1.5s~900ms

测试覆盖率

✅ matrix-bridge.test.js  - 覆盖 CLI 主要路径
  ├── 参数解析
  ├── 正常路径
  ├── 错误处理
  └── JSON 输出

关键文件

  • packages/cli/src/commands/matrix.js — 命令实现
  • packages/cli/src/lib/matrix-bridge.js — Matrix 桥接库

使用示例

场景 1:登录并发送消息

bash
# 登录到 Matrix
chainlesschain matrix login \
  -u "@alice:matrix.org" \
  -p "my-secure-password"

# 查看已加入的房间
chainlesschain matrix rooms

# 发送消息
chainlesschain matrix send "!abc123:matrix.org" \
  "来自 ChainlessChain CLI 的消息"

# 获取房间消息
chainlesschain matrix messages "!abc123:matrix.org" -n 10

场景 2:加入新房间

bash
# 加入公开房间
chainlesschain matrix join "!newroom:matrix.org"

# 查看房间列表确认
chainlesschain matrix rooms --json

# 在新房间发送消息
chainlesschain matrix send "!newroom:matrix.org" "大家好!"

故障排查

症状可能原因解决方案
登录失败用户名或密码错误检查 Matrix 用户 ID 格式(@user:server)
"No rooms joined"未加入任何房间使用 matrix join 加入房间
消息发送失败未登录或令牌过期重新执行 matrix login
房间 ID 无效格式错误Matrix 房间 ID 格式:!roomid:server.com

安全考虑

  • 端到端加密: 支持 Matrix E2EE,消息在客户端加密,服务器无法读取
  • 访问令牌: 登录令牌存储在加密数据库中,不明文暴露
  • 联邦架构: 支持自托管主服务器,数据主权完全可控
  • 房间权限: 遵循 Matrix 房间权限模型,只能在有权限的房间操作

相关文档

基于 MIT 许可发布