openclaw-rocketchat 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.en.md +694 -0
- package/README.md +730 -0
- package/dist/cli/add-bot.d.ts +2 -0
- package/dist/cli/add-bot.d.ts.map +1 -0
- package/dist/cli/add-bot.js +138 -0
- package/dist/cli/add-bot.js.map +1 -0
- package/dist/cli/add-group.d.ts +2 -0
- package/dist/cli/add-group.d.ts.map +1 -0
- package/dist/cli/add-group.js +145 -0
- package/dist/cli/add-group.js.map +1 -0
- package/dist/cli/add-user.d.ts +2 -0
- package/dist/cli/add-user.d.ts.map +1 -0
- package/dist/cli/add-user.js +186 -0
- package/dist/cli/add-user.js.map +1 -0
- package/dist/cli/invite.d.ts +2 -0
- package/dist/cli/invite.d.ts.map +1 -0
- package/dist/cli/invite.js +194 -0
- package/dist/cli/invite.js.map +1 -0
- package/dist/cli/prompts.d.ts +24 -0
- package/dist/cli/prompts.d.ts.map +1 -0
- package/dist/cli/prompts.js +134 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/cli/remove-user.d.ts +2 -0
- package/dist/cli/remove-user.d.ts.map +1 -0
- package/dist/cli/remove-user.js +108 -0
- package/dist/cli/remove-user.js.map +1 -0
- package/dist/cli/setup.d.ts +2 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +446 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/status.d.ts +2 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +161 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/uninstall.d.ts +2 -0
- package/dist/cli/uninstall.d.ts.map +1 -0
- package/dist/cli/uninstall.js +81 -0
- package/dist/cli/uninstall.js.map +1 -0
- package/dist/config/credentials.d.ts +26 -0
- package/dist/config/credentials.d.ts.map +1 -0
- package/dist/config/credentials.js +169 -0
- package/dist/config/credentials.js.map +1 -0
- package/dist/config/writer.d.ts +52 -0
- package/dist/config/writer.d.ts.map +1 -0
- package/dist/config/writer.js +170 -0
- package/dist/config/writer.js.map +1 -0
- package/dist/docker/compose.d.ts +10 -0
- package/dist/docker/compose.d.ts.map +1 -0
- package/dist/docker/compose.js +56 -0
- package/dist/docker/compose.js.map +1 -0
- package/dist/docker/manager.d.ts +38 -0
- package/dist/docker/manager.d.ts.map +1 -0
- package/dist/docker/manager.js +219 -0
- package/dist/docker/manager.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +203 -0
- package/dist/index.js.map +1 -0
- package/dist/rc-api/rest-client.d.ts +64 -0
- package/dist/rc-api/rest-client.d.ts.map +1 -0
- package/dist/rc-api/rest-client.js +268 -0
- package/dist/rc-api/rest-client.js.map +1 -0
- package/dist/rc-api/types.d.ts +158 -0
- package/dist/rc-api/types.d.ts.map +1 -0
- package/dist/rc-api/types.js +5 -0
- package/dist/rc-api/types.js.map +1 -0
- package/dist/rc-api/ws-client.d.ts +47 -0
- package/dist/rc-api/ws-client.d.ts.map +1 -0
- package/dist/rc-api/ws-client.js +308 -0
- package/dist/rc-api/ws-client.js.map +1 -0
- package/dist/service/bot-manager.d.ts +34 -0
- package/dist/service/bot-manager.d.ts.map +1 -0
- package/dist/service/bot-manager.js +156 -0
- package/dist/service/bot-manager.js.map +1 -0
- package/dist/service/channel.d.ts +35 -0
- package/dist/service/channel.d.ts.map +1 -0
- package/dist/service/channel.js +157 -0
- package/dist/service/channel.js.map +1 -0
- package/dist/service/message-handler.d.ts +45 -0
- package/dist/service/message-handler.d.ts.map +1 -0
- package/dist/service/message-handler.js +207 -0
- package/dist/service/message-handler.js.map +1 -0
- package/openclaw.plugin.json +45 -0
- package/package.json +61 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Docker 容器生命周期管理
|
|
3
|
+
// ============================================================
|
|
4
|
+
import { execFile } from "node:child_process";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
import { writeFile, mkdir } from "node:fs/promises";
|
|
7
|
+
import { existsSync } from "node:fs";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
import { networkInterfaces } from "node:os";
|
|
10
|
+
import { createConnection } from "node:net";
|
|
11
|
+
import { generateComposeYaml, generateEnvFile } from "./compose.js";
|
|
12
|
+
const execFileAsync = promisify(execFile);
|
|
13
|
+
export class DockerManager {
|
|
14
|
+
composeDir;
|
|
15
|
+
constructor(composeDir) {
|
|
16
|
+
this.composeDir = composeDir;
|
|
17
|
+
}
|
|
18
|
+
// ----------------------------------------------------------
|
|
19
|
+
// 环境检测
|
|
20
|
+
// ----------------------------------------------------------
|
|
21
|
+
/** 检查 Docker 是否已安装 */
|
|
22
|
+
async isDockerInstalled() {
|
|
23
|
+
try {
|
|
24
|
+
const { stdout } = await execFileAsync("docker", ["--version"]);
|
|
25
|
+
const match = stdout.match(/Docker version ([\d.]+)/);
|
|
26
|
+
return { installed: true, version: match?.[1] };
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return { installed: false };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** 检查 Docker Compose 是否可用 */
|
|
33
|
+
async isComposeInstalled() {
|
|
34
|
+
try {
|
|
35
|
+
const { stdout } = await execFileAsync("docker", [
|
|
36
|
+
"compose",
|
|
37
|
+
"version",
|
|
38
|
+
]);
|
|
39
|
+
const match = stdout.match(/v?([\d.]+)/);
|
|
40
|
+
return { installed: true, version: match?.[1] };
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return { installed: false };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** 检查端口是否可用 */
|
|
47
|
+
async isPortAvailable(port) {
|
|
48
|
+
return new Promise((resolve) => {
|
|
49
|
+
const socket = createConnection({ port, host: "127.0.0.1" });
|
|
50
|
+
socket.setTimeout(1000);
|
|
51
|
+
socket.on("connect", () => {
|
|
52
|
+
socket.destroy();
|
|
53
|
+
resolve(false); // 端口被占用
|
|
54
|
+
});
|
|
55
|
+
socket.on("timeout", () => {
|
|
56
|
+
socket.destroy();
|
|
57
|
+
resolve(true); // 连接超时 = 端口可用
|
|
58
|
+
});
|
|
59
|
+
socket.on("error", () => {
|
|
60
|
+
resolve(true); // 连接失败 = 端口可用
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
// ----------------------------------------------------------
|
|
65
|
+
// Compose 文件管理
|
|
66
|
+
// ----------------------------------------------------------
|
|
67
|
+
/** 生成 docker-compose.yml 和 .env 文件 */
|
|
68
|
+
async generateComposeFile(port) {
|
|
69
|
+
await mkdir(this.composeDir, { recursive: true });
|
|
70
|
+
await writeFile(join(this.composeDir, "docker-compose.yml"), generateComposeYaml(port), "utf-8");
|
|
71
|
+
await writeFile(join(this.composeDir, ".env"), generateEnvFile(port), "utf-8");
|
|
72
|
+
}
|
|
73
|
+
// ----------------------------------------------------------
|
|
74
|
+
// 容器生命周期
|
|
75
|
+
// ----------------------------------------------------------
|
|
76
|
+
/** 启动容器 */
|
|
77
|
+
async start() {
|
|
78
|
+
await this.compose(["up", "-d"]);
|
|
79
|
+
}
|
|
80
|
+
/** 停止容器 */
|
|
81
|
+
async stop() {
|
|
82
|
+
await this.compose(["down"]);
|
|
83
|
+
}
|
|
84
|
+
/** 移除容器(可选删除卷) */
|
|
85
|
+
async remove(deleteVolumes) {
|
|
86
|
+
const args = ["down"];
|
|
87
|
+
if (deleteVolumes) {
|
|
88
|
+
args.push("-v");
|
|
89
|
+
}
|
|
90
|
+
await this.compose(args);
|
|
91
|
+
}
|
|
92
|
+
/** 获取容器状态 */
|
|
93
|
+
async getStatus() {
|
|
94
|
+
try {
|
|
95
|
+
const { stdout } = await this.compose(["ps", "--format", "json"]);
|
|
96
|
+
const lines = stdout
|
|
97
|
+
.trim()
|
|
98
|
+
.split("\n")
|
|
99
|
+
.filter((l) => l.startsWith("{"));
|
|
100
|
+
let rcStatus = "not_found";
|
|
101
|
+
let mongoStatus = "not_found";
|
|
102
|
+
let uptime;
|
|
103
|
+
for (const line of lines) {
|
|
104
|
+
try {
|
|
105
|
+
const info = JSON.parse(line);
|
|
106
|
+
const name = (info.Service || info.Name || "").toLowerCase();
|
|
107
|
+
const state = (info.State || "").toLowerCase();
|
|
108
|
+
if (name.includes("rocketchat")) {
|
|
109
|
+
rcStatus = state === "running" ? "running" : "stopped";
|
|
110
|
+
if (info.Status) {
|
|
111
|
+
uptime = info.Status;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else if (name.includes("mongo")) {
|
|
115
|
+
mongoStatus = state === "running" ? "running" : "stopped";
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// 跳过无法解析的行
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return { rocketchat: rcStatus, mongodb: mongoStatus, uptime };
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return { rocketchat: "not_found", mongodb: "not_found" };
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/** 等待 Rocket.Chat 就绪(轮询 /api/v1/info) */
|
|
129
|
+
async waitForReady(port, timeoutMs = 120000, onProgress) {
|
|
130
|
+
const start = Date.now();
|
|
131
|
+
const url = `http://127.0.0.1:${port}/api/v1/info`;
|
|
132
|
+
while (Date.now() - start < timeoutMs) {
|
|
133
|
+
try {
|
|
134
|
+
const response = await fetch(url, { signal: AbortSignal.timeout(5000) });
|
|
135
|
+
if (response.ok) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// 服务还没就绪,继续等待
|
|
141
|
+
}
|
|
142
|
+
const elapsed = Math.floor((Date.now() - start) / 1000);
|
|
143
|
+
onProgress?.(`等待服务就绪... (${elapsed}s)`);
|
|
144
|
+
await new Promise((r) => setTimeout(r, 3000));
|
|
145
|
+
}
|
|
146
|
+
throw new Error(`Rocket.Chat 启动超时(${Math.floor(timeoutMs / 1000)}秒),请检查 Docker 日志:docker compose -f "${join(this.composeDir, "docker-compose.yml")}" logs`);
|
|
147
|
+
}
|
|
148
|
+
// ----------------------------------------------------------
|
|
149
|
+
// 网络工具
|
|
150
|
+
// ----------------------------------------------------------
|
|
151
|
+
/**
|
|
152
|
+
* 获取本机非 loopback IP 地址
|
|
153
|
+
* 优先物理网卡(en0/eth0/wlan0),跳过 Docker/VPN 等虚拟接口
|
|
154
|
+
*/
|
|
155
|
+
getHostIp() {
|
|
156
|
+
const interfaces = networkInterfaces();
|
|
157
|
+
// 应跳过的虚拟接口名称模式
|
|
158
|
+
const skipPatterns = [
|
|
159
|
+
/^docker/i,
|
|
160
|
+
/^br-/,
|
|
161
|
+
/^veth/,
|
|
162
|
+
/^virbr/,
|
|
163
|
+
/^vmnet/,
|
|
164
|
+
/^vboxnet/,
|
|
165
|
+
/^tailscale/i,
|
|
166
|
+
/^utun/, // macOS VPN
|
|
167
|
+
/^tun/,
|
|
168
|
+
/^tap/,
|
|
169
|
+
];
|
|
170
|
+
// 优先的物理接口名称模式(macOS: en0/en1, Linux: eth0/wlan0/ens*)
|
|
171
|
+
const preferredPatterns = [
|
|
172
|
+
/^en\d+$/, // macOS Ethernet/WiFi
|
|
173
|
+
/^eth\d+$/, // Linux Ethernet
|
|
174
|
+
/^ens\d+$/, // Linux systemd Ethernet
|
|
175
|
+
/^enp\d+/, // Linux PCI Ethernet
|
|
176
|
+
/^wlan\d+$/, // Linux WiFi
|
|
177
|
+
/^wlp\d+/, // Linux PCI WiFi
|
|
178
|
+
];
|
|
179
|
+
let fallbackIp = null;
|
|
180
|
+
// 第一遍:找优先接口
|
|
181
|
+
for (const pattern of preferredPatterns) {
|
|
182
|
+
for (const name of Object.keys(interfaces)) {
|
|
183
|
+
if (!pattern.test(name))
|
|
184
|
+
continue;
|
|
185
|
+
for (const iface of interfaces[name] || []) {
|
|
186
|
+
if (iface.family === "IPv4" && !iface.internal) {
|
|
187
|
+
return iface.address;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// 第二遍:找任意非虚拟接口
|
|
193
|
+
for (const name of Object.keys(interfaces)) {
|
|
194
|
+
if (skipPatterns.some((p) => p.test(name)))
|
|
195
|
+
continue;
|
|
196
|
+
for (const iface of interfaces[name] || []) {
|
|
197
|
+
if (iface.family === "IPv4" && !iface.internal) {
|
|
198
|
+
if (!fallbackIp)
|
|
199
|
+
fallbackIp = iface.address;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return fallbackIp || "127.0.0.1";
|
|
204
|
+
}
|
|
205
|
+
/** 检查 compose 文件是否存在 */
|
|
206
|
+
composeFileExists() {
|
|
207
|
+
return existsSync(join(this.composeDir, "docker-compose.yml"));
|
|
208
|
+
}
|
|
209
|
+
// ----------------------------------------------------------
|
|
210
|
+
// 内部:执行 docker compose 命令
|
|
211
|
+
// ----------------------------------------------------------
|
|
212
|
+
async compose(args) {
|
|
213
|
+
return execFileAsync("docker", ["compose", "-f", join(this.composeDir, "docker-compose.yml"), ...args], {
|
|
214
|
+
cwd: this.composeDir,
|
|
215
|
+
timeout: 300000, // 5 分钟超时(拉镜像可能很慢)
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/docker/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgCA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA2M/C"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// @openclaw-community/rocketchat 插件入口
|
|
3
|
+
// 注册频道、CLI 命令、后台服务
|
|
4
|
+
// ============================================================
|
|
5
|
+
import { resolve } from "node:path";
|
|
6
|
+
import { ChannelService } from "./service/channel.js";
|
|
7
|
+
import { setupCommand } from "./cli/setup.js";
|
|
8
|
+
import { addBotCommand } from "./cli/add-bot.js";
|
|
9
|
+
import { addGroupCommand } from "./cli/add-group.js";
|
|
10
|
+
import { addUserCommand } from "./cli/add-user.js";
|
|
11
|
+
import { removeUserCommand } from "./cli/remove-user.js";
|
|
12
|
+
import { inviteCommand } from "./cli/invite.js";
|
|
13
|
+
import { statusCommand } from "./cli/status.js";
|
|
14
|
+
import { uninstallCommand } from "./cli/uninstall.js";
|
|
15
|
+
/** OpenClaw 配置文件路径的缓存 */
|
|
16
|
+
let configFilePath = "";
|
|
17
|
+
/** 频道服务实例 */
|
|
18
|
+
let channelService = null;
|
|
19
|
+
/**
|
|
20
|
+
* 获取 openclaw.json 路径
|
|
21
|
+
* OpenClaw Gateway 运行在用户的工作区内,配置文件在当前工作目录下
|
|
22
|
+
*/
|
|
23
|
+
function getConfigPath() {
|
|
24
|
+
if (configFilePath)
|
|
25
|
+
return configFilePath;
|
|
26
|
+
// 默认路径
|
|
27
|
+
return resolve(process.cwd(), "openclaw.json");
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 插件入口:注册到 OpenClaw
|
|
31
|
+
*/
|
|
32
|
+
export default function register(api) {
|
|
33
|
+
const logger = api.logger || {
|
|
34
|
+
info: (msg) => console.log(`[RC] ${msg}`),
|
|
35
|
+
error: (msg) => console.error(`[RC] ${msg}`),
|
|
36
|
+
};
|
|
37
|
+
logger.info("Rocket.Chat 插件已加载");
|
|
38
|
+
// ----------------------------------------------------------
|
|
39
|
+
// 1. 注册频道
|
|
40
|
+
// ----------------------------------------------------------
|
|
41
|
+
api.registerChannel({
|
|
42
|
+
plugin: {
|
|
43
|
+
id: "rocketchat",
|
|
44
|
+
meta: {
|
|
45
|
+
id: "rocketchat",
|
|
46
|
+
label: "Rocket.Chat",
|
|
47
|
+
selectionLabel: "Rocket.Chat (自托管)",
|
|
48
|
+
docsPath: "/channels/rocketchat",
|
|
49
|
+
blurb: "通过 Rocket.Chat App 与 OpenClaw 对话。自托管、数据自控,适合中国大陆用户。",
|
|
50
|
+
aliases: ["rc", "rocket"],
|
|
51
|
+
},
|
|
52
|
+
capabilities: {
|
|
53
|
+
chatTypes: ["direct", "group"],
|
|
54
|
+
},
|
|
55
|
+
config: {
|
|
56
|
+
/**
|
|
57
|
+
* 列出所有 account IDs(机器人用户名)
|
|
58
|
+
*/
|
|
59
|
+
listAccountIds: (cfg) => {
|
|
60
|
+
const accounts = cfg?.accounts || {};
|
|
61
|
+
return Object.keys(accounts);
|
|
62
|
+
},
|
|
63
|
+
/**
|
|
64
|
+
* 解析 account 配置
|
|
65
|
+
*/
|
|
66
|
+
resolveAccount: (cfg, accountId) => {
|
|
67
|
+
if (!accountId) {
|
|
68
|
+
const ids = Object.keys(cfg?.accounts || {});
|
|
69
|
+
accountId = ids[0];
|
|
70
|
+
}
|
|
71
|
+
return cfg?.accounts?.[accountId] || null;
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
outbound: {
|
|
75
|
+
deliveryMode: "direct",
|
|
76
|
+
/**
|
|
77
|
+
* Agent 回复 → 发送到 Rocket.Chat
|
|
78
|
+
*/
|
|
79
|
+
sendText: async (params) => {
|
|
80
|
+
if (!channelService) {
|
|
81
|
+
logger.error("频道服务未启动");
|
|
82
|
+
return { ok: false };
|
|
83
|
+
}
|
|
84
|
+
const handler = channelService.getMessageHandler();
|
|
85
|
+
if (!handler) {
|
|
86
|
+
logger.error("消息处理器未初始化");
|
|
87
|
+
return { ok: false };
|
|
88
|
+
}
|
|
89
|
+
const botUsername = params.accountId || "";
|
|
90
|
+
const roomId = params.target || "";
|
|
91
|
+
if (!botUsername || !roomId) {
|
|
92
|
+
logger.error("缺少 accountId 或 target");
|
|
93
|
+
return { ok: false };
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
await handler.handleOutbound(params.text, botUsername, roomId);
|
|
97
|
+
return { ok: true };
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
logger.error(`发送失败: ${err.message}`);
|
|
101
|
+
return { ok: false };
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
// ----------------------------------------------------------
|
|
108
|
+
// 2. 注册 CLI 命令
|
|
109
|
+
// ----------------------------------------------------------
|
|
110
|
+
api.registerCli(({ program }) => {
|
|
111
|
+
const rc = program
|
|
112
|
+
.command("rocketchat")
|
|
113
|
+
.alias("rc")
|
|
114
|
+
.description("Rocket.Chat 频道管理");
|
|
115
|
+
rc.command("setup")
|
|
116
|
+
.description("部署 Rocket.Chat(Docker)+ 创建管理员 + 创建手机登录账号")
|
|
117
|
+
.action(async () => {
|
|
118
|
+
await setupCommand(getConfigPath());
|
|
119
|
+
});
|
|
120
|
+
rc.command("add-bot")
|
|
121
|
+
.description("添加机器人(自动绑定 Agent + 建立 DM 私聊)")
|
|
122
|
+
.action(async () => {
|
|
123
|
+
await addBotCommand(getConfigPath());
|
|
124
|
+
});
|
|
125
|
+
rc.command("add-group")
|
|
126
|
+
.description("创建私有频道(多机器人群组)")
|
|
127
|
+
.action(async () => {
|
|
128
|
+
await addGroupCommand(getConfigPath());
|
|
129
|
+
});
|
|
130
|
+
rc.command("add-user")
|
|
131
|
+
.description("添加手机登录用户")
|
|
132
|
+
.action(async () => {
|
|
133
|
+
await addUserCommand(getConfigPath());
|
|
134
|
+
});
|
|
135
|
+
rc.command("remove-user")
|
|
136
|
+
.description("删除手机登录用户")
|
|
137
|
+
.action(async () => {
|
|
138
|
+
await removeUserCommand(getConfigPath());
|
|
139
|
+
});
|
|
140
|
+
rc.command("invite")
|
|
141
|
+
.description("群组成员管理(邀请/移除/设管理员/设所有者)")
|
|
142
|
+
.action(async () => {
|
|
143
|
+
await inviteCommand(getConfigPath());
|
|
144
|
+
});
|
|
145
|
+
rc.command("status")
|
|
146
|
+
.description("查看 Rocket.Chat 运行状态")
|
|
147
|
+
.action(async () => {
|
|
148
|
+
await statusCommand(getConfigPath());
|
|
149
|
+
});
|
|
150
|
+
rc.command("uninstall")
|
|
151
|
+
.description("卸载 Rocket.Chat(停止容器、清理配置)")
|
|
152
|
+
.action(async () => {
|
|
153
|
+
await uninstallCommand(getConfigPath());
|
|
154
|
+
});
|
|
155
|
+
}, {
|
|
156
|
+
commands: [
|
|
157
|
+
"rocketchat",
|
|
158
|
+
"rocketchat setup",
|
|
159
|
+
"rocketchat add-bot",
|
|
160
|
+
"rocketchat add-group",
|
|
161
|
+
"rocketchat add-user",
|
|
162
|
+
"rocketchat remove-user",
|
|
163
|
+
"rocketchat invite",
|
|
164
|
+
"rocketchat status",
|
|
165
|
+
"rocketchat uninstall",
|
|
166
|
+
],
|
|
167
|
+
});
|
|
168
|
+
// ----------------------------------------------------------
|
|
169
|
+
// 3. 注册后台服务
|
|
170
|
+
// ----------------------------------------------------------
|
|
171
|
+
api.registerService({
|
|
172
|
+
id: "rocketchat-channel",
|
|
173
|
+
start: async () => {
|
|
174
|
+
const pluginConfig = api.pluginConfig ?? {};
|
|
175
|
+
if (!pluginConfig.enabled) {
|
|
176
|
+
logger.info("Rocket.Chat 未启用,后台服务不启动");
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// 读取 bindings 传给服务,用于正确解析 agentId
|
|
180
|
+
const { ConfigWriter } = await import("./config/writer.js");
|
|
181
|
+
const cw = new ConfigWriter(getConfigPath());
|
|
182
|
+
await cw.readConfig();
|
|
183
|
+
const bindings = cw.getRocketchatBindings();
|
|
184
|
+
channelService = new ChannelService({
|
|
185
|
+
config: pluginConfig,
|
|
186
|
+
bindings,
|
|
187
|
+
logger,
|
|
188
|
+
});
|
|
189
|
+
try {
|
|
190
|
+
await channelService.start();
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
logger.error(`后台服务启动失败: ${err.message}`);
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
stop: () => {
|
|
197
|
+
channelService?.stop();
|
|
198
|
+
channelService = null;
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
logger.info("Rocket.Chat 插件注册完成");
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { AuthResult, RcUser, RcRoom, RcMember, RcMessage, CreateUserParams, SendMessageOptions, ServerInfo } from "./types.js";
|
|
2
|
+
export declare class RocketChatRestClient {
|
|
3
|
+
private serverUrl;
|
|
4
|
+
private userId;
|
|
5
|
+
private authToken;
|
|
6
|
+
constructor(serverUrl: string);
|
|
7
|
+
private request;
|
|
8
|
+
private sleep;
|
|
9
|
+
/** 设置已有的认证信息(从凭据文件读取时使用) */
|
|
10
|
+
setAuth(userId: string, authToken: string): void;
|
|
11
|
+
/** 登录获取 token */
|
|
12
|
+
login(user: string, password: string): Promise<AuthResult>;
|
|
13
|
+
/** 创建用户 */
|
|
14
|
+
createUser(params: CreateUserParams): Promise<RcUser>;
|
|
15
|
+
/** 查询用户信息 */
|
|
16
|
+
getUserInfo(username: string): Promise<RcUser | null>;
|
|
17
|
+
/** 列出所有用户 */
|
|
18
|
+
listUsers(): Promise<RcUser[]>;
|
|
19
|
+
/** 删除用户 */
|
|
20
|
+
deleteUser(userId: string, confirmRelinquish?: boolean): Promise<void>;
|
|
21
|
+
/** 创建 DM 通道 */
|
|
22
|
+
createDirectMessage(usernames: string[]): Promise<RcRoom>;
|
|
23
|
+
/** 列出 DM */
|
|
24
|
+
listDirectMessages(): Promise<RcRoom[]>;
|
|
25
|
+
/** 创建私有频道 */
|
|
26
|
+
createGroup(name: string, members?: string[]): Promise<RcRoom>;
|
|
27
|
+
/** 查询频道信息 */
|
|
28
|
+
getGroupInfo(roomId?: string, roomName?: string): Promise<RcRoom | null>;
|
|
29
|
+
/** 列出所有私有频道 */
|
|
30
|
+
listGroups(): Promise<RcRoom[]>;
|
|
31
|
+
/** 列出频道成员 */
|
|
32
|
+
getGroupMembers(roomId: string): Promise<RcMember[]>;
|
|
33
|
+
/** 邀请用户进群 */
|
|
34
|
+
groupInvite(roomId: string, userId: string): Promise<void>;
|
|
35
|
+
/** 移除成员 */
|
|
36
|
+
groupKick(roomId: string, userId: string): Promise<void>;
|
|
37
|
+
/** 设为所有者 */
|
|
38
|
+
groupAddOwner(roomId: string, userId: string): Promise<void>;
|
|
39
|
+
/** 设为管理员 */
|
|
40
|
+
groupAddModerator(roomId: string, userId: string): Promise<void>;
|
|
41
|
+
/** 在房间中禁言用户 */
|
|
42
|
+
muteUserInRoom(roomId: string, userId: string): Promise<void>;
|
|
43
|
+
/** 在房间中取消禁言 */
|
|
44
|
+
unmuteUserInRoom(roomId: string, userId: string): Promise<void>;
|
|
45
|
+
/** 移除所有者 */
|
|
46
|
+
groupRemoveOwner(roomId: string, userId: string): Promise<void>;
|
|
47
|
+
/** 移除管理员 */
|
|
48
|
+
groupRemoveModerator(roomId: string, userId: string): Promise<void>;
|
|
49
|
+
/** 删除频道 */
|
|
50
|
+
deleteGroup(roomId: string): Promise<void>;
|
|
51
|
+
/** 发送消息 */
|
|
52
|
+
sendMessage(roomId: string, text: string, options?: SendMessageOptions): Promise<RcMessage>;
|
|
53
|
+
/** 上传文件到房间 */
|
|
54
|
+
uploadFile(roomId: string, fileBuffer: Buffer, filename: string, description?: string): Promise<void>;
|
|
55
|
+
/** 获取服务器信息(健康检查) */
|
|
56
|
+
serverInfo(): Promise<ServerInfo>;
|
|
57
|
+
/** 获取服务器版本号(连通性测试用) */
|
|
58
|
+
getServerVersion(): Promise<string>;
|
|
59
|
+
/** 获取当前服务器 URL */
|
|
60
|
+
getServerUrl(): string;
|
|
61
|
+
/** 获取当前认证的 userId */
|
|
62
|
+
getUserId(): string;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=rest-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest-client.d.ts","sourceRoot":"","sources":["../../src/rc-api/rest-client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,UAAU,EACV,MAAM,EACN,MAAM,EACN,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACX,MAAM,YAAY,CAAC;AAMpB,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,SAAS,CAAM;gBAEX,SAAS,EAAE,MAAM;YASf,OAAO;IAiFrB,OAAO,CAAC,KAAK;IAQb,4BAA4B;IAC5B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAKhD,iBAAiB;IACX,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAehE,WAAW;IACL,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAoB3D,aAAa;IACP,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAY3D,aAAa;IACP,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQpC,WAAW;IACL,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,iBAAiB,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzE,eAAe;IACT,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAO/D,YAAY;IACN,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAY7C,aAAa;IACP,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAYpE,aAAa;IACP,YAAY,CAChB,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAezB,eAAe;IACT,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQrC,aAAa;IACP,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAQ1D,aAAa;IACP,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,WAAW;IACL,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,YAAY;IACN,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE,YAAY;IACN,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,eAAe;IACT,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE,eAAe;IACT,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE,YAAY;IACN,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE,YAAY;IACN,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzE,WAAW;IACL,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhD,WAAW;IACL,WAAW,CACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,SAAS,CAAC;IAerB,cAAc;IACR,UAAU,CACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAoBhB,oBAAoB;IACd,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IAQvC,uBAAuB;IACjB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKzC,kBAAkB;IAClB,YAAY,IAAI,MAAM;IAItB,qBAAqB;IACrB,SAAS,IAAI,MAAM;CAGpB"}
|