@zhin.js/adapter-icqq 2.0.6 → 2.0.7
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/CHANGELOG.md +6 -0
- package/lib/adapter.d.ts +7 -2
- package/lib/adapter.d.ts.map +1 -1
- package/lib/adapter.js +78 -33
- package/lib/adapter.js.map +1 -1
- package/lib/bot.d.ts +29 -29
- package/lib/bot.d.ts.map +1 -1
- package/lib/bot.js +226 -405
- package/lib/bot.js.map +1 -1
- package/lib/commands/index.d.ts +7 -0
- package/lib/commands/index.d.ts.map +1 -0
- package/lib/commands/index.js +30 -0
- package/lib/commands/index.js.map +1 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +13 -297
- package/lib/index.js.map +1 -1
- package/lib/ipc-client.d.ts +60 -0
- package/lib/ipc-client.d.ts.map +1 -0
- package/lib/ipc-client.js +272 -0
- package/lib/ipc-client.js.map +1 -0
- package/lib/protocol.d.ts +174 -0
- package/lib/protocol.d.ts.map +1 -0
- package/lib/protocol.js +162 -0
- package/lib/protocol.js.map +1 -0
- package/lib/routes.d.ts +8 -0
- package/lib/routes.d.ts.map +1 -0
- package/lib/routes.js +67 -0
- package/lib/routes.js.map +1 -0
- package/lib/tools/index.d.ts +10 -0
- package/lib/tools/index.d.ts.map +1 -0
- package/lib/tools/index.js +336 -0
- package/lib/tools/index.js.map +1 -0
- package/lib/types.d.ts +45 -7
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +5 -0
- package/lib/types.js.map +1 -1
- package/package.json +3 -5
- package/plugin.yml +1 -1
- package/skills/icqq/SKILL.md +31 -64
- package/skills/icqq/references/friends.md +54 -0
- package/skills/icqq/references/general.md +145 -0
- package/skills/icqq/references/gfs.md +49 -0
- package/skills/icqq/references/groups.md +71 -0
- package/skills/icqq/references/messaging.md +66 -0
- package/skills/icqq/references/requests.md +27 -0
- package/skills/icqq/references/settings.md +38 -0
- package/src/adapter.ts +73 -35
- package/src/bot.ts +272 -443
- package/src/commands/index.ts +32 -0
- package/src/index.ts +14 -305
- package/src/ipc-client.ts +326 -0
- package/src/protocol.ts +242 -0
- package/src/routes.ts +83 -0
- package/src/tools/index.ts +407 -0
- package/src/types.ts +47 -7
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IPC/RPC 客户端 — 与 icqq 守护进程通信 (ported from @icqqjs/cli v1.4.4)
|
|
3
|
+
*
|
|
4
|
+
* IPC 模式(本地 Unix Socket):
|
|
5
|
+
* const client = await IpcClient.connect(uin);
|
|
6
|
+
*
|
|
7
|
+
* RPC 模式(远程 TCP):
|
|
8
|
+
* const client = await IpcClient.connectRpc({ host, port, token });
|
|
9
|
+
*
|
|
10
|
+
* 通信协议:JSON + 换行符。
|
|
11
|
+
* IPC 连接使用 Token 直传认证;RPC 使用 HMAC-SHA256 挑战-响应认证。
|
|
12
|
+
*/
|
|
13
|
+
import net from "node:net";
|
|
14
|
+
import { createHmac, randomUUID } from "node:crypto";
|
|
15
|
+
import { readFile } from "node:fs/promises";
|
|
16
|
+
import path from "node:path";
|
|
17
|
+
import os from "node:os";
|
|
18
|
+
function getIcqqHome() {
|
|
19
|
+
return path.join(os.homedir(), ".icqq");
|
|
20
|
+
}
|
|
21
|
+
function getSocketPath(uin) {
|
|
22
|
+
return path.join(getIcqqHome(), String(uin), "daemon.sock");
|
|
23
|
+
}
|
|
24
|
+
function getTokenPath(uin) {
|
|
25
|
+
return path.join(getIcqqHome(), String(uin), "daemon.token");
|
|
26
|
+
}
|
|
27
|
+
function getRpcPortPath(uin) {
|
|
28
|
+
return path.join(getIcqqHome(), String(uin), "daemon.rpc");
|
|
29
|
+
}
|
|
30
|
+
export class IpcClient {
|
|
31
|
+
socket;
|
|
32
|
+
buffer = "";
|
|
33
|
+
pending = new Map();
|
|
34
|
+
eventHandlers = new Map();
|
|
35
|
+
_closed = false;
|
|
36
|
+
constructor(socket, skipDataHandler = false) {
|
|
37
|
+
this.socket = socket;
|
|
38
|
+
if (!skipDataHandler) {
|
|
39
|
+
this.attachDataHandler();
|
|
40
|
+
}
|
|
41
|
+
this.socket.on("error", (err) => {
|
|
42
|
+
for (const { reject } of this.pending.values()) {
|
|
43
|
+
reject(err);
|
|
44
|
+
}
|
|
45
|
+
this.pending.clear();
|
|
46
|
+
});
|
|
47
|
+
this.socket.on("close", () => {
|
|
48
|
+
this._closed = true;
|
|
49
|
+
for (const { reject } of this.pending.values()) {
|
|
50
|
+
reject(new Error("连接已关闭"));
|
|
51
|
+
}
|
|
52
|
+
this.pending.clear();
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
get closed() {
|
|
56
|
+
return this._closed;
|
|
57
|
+
}
|
|
58
|
+
/** 注册数据处理 handler(RPC 模式延迟到 challenge 完成后调用) */
|
|
59
|
+
attachDataHandler() {
|
|
60
|
+
this.socket.on("data", (chunk) => this.onData(chunk.toString()));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 通过 IPC(Unix Socket)连接守护进程并完成认证。
|
|
64
|
+
* @param uin - 目标账号的 QQ 号
|
|
65
|
+
* @returns 已认证的 IpcClient 实例
|
|
66
|
+
* @throws 守护进程未运行或认证失败时抛出错误
|
|
67
|
+
*/
|
|
68
|
+
static async connect(uin) {
|
|
69
|
+
let token;
|
|
70
|
+
try {
|
|
71
|
+
token = (await readFile(getTokenPath(uin), "utf-8")).trim();
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
throw new Error(`无法读取认证 token,icqq 守护进程可能未运行。请先执行: icqq login`);
|
|
75
|
+
}
|
|
76
|
+
const client = await new Promise((resolve, reject) => {
|
|
77
|
+
const sock = net.connect(getSocketPath(uin));
|
|
78
|
+
sock.on("connect", () => resolve(new IpcClient(sock)));
|
|
79
|
+
sock.on("error", (err) => reject(new Error(`无法连接 icqq 守护进程 (${getSocketPath(uin)}): ${err.message}。请先执行: icqq login`)));
|
|
80
|
+
});
|
|
81
|
+
const authResp = await client.request("auth", { token });
|
|
82
|
+
if (!authResp.ok) {
|
|
83
|
+
client.close();
|
|
84
|
+
throw new Error("IPC 认证失败");
|
|
85
|
+
}
|
|
86
|
+
return client;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 通过 RPC(TCP)连接守护进程并完成 HMAC 挑战-响应认证。
|
|
90
|
+
*
|
|
91
|
+
* 流程:
|
|
92
|
+
* 1. 服务端连接后发送 { challenge: "<hex>" }
|
|
93
|
+
* 2. 客户端用 HMAC-SHA256(token, challenge) 生成 digest
|
|
94
|
+
* 3. 客户端发送 { action: "auth", params: { digest: "<hex>" } }
|
|
95
|
+
* 4. 服务端验证 digest,通过则认证成功
|
|
96
|
+
*
|
|
97
|
+
* token 不会明文传输,防止中间人嗅探。
|
|
98
|
+
*
|
|
99
|
+
* @param options.host - 远程主机地址
|
|
100
|
+
* @param options.port - 远程端口
|
|
101
|
+
* @param options.token - 认证 token(用于 HMAC 计算,不会明文传输)
|
|
102
|
+
*/
|
|
103
|
+
static async connectRpc(options) {
|
|
104
|
+
const { host, port, token } = options;
|
|
105
|
+
const client = await new Promise((resolve, reject) => {
|
|
106
|
+
const sock = net.connect(port, host);
|
|
107
|
+
// skipDataHandler=true: 延迟注册 onData,避免与 challenge 读取冲突
|
|
108
|
+
sock.on("connect", () => resolve(new IpcClient(sock, true)));
|
|
109
|
+
sock.on("error", (err) => reject(new Error(`无法连接 icqq RPC 服务 (${host}:${port}): ${err.message}`)));
|
|
110
|
+
});
|
|
111
|
+
// Wait for challenge from server, with proper buffering for TCP fragmentation
|
|
112
|
+
const challenge = await new Promise((resolve, reject) => {
|
|
113
|
+
let challengeBuffer = "";
|
|
114
|
+
const timeout = setTimeout(() => {
|
|
115
|
+
client.socket.removeListener("data", onData);
|
|
116
|
+
client.close();
|
|
117
|
+
reject(new Error("RPC 挑战超时"));
|
|
118
|
+
}, 10000);
|
|
119
|
+
const onData = (chunk) => {
|
|
120
|
+
challengeBuffer += chunk.toString();
|
|
121
|
+
const nlIdx = challengeBuffer.indexOf("\n");
|
|
122
|
+
if (nlIdx === -1)
|
|
123
|
+
return; // 等待更多数据
|
|
124
|
+
clearTimeout(timeout);
|
|
125
|
+
client.socket.removeListener("data", onData);
|
|
126
|
+
try {
|
|
127
|
+
const msg = JSON.parse(challengeBuffer.slice(0, nlIdx));
|
|
128
|
+
if (!msg.challenge) {
|
|
129
|
+
reject(new Error("RPC 服务端未发送挑战"));
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
resolve(msg.challenge);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
reject(new Error("RPC 挑战解析失败"));
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
client.socket.on("data", onData);
|
|
139
|
+
});
|
|
140
|
+
// Challenge 阶段结束,注册正式的数据处理 handler
|
|
141
|
+
client.attachDataHandler();
|
|
142
|
+
// Compute HMAC digest and authenticate
|
|
143
|
+
const digest = createHmac("sha256", token)
|
|
144
|
+
.update(challenge)
|
|
145
|
+
.digest("hex");
|
|
146
|
+
const authResp = await client.request("auth", { digest });
|
|
147
|
+
if (!authResp.ok) {
|
|
148
|
+
client.close();
|
|
149
|
+
throw new Error(authResp.error ?? "RPC 认证失败");
|
|
150
|
+
}
|
|
151
|
+
return client;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* 通过 RPC 连接守护进程(自动从 daemon.rpc 文件读取地址)。
|
|
155
|
+
* @param uin - 目标账号的 QQ 号
|
|
156
|
+
*/
|
|
157
|
+
static async connectRpcByUin(uin) {
|
|
158
|
+
let token;
|
|
159
|
+
try {
|
|
160
|
+
token = (await readFile(getTokenPath(uin), "utf-8")).trim();
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
throw new Error("无法读取认证 token,守护进程可能未运行");
|
|
164
|
+
}
|
|
165
|
+
let rpcInfo;
|
|
166
|
+
try {
|
|
167
|
+
const raw = await readFile(getRpcPortPath(uin), "utf-8");
|
|
168
|
+
rpcInfo = JSON.parse(raw);
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
throw new Error("RPC 未启用或守护进程未运行");
|
|
172
|
+
}
|
|
173
|
+
return IpcClient.connectRpc({
|
|
174
|
+
host: rpcInfo.host,
|
|
175
|
+
port: rpcInfo.port,
|
|
176
|
+
token,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
onData(data) {
|
|
180
|
+
this.buffer += data;
|
|
181
|
+
const lines = this.buffer.split("\n");
|
|
182
|
+
this.buffer = lines.pop();
|
|
183
|
+
for (const line of lines) {
|
|
184
|
+
if (!line.trim())
|
|
185
|
+
continue;
|
|
186
|
+
try {
|
|
187
|
+
const msg = JSON.parse(line);
|
|
188
|
+
if ("event" in msg) {
|
|
189
|
+
const handler = this.eventHandlers.get(msg.id);
|
|
190
|
+
handler?.(msg);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
const p = this.pending.get(msg.id);
|
|
194
|
+
if (p) {
|
|
195
|
+
this.pending.delete(msg.id);
|
|
196
|
+
p.resolve(msg);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
// ignore malformed JSON
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* 发送 IPC 请求并等待响应。
|
|
207
|
+
*/
|
|
208
|
+
async request(action, params = {}, timeoutMs = 30000) {
|
|
209
|
+
if (this._closed)
|
|
210
|
+
throw new Error("IPC 连接已关闭");
|
|
211
|
+
const id = randomUUID();
|
|
212
|
+
const req = { id, action, params };
|
|
213
|
+
return new Promise((resolve, reject) => {
|
|
214
|
+
const timer = setTimeout(() => {
|
|
215
|
+
this.pending.delete(id);
|
|
216
|
+
reject(new Error(`IPC 请求超时 (${timeoutMs}ms): ${action}`));
|
|
217
|
+
}, timeoutMs);
|
|
218
|
+
this.pending.set(id, {
|
|
219
|
+
resolve: (v) => {
|
|
220
|
+
clearTimeout(timer);
|
|
221
|
+
resolve(v);
|
|
222
|
+
},
|
|
223
|
+
reject: (e) => {
|
|
224
|
+
clearTimeout(timer);
|
|
225
|
+
reject(e);
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
this.socket.write(JSON.stringify(req) + "\n", (err) => {
|
|
229
|
+
if (err) {
|
|
230
|
+
clearTimeout(timer);
|
|
231
|
+
this.pending.delete(id);
|
|
232
|
+
reject(err);
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* 订阅消息推送。
|
|
239
|
+
* @returns 订阅句柄,包含 unsubscribe() 方法
|
|
240
|
+
*/
|
|
241
|
+
subscribe(action, params, onEvent) {
|
|
242
|
+
const id = randomUUID();
|
|
243
|
+
this.eventHandlers.set(id, onEvent);
|
|
244
|
+
const req = { id, action, params };
|
|
245
|
+
this.socket.write(JSON.stringify(req) + "\n");
|
|
246
|
+
return {
|
|
247
|
+
id,
|
|
248
|
+
unsubscribe: async () => {
|
|
249
|
+
this.eventHandlers.delete(id);
|
|
250
|
+
if (!this._closed) {
|
|
251
|
+
const unsub = {
|
|
252
|
+
id: randomUUID(),
|
|
253
|
+
action: "unsubscribe",
|
|
254
|
+
params,
|
|
255
|
+
};
|
|
256
|
+
this.socket.write(JSON.stringify(unsub) + "\n");
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/** 关闭连接 */
|
|
262
|
+
close() {
|
|
263
|
+
this._closed = true;
|
|
264
|
+
this.eventHandlers.clear();
|
|
265
|
+
for (const { reject } of this.pending.values()) {
|
|
266
|
+
reject(new Error("连接已关闭"));
|
|
267
|
+
}
|
|
268
|
+
this.pending.clear();
|
|
269
|
+
this.socket.destroy();
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=ipc-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipc-client.js","sourceRoot":"","sources":["../src/ipc-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IPC 协议类型定义与 Action 常量 (ported from @icqqjs/cli)
|
|
3
|
+
*
|
|
4
|
+
* CLI 与守护进程通过 Unix Domain Socket 通信,
|
|
5
|
+
* 使用 JSON + 换行符(\n)分隔的文本协议。
|
|
6
|
+
*/
|
|
7
|
+
/** CLI → Daemon 请求 */
|
|
8
|
+
export type IpcRequest = {
|
|
9
|
+
id: string;
|
|
10
|
+
action: string;
|
|
11
|
+
params: Record<string, unknown>;
|
|
12
|
+
};
|
|
13
|
+
/** Daemon → CLI 响应 */
|
|
14
|
+
export type IpcResponse = {
|
|
15
|
+
id: string;
|
|
16
|
+
ok: boolean;
|
|
17
|
+
data?: unknown;
|
|
18
|
+
error?: string;
|
|
19
|
+
};
|
|
20
|
+
/** Daemon → CLI 事件推送 */
|
|
21
|
+
export type IpcEvent = {
|
|
22
|
+
id: string;
|
|
23
|
+
event: string;
|
|
24
|
+
data: unknown;
|
|
25
|
+
};
|
|
26
|
+
export type IpcMessage = IpcResponse | IpcEvent;
|
|
27
|
+
/** 收到的消息事件数据 */
|
|
28
|
+
export interface IpcMessageEventData {
|
|
29
|
+
type: "group" | "private";
|
|
30
|
+
from_id: number;
|
|
31
|
+
user_id: number;
|
|
32
|
+
nickname: string;
|
|
33
|
+
raw_message: string;
|
|
34
|
+
time: number;
|
|
35
|
+
group_id?: number;
|
|
36
|
+
}
|
|
37
|
+
/** Guild 消息事件数据 */
|
|
38
|
+
export interface IpcGuildMessageEventData {
|
|
39
|
+
type: "guild";
|
|
40
|
+
guild_id: string;
|
|
41
|
+
guild_name: string;
|
|
42
|
+
channel_id: string;
|
|
43
|
+
channel_name: string;
|
|
44
|
+
nickname: string;
|
|
45
|
+
tiny_id: string;
|
|
46
|
+
raw_message: string;
|
|
47
|
+
time: number;
|
|
48
|
+
seq: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 所有 IPC 操作常量 (from @icqqjs/cli)
|
|
52
|
+
*/
|
|
53
|
+
export declare const Actions: {
|
|
54
|
+
readonly PING: "ping";
|
|
55
|
+
readonly LIST_FRIENDS: "list_friends";
|
|
56
|
+
readonly LIST_GROUPS: "list_groups";
|
|
57
|
+
readonly LIST_GROUP_MEMBERS: "list_group_members";
|
|
58
|
+
readonly LIST_BLACKLIST: "list_blacklist";
|
|
59
|
+
readonly LIST_FRIEND_CLASSES: "list_friend_classes";
|
|
60
|
+
readonly GET_FRIEND_INFO: "get_friend_info";
|
|
61
|
+
readonly GET_GROUP_INFO: "get_group_info";
|
|
62
|
+
readonly GET_GROUP_MEMBER_INFO: "get_group_member_info";
|
|
63
|
+
readonly GET_STRANGER_INFO: "get_stranger_info";
|
|
64
|
+
readonly GET_STATUS: "get_status";
|
|
65
|
+
readonly GET_SELF_PROFILE: "get_self_profile";
|
|
66
|
+
readonly SEND_PRIVATE_MSG: "send_private_msg";
|
|
67
|
+
readonly SEND_GROUP_MSG: "send_group_msg";
|
|
68
|
+
readonly RECALL_MSG: "recall_msg";
|
|
69
|
+
readonly GET_MSG: "get_msg";
|
|
70
|
+
readonly HISTORY_PRIVATE: "history_private";
|
|
71
|
+
readonly HISTORY_GROUP: "history_group";
|
|
72
|
+
readonly MARK_READ: "mark_read";
|
|
73
|
+
readonly DELETE_MSG: "delete_msg";
|
|
74
|
+
readonly SET_NICKNAME: "set_nickname";
|
|
75
|
+
readonly SET_GENDER: "set_gender";
|
|
76
|
+
readonly SET_BIRTHDAY: "set_birthday";
|
|
77
|
+
readonly SET_SIGNATURE: "set_signature";
|
|
78
|
+
readonly SET_DESCRIPTION: "set_description";
|
|
79
|
+
readonly SET_AVATAR: "set_avatar";
|
|
80
|
+
readonly SET_ONLINE_STATUS: "set_online_status";
|
|
81
|
+
readonly SET_GROUP_NAME: "set_group_name";
|
|
82
|
+
readonly SET_GROUP_AVATAR: "set_group_avatar";
|
|
83
|
+
readonly SET_GROUP_CARD: "set_group_card";
|
|
84
|
+
readonly SET_GROUP_TITLE: "set_group_title";
|
|
85
|
+
readonly SET_GROUP_ADMIN: "set_group_admin";
|
|
86
|
+
readonly SET_GROUP_REMARK: "set_group_remark";
|
|
87
|
+
readonly GROUP_MUTE: "group_mute";
|
|
88
|
+
readonly GROUP_MUTE_ALL: "group_mute_all";
|
|
89
|
+
readonly GROUP_KICK: "group_kick";
|
|
90
|
+
readonly GROUP_QUIT: "group_quit";
|
|
91
|
+
readonly GROUP_INVITE: "group_invite";
|
|
92
|
+
readonly GROUP_POKE: "group_poke";
|
|
93
|
+
readonly GROUP_ANNOUNCE: "group_announce";
|
|
94
|
+
readonly GROUP_SIGN: "group_sign";
|
|
95
|
+
readonly GROUP_ESSENCE_ADD: "group_essence_add";
|
|
96
|
+
readonly GROUP_ESSENCE_REMOVE: "group_essence_remove";
|
|
97
|
+
readonly GROUP_ALLOW_ANONY: "group_allow_anony";
|
|
98
|
+
readonly GROUP_MUTED_LIST: "group_muted_list";
|
|
99
|
+
readonly GROUP_AT_ALL_REMAIN: "group_at_all_remain";
|
|
100
|
+
readonly FRIEND_POKE: "friend_poke";
|
|
101
|
+
readonly FRIEND_LIKE: "friend_like";
|
|
102
|
+
readonly FRIEND_DELETE: "friend_delete";
|
|
103
|
+
readonly FRIEND_REMARK: "friend_remark";
|
|
104
|
+
readonly FRIEND_CLASS: "friend_class";
|
|
105
|
+
readonly GET_SYSTEM_MSG: "get_system_msg";
|
|
106
|
+
readonly HANDLE_FRIEND_REQUEST: "handle_friend_request";
|
|
107
|
+
readonly HANDLE_GROUP_REQUEST: "handle_group_request";
|
|
108
|
+
readonly ADD_FRIEND_CLASS: "add_friend_class";
|
|
109
|
+
readonly DELETE_FRIEND_CLASS: "delete_friend_class";
|
|
110
|
+
readonly RENAME_FRIEND_CLASS: "rename_friend_class";
|
|
111
|
+
readonly GFS_LIST: "gfs_list";
|
|
112
|
+
readonly GFS_INFO: "gfs_info";
|
|
113
|
+
readonly GFS_MKDIR: "gfs_mkdir";
|
|
114
|
+
readonly GFS_DELETE: "gfs_delete";
|
|
115
|
+
readonly GFS_RENAME: "gfs_rename";
|
|
116
|
+
readonly GFS_STAT: "gfs_stat";
|
|
117
|
+
readonly GFS_MOVE: "gfs_move";
|
|
118
|
+
readonly GFS_DOWNLOAD: "gfs_download";
|
|
119
|
+
readonly IMAGE_OCR: "image_ocr";
|
|
120
|
+
readonly RELOAD_FRIEND_LIST: "reload_friend_list";
|
|
121
|
+
readonly RELOAD_GROUP_LIST: "reload_group_list";
|
|
122
|
+
readonly CLEAN_CACHE: "clean_cache";
|
|
123
|
+
readonly GET_GROUP_SHARE: "get_group_share";
|
|
124
|
+
readonly GROUP_SET_JOIN_TYPE: "group_set_join_type";
|
|
125
|
+
readonly GROUP_SET_RATE_LIMIT: "group_set_rate_limit";
|
|
126
|
+
readonly GROUP_MUTE_ANONY: "group_mute_anony";
|
|
127
|
+
readonly GROUP_ANON_INFO: "group_anon_info";
|
|
128
|
+
readonly ADD_FRIEND: "add_friend";
|
|
129
|
+
readonly SEND_TEMP_MSG: "send_temp_msg";
|
|
130
|
+
readonly GET_ROAMING_STAMP: "get_roaming_stamp";
|
|
131
|
+
readonly DELETE_STAMP: "delete_stamp";
|
|
132
|
+
readonly SEND_PRIVATE_FILE: "send_private_file";
|
|
133
|
+
readonly SEND_GROUP_FILE: "send_group_file";
|
|
134
|
+
readonly FRIEND_RECALL_FILE: "friend_recall_file";
|
|
135
|
+
readonly GFS_UPLOAD: "gfs_upload";
|
|
136
|
+
readonly GROUP_SET_REACTION: "group_set_reaction";
|
|
137
|
+
readonly GROUP_DEL_REACTION: "group_del_reaction";
|
|
138
|
+
readonly GET_FORWARD_MSG: "get_forward_msg";
|
|
139
|
+
readonly MAKE_FORWARD_MSG: "make_forward_msg";
|
|
140
|
+
readonly GUILD_LIST: "guild_list";
|
|
141
|
+
readonly GUILD_INFO: "guild_info";
|
|
142
|
+
readonly GUILD_CHANNELS: "guild_channels";
|
|
143
|
+
readonly GUILD_MEMBERS: "guild_members";
|
|
144
|
+
readonly GUILD_SEND_MSG: "guild_send_msg";
|
|
145
|
+
readonly GUILD_RECALL_MSG: "guild_recall_msg";
|
|
146
|
+
readonly GET_FILE_INFO: "get_file_info";
|
|
147
|
+
readonly GET_FILE_URL: "get_file_url";
|
|
148
|
+
readonly GET_AVATAR_URL: "get_avatar_url";
|
|
149
|
+
readonly GET_GROUP_AVATAR_URL: "get_group_avatar_url";
|
|
150
|
+
readonly SET_SCREEN_MEMBER_MSG: "set_screen_member_msg";
|
|
151
|
+
readonly GFS_FORWARD: "gfs_forward";
|
|
152
|
+
readonly GFS_FORWARD_OFFLINE: "gfs_forward_offline";
|
|
153
|
+
readonly RELOAD_BLACKLIST: "reload_blacklist";
|
|
154
|
+
readonly RELOAD_STRANGER_LIST: "reload_stranger_list";
|
|
155
|
+
readonly RELOAD_GUILDS: "reload_guilds";
|
|
156
|
+
readonly GET_STATUS_INFO: "get_status_info";
|
|
157
|
+
readonly GET_CLIENT_KEY: "get_client_key";
|
|
158
|
+
readonly GET_PSKEY: "get_pskey";
|
|
159
|
+
readonly UID2UIN: "uid2uin";
|
|
160
|
+
readonly UIN2UID: "uin2uid";
|
|
161
|
+
readonly GET_VIDEO_URL: "get_video_url";
|
|
162
|
+
readonly GET_ADD_FRIEND_SETTING: "get_add_friend_setting";
|
|
163
|
+
readonly GET_FORUM_URL: "get_forum_url";
|
|
164
|
+
readonly GUILD_CHANNEL_SHARE: "guild_channel_share";
|
|
165
|
+
readonly GET_PIC_URL: "get_pic_url";
|
|
166
|
+
readonly GET_PTT_URL: "get_ptt_url";
|
|
167
|
+
readonly SUBSCRIBE: "subscribe";
|
|
168
|
+
readonly UNSUBSCRIBE: "unsubscribe";
|
|
169
|
+
readonly SET_WEBHOOK: "set_webhook";
|
|
170
|
+
readonly GET_WEBHOOK: "get_webhook";
|
|
171
|
+
readonly SET_NOTIFY: "set_notify";
|
|
172
|
+
readonly GET_NOTIFY: "get_notify";
|
|
173
|
+
};
|
|
174
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sBAAsB;AACtB,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,sBAAsB;AACtB,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAwB;AACxB,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEhD,gBAAgB;AAChB,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,mBAAmB;AACnB,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsLV,CAAC"}
|
package/lib/protocol.js
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IPC 协议类型定义与 Action 常量 (ported from @icqqjs/cli)
|
|
3
|
+
*
|
|
4
|
+
* CLI 与守护进程通过 Unix Domain Socket 通信,
|
|
5
|
+
* 使用 JSON + 换行符(\n)分隔的文本协议。
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* 所有 IPC 操作常量 (from @icqqjs/cli)
|
|
9
|
+
*/
|
|
10
|
+
export const Actions = {
|
|
11
|
+
PING: "ping",
|
|
12
|
+
// ── 列表查询 ──
|
|
13
|
+
LIST_FRIENDS: "list_friends",
|
|
14
|
+
LIST_GROUPS: "list_groups",
|
|
15
|
+
LIST_GROUP_MEMBERS: "list_group_members",
|
|
16
|
+
LIST_BLACKLIST: "list_blacklist",
|
|
17
|
+
LIST_FRIEND_CLASSES: "list_friend_classes",
|
|
18
|
+
// ── 信息查询 ──
|
|
19
|
+
GET_FRIEND_INFO: "get_friend_info",
|
|
20
|
+
GET_GROUP_INFO: "get_group_info",
|
|
21
|
+
GET_GROUP_MEMBER_INFO: "get_group_member_info",
|
|
22
|
+
GET_STRANGER_INFO: "get_stranger_info",
|
|
23
|
+
GET_STATUS: "get_status",
|
|
24
|
+
GET_SELF_PROFILE: "get_self_profile",
|
|
25
|
+
// ── 消息发送 ──
|
|
26
|
+
SEND_PRIVATE_MSG: "send_private_msg",
|
|
27
|
+
SEND_GROUP_MSG: "send_group_msg",
|
|
28
|
+
// ── 消息操作 ──
|
|
29
|
+
RECALL_MSG: "recall_msg",
|
|
30
|
+
GET_MSG: "get_msg",
|
|
31
|
+
HISTORY_PRIVATE: "history_private",
|
|
32
|
+
HISTORY_GROUP: "history_group",
|
|
33
|
+
MARK_READ: "mark_read",
|
|
34
|
+
DELETE_MSG: "delete_msg",
|
|
35
|
+
// ── 个人设置 ──
|
|
36
|
+
SET_NICKNAME: "set_nickname",
|
|
37
|
+
SET_GENDER: "set_gender",
|
|
38
|
+
SET_BIRTHDAY: "set_birthday",
|
|
39
|
+
SET_SIGNATURE: "set_signature",
|
|
40
|
+
SET_DESCRIPTION: "set_description",
|
|
41
|
+
SET_AVATAR: "set_avatar",
|
|
42
|
+
SET_ONLINE_STATUS: "set_online_status",
|
|
43
|
+
// ── 群设置 ──
|
|
44
|
+
SET_GROUP_NAME: "set_group_name",
|
|
45
|
+
SET_GROUP_AVATAR: "set_group_avatar",
|
|
46
|
+
SET_GROUP_CARD: "set_group_card",
|
|
47
|
+
SET_GROUP_TITLE: "set_group_title",
|
|
48
|
+
SET_GROUP_ADMIN: "set_group_admin",
|
|
49
|
+
SET_GROUP_REMARK: "set_group_remark",
|
|
50
|
+
// ── 群管理 ──
|
|
51
|
+
GROUP_MUTE: "group_mute",
|
|
52
|
+
GROUP_MUTE_ALL: "group_mute_all",
|
|
53
|
+
GROUP_KICK: "group_kick",
|
|
54
|
+
GROUP_QUIT: "group_quit",
|
|
55
|
+
GROUP_INVITE: "group_invite",
|
|
56
|
+
GROUP_POKE: "group_poke",
|
|
57
|
+
GROUP_ANNOUNCE: "group_announce",
|
|
58
|
+
GROUP_SIGN: "group_sign",
|
|
59
|
+
GROUP_ESSENCE_ADD: "group_essence_add",
|
|
60
|
+
GROUP_ESSENCE_REMOVE: "group_essence_remove",
|
|
61
|
+
GROUP_ALLOW_ANONY: "group_allow_anony",
|
|
62
|
+
GROUP_MUTED_LIST: "group_muted_list",
|
|
63
|
+
GROUP_AT_ALL_REMAIN: "group_at_all_remain",
|
|
64
|
+
// ── 好友操作 ──
|
|
65
|
+
FRIEND_POKE: "friend_poke",
|
|
66
|
+
FRIEND_LIKE: "friend_like",
|
|
67
|
+
FRIEND_DELETE: "friend_delete",
|
|
68
|
+
FRIEND_REMARK: "friend_remark",
|
|
69
|
+
FRIEND_CLASS: "friend_class",
|
|
70
|
+
// ── 系统消息/请求 ──
|
|
71
|
+
GET_SYSTEM_MSG: "get_system_msg",
|
|
72
|
+
HANDLE_FRIEND_REQUEST: "handle_friend_request",
|
|
73
|
+
HANDLE_GROUP_REQUEST: "handle_group_request",
|
|
74
|
+
// ── 好友分组 ──
|
|
75
|
+
ADD_FRIEND_CLASS: "add_friend_class",
|
|
76
|
+
DELETE_FRIEND_CLASS: "delete_friend_class",
|
|
77
|
+
RENAME_FRIEND_CLASS: "rename_friend_class",
|
|
78
|
+
// ── 群文件系统 ──
|
|
79
|
+
GFS_LIST: "gfs_list",
|
|
80
|
+
GFS_INFO: "gfs_info",
|
|
81
|
+
GFS_MKDIR: "gfs_mkdir",
|
|
82
|
+
GFS_DELETE: "gfs_delete",
|
|
83
|
+
GFS_RENAME: "gfs_rename",
|
|
84
|
+
GFS_STAT: "gfs_stat",
|
|
85
|
+
GFS_MOVE: "gfs_move",
|
|
86
|
+
GFS_DOWNLOAD: "gfs_download",
|
|
87
|
+
// ── 其他功能 ──
|
|
88
|
+
IMAGE_OCR: "image_ocr",
|
|
89
|
+
RELOAD_FRIEND_LIST: "reload_friend_list",
|
|
90
|
+
RELOAD_GROUP_LIST: "reload_group_list",
|
|
91
|
+
CLEAN_CACHE: "clean_cache",
|
|
92
|
+
GET_GROUP_SHARE: "get_group_share",
|
|
93
|
+
// ── 群管理扩展 ──
|
|
94
|
+
GROUP_SET_JOIN_TYPE: "group_set_join_type",
|
|
95
|
+
GROUP_SET_RATE_LIMIT: "group_set_rate_limit",
|
|
96
|
+
GROUP_MUTE_ANONY: "group_mute_anony",
|
|
97
|
+
GROUP_ANON_INFO: "group_anon_info",
|
|
98
|
+
// ── 好友操作扩展 ──
|
|
99
|
+
ADD_FRIEND: "add_friend",
|
|
100
|
+
SEND_TEMP_MSG: "send_temp_msg",
|
|
101
|
+
// ── 漫游表情 ──
|
|
102
|
+
GET_ROAMING_STAMP: "get_roaming_stamp",
|
|
103
|
+
DELETE_STAMP: "delete_stamp",
|
|
104
|
+
// ── 文件传输 ──
|
|
105
|
+
SEND_PRIVATE_FILE: "send_private_file",
|
|
106
|
+
SEND_GROUP_FILE: "send_group_file",
|
|
107
|
+
FRIEND_RECALL_FILE: "friend_recall_file",
|
|
108
|
+
GFS_UPLOAD: "gfs_upload",
|
|
109
|
+
// ── 群消息表态 ──
|
|
110
|
+
GROUP_SET_REACTION: "group_set_reaction",
|
|
111
|
+
GROUP_DEL_REACTION: "group_del_reaction",
|
|
112
|
+
// ── 转发消息 ──
|
|
113
|
+
GET_FORWARD_MSG: "get_forward_msg",
|
|
114
|
+
MAKE_FORWARD_MSG: "make_forward_msg",
|
|
115
|
+
// ── 频道系统 ──
|
|
116
|
+
GUILD_LIST: "guild_list",
|
|
117
|
+
GUILD_INFO: "guild_info",
|
|
118
|
+
GUILD_CHANNELS: "guild_channels",
|
|
119
|
+
GUILD_MEMBERS: "guild_members",
|
|
120
|
+
GUILD_SEND_MSG: "guild_send_msg",
|
|
121
|
+
GUILD_RECALL_MSG: "guild_recall_msg",
|
|
122
|
+
// ── 用户文件操作 ──
|
|
123
|
+
GET_FILE_INFO: "get_file_info",
|
|
124
|
+
GET_FILE_URL: "get_file_url",
|
|
125
|
+
GET_AVATAR_URL: "get_avatar_url",
|
|
126
|
+
GET_GROUP_AVATAR_URL: "get_group_avatar_url",
|
|
127
|
+
// ── 屏蔽群成员消息 ──
|
|
128
|
+
SET_SCREEN_MEMBER_MSG: "set_screen_member_msg",
|
|
129
|
+
// ── 群文件转发 ──
|
|
130
|
+
GFS_FORWARD: "gfs_forward",
|
|
131
|
+
GFS_FORWARD_OFFLINE: "gfs_forward_offline",
|
|
132
|
+
// ── 重载列表 ──
|
|
133
|
+
RELOAD_BLACKLIST: "reload_blacklist",
|
|
134
|
+
RELOAD_STRANGER_LIST: "reload_stranger_list",
|
|
135
|
+
RELOAD_GUILDS: "reload_guilds",
|
|
136
|
+
// ── 在线状态查询 ──
|
|
137
|
+
GET_STATUS_INFO: "get_status_info",
|
|
138
|
+
// ── 密钥/工具 ──
|
|
139
|
+
GET_CLIENT_KEY: "get_client_key",
|
|
140
|
+
GET_PSKEY: "get_pskey",
|
|
141
|
+
UID2UIN: "uid2uin",
|
|
142
|
+
UIN2UID: "uin2uid",
|
|
143
|
+
// ── 视频/加好友设置 ──
|
|
144
|
+
GET_VIDEO_URL: "get_video_url",
|
|
145
|
+
GET_ADD_FRIEND_SETTING: "get_add_friend_setting",
|
|
146
|
+
// ── 频道扩展 ──
|
|
147
|
+
GET_FORUM_URL: "get_forum_url",
|
|
148
|
+
GUILD_CHANNEL_SHARE: "guild_channel_share",
|
|
149
|
+
// ── 获取图片/语音 URL ──
|
|
150
|
+
GET_PIC_URL: "get_pic_url",
|
|
151
|
+
GET_PTT_URL: "get_ptt_url",
|
|
152
|
+
// ── 消息订阅 ──
|
|
153
|
+
SUBSCRIBE: "subscribe",
|
|
154
|
+
UNSUBSCRIBE: "unsubscribe",
|
|
155
|
+
// ── Webhook ──
|
|
156
|
+
SET_WEBHOOK: "set_webhook",
|
|
157
|
+
GET_WEBHOOK: "get_webhook",
|
|
158
|
+
// ── 系统通知 ──
|
|
159
|
+
SET_NOTIFY: "set_notify",
|
|
160
|
+
GET_NOTIFY: "get_notify",
|
|
161
|
+
};
|
|
162
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|
package/lib/routes.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ICQQ HTTP 路由注册 — 通过 IPC 查询守护进程数据
|
|
3
|
+
*/
|
|
4
|
+
import type { Router } from "@zhin.js/http";
|
|
5
|
+
import type { Plugin } from "zhin.js";
|
|
6
|
+
import type { IcqqAdapter } from "./adapter.js";
|
|
7
|
+
export declare function registerRoutes(router: Router, icqq: IcqqAdapter, _root: Plugin): void;
|
|
8
|
+
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,MAAM,QAuEd"}
|