@zhin.js/adapter-qq 5.0.2 → 6.0.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.
Files changed (130) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/README.md +75 -409
  3. package/adapters/qq.ts +51 -0
  4. package/agent/tools/add_role.ts +2 -2
  5. package/agent/tools/channel_info.ts +2 -2
  6. package/agent/tools/create_role.ts +2 -2
  7. package/agent/tools/list_channels.ts +2 -2
  8. package/agent/tools/list_guilds.ts +2 -2
  9. package/agent/tools/list_roles.ts +2 -2
  10. package/agent/tools/member_detail.ts +2 -2
  11. package/agent/tools/remove_role.ts +2 -2
  12. package/commands/endpoint/add/[name:string=].ts +21 -0
  13. package/commands/endpoint/cancel.ts +15 -0
  14. package/commands/endpoint/list.ts +10 -0
  15. package/commands/endpoint/remove/[name:string].ts +15 -0
  16. package/lib/endpoint.d.ts +75 -0
  17. package/lib/endpoint.js +358 -0
  18. package/lib/index.d.ts +6 -0
  19. package/lib/index.js +6 -0
  20. package/lib/platform-permit.d.ts +16 -0
  21. package/lib/{src/platform-permit.js → platform-permit.js} +1 -2
  22. package/lib/protocol.d.ts +96 -0
  23. package/lib/protocol.js +129 -0
  24. package/lib/qq-agent-deps.d.ts +21 -0
  25. package/lib/qq-agent-deps.js +30 -0
  26. package/lib/qq-bind-api.d.ts +36 -0
  27. package/lib/{src/qq-bind-api.js → qq-bind-api.js} +0 -1
  28. package/lib/qq-bind-flow.d.ts +19 -0
  29. package/lib/{src/qq-bind-flow.js → qq-bind-flow.js} +0 -1
  30. package/lib/qq-bind-persist.d.ts +12 -0
  31. package/lib/{src/qq-bind-persist.js → qq-bind-persist.js} +4 -5
  32. package/lib/qq-endpoint-commands.d.ts +25 -0
  33. package/lib/qq-endpoint-commands.js +147 -0
  34. package/lib/qq-endpoint-config.d.ts +17 -0
  35. package/lib/qq-endpoint-config.js +110 -0
  36. package/lib/qq-runtime-state.d.ts +17 -0
  37. package/lib/qq-runtime-state.js +13 -0
  38. package/lib/webhook.d.ts +18 -0
  39. package/lib/webhook.js +100 -0
  40. package/lib/ws.d.ts +24 -0
  41. package/lib/ws.js +118 -0
  42. package/package.json +51 -40
  43. package/plugin.ts +16 -0
  44. package/schema.json +85 -0
  45. package/src/endpoint.ts +362 -596
  46. package/src/index.ts +56 -186
  47. package/src/platform-permit.ts +1 -1
  48. package/src/protocol.ts +229 -0
  49. package/src/qq-agent-deps.ts +49 -12
  50. package/src/qq-bind-persist.ts +4 -4
  51. package/src/qq-endpoint-commands.ts +174 -0
  52. package/src/qq-endpoint-config.ts +135 -0
  53. package/src/qq-runtime-state.ts +36 -0
  54. package/src/webhook.ts +127 -0
  55. package/src/ws.ts +172 -0
  56. package/client/Dashboard.tsx +0 -230
  57. package/client/index.tsx +0 -11
  58. package/client/tsconfig.json +0 -7
  59. package/client/utils/api.ts +0 -30
  60. package/dist/index.js +0 -30
  61. package/lib/agent/tools/add_role.js +0 -23
  62. package/lib/agent/tools/add_role.js.map +0 -1
  63. package/lib/agent/tools/channel_info.js +0 -19
  64. package/lib/agent/tools/channel_info.js.map +0 -1
  65. package/lib/agent/tools/create_role.js +0 -22
  66. package/lib/agent/tools/create_role.js.map +0 -1
  67. package/lib/agent/tools/list_channels.js +0 -20
  68. package/lib/agent/tools/list_channels.js.map +0 -1
  69. package/lib/agent/tools/list_guilds.js +0 -17
  70. package/lib/agent/tools/list_guilds.js.map +0 -1
  71. package/lib/agent/tools/list_roles.js +0 -20
  72. package/lib/agent/tools/list_roles.js.map +0 -1
  73. package/lib/agent/tools/member_detail.js +0 -20
  74. package/lib/agent/tools/member_detail.js.map +0 -1
  75. package/lib/agent/tools/remove_role.js +0 -23
  76. package/lib/agent/tools/remove_role.js.map +0 -1
  77. package/lib/package.json +0 -105
  78. package/lib/src/adapter.js +0 -81
  79. package/lib/src/adapter.js.map +0 -1
  80. package/lib/src/endpoint.js +0 -600
  81. package/lib/src/endpoint.js.map +0 -1
  82. package/lib/src/gateway-config.js +0 -32
  83. package/lib/src/gateway-config.js.map +0 -1
  84. package/lib/src/group-at-normalize.js +0 -68
  85. package/lib/src/group-at-normalize.js.map +0 -1
  86. package/lib/src/inbound-action.js +0 -57
  87. package/lib/src/inbound-action.js.map +0 -1
  88. package/lib/src/inbound-normalize.js +0 -47
  89. package/lib/src/inbound-normalize.js.map +0 -1
  90. package/lib/src/index.js +0 -194
  91. package/lib/src/index.js.map +0 -1
  92. package/lib/src/mention-enrich.js +0 -52
  93. package/lib/src/mention-enrich.js.map +0 -1
  94. package/lib/src/outbound-keyboard.js +0 -100
  95. package/lib/src/outbound-keyboard.js.map +0 -1
  96. package/lib/src/outbound-markdown.js +0 -189
  97. package/lib/src/outbound-markdown.js.map +0 -1
  98. package/lib/src/outbound-media.js +0 -51
  99. package/lib/src/outbound-media.js.map +0 -1
  100. package/lib/src/outbound-mixed-media.js +0 -78
  101. package/lib/src/outbound-mixed-media.js.map +0 -1
  102. package/lib/src/platform-permit.js.map +0 -1
  103. package/lib/src/qq-agent-deps.js +0 -10
  104. package/lib/src/qq-agent-deps.js.map +0 -1
  105. package/lib/src/qq-bind-api.js.map +0 -1
  106. package/lib/src/qq-bind-flow.js.map +0 -1
  107. package/lib/src/qq-bind-persist.js.map +0 -1
  108. package/lib/src/qq-endpoint-manager.js +0 -159
  109. package/lib/src/qq-endpoint-manager.js.map +0 -1
  110. package/lib/src/sdk-version.js +0 -19
  111. package/lib/src/sdk-version.js.map +0 -1
  112. package/lib/src/segment-mapper.js +0 -2
  113. package/lib/src/segment-mapper.js.map +0 -1
  114. package/lib/src/types.js +0 -2
  115. package/lib/src/types.js.map +0 -1
  116. package/plugin.yml +0 -3
  117. package/src/adapter.ts +0 -97
  118. package/src/gateway-config.ts +0 -48
  119. package/src/group-at-normalize.ts +0 -75
  120. package/src/inbound-action.ts +0 -87
  121. package/src/inbound-normalize.ts +0 -57
  122. package/src/mention-enrich.ts +0 -71
  123. package/src/outbound-keyboard.ts +0 -117
  124. package/src/outbound-markdown.ts +0 -212
  125. package/src/outbound-media.ts +0 -58
  126. package/src/outbound-mixed-media.ts +0 -101
  127. package/src/qq-endpoint-manager.ts +0 -199
  128. package/src/sdk-version.ts +0 -21
  129. package/src/segment-mapper.ts +0 -1
  130. package/src/types.ts +0 -52
@@ -1,600 +0,0 @@
1
- /**
2
- * QQ 官方 Endpoint 实现
3
- */
4
- import { Bot as QQOfficialClient, } from "qq-official-bot";
5
- import path from "path";
6
- import { formatCompact } from "@zhin.js/logger";
7
- import { Message, segment } from 'zhin.js';
8
- import { ReceiverMode } from "./types.js";
9
- import { normalizeQqInboundWsPayload } from "./inbound-normalize.js";
10
- import { normalizeGroupAtPrefix } from "./group-at-normalize.js";
11
- import { SDK_VERSION, SDK_VERSION_HEADER } from "./sdk-version.js";
12
- import { applyCustomAuthEndpoints } from "./gateway-config.js";
13
- import { normalizeOutboundMarkdown, asOutboundSegments, splitReplyPrefix } from "./outbound-markdown.js";
14
- import { normalizeOutboundMedia } from "./outbound-media.js";
15
- import { fromCanonicalSegments, toCanonicalSegments } from "./segment-mapper.js";
16
- import { enrichCanonicalMentionNames } from "./mention-enrich.js";
17
- import { buildMixedMediaMessagePayload, buildQqImageUploadPayload, firstImageSegment, shouldSendTextImageMixedMedia, } from "./outbound-mixed-media.js";
18
- import { normalizeQqGuildSenderForPermit } from "./platform-permit.js";
19
- import { expandKeyboardSegmentsForQq } from "./outbound-keyboard.js";
20
- import { formatQqActionMessage } from "./inbound-action.js";
21
- /** 从 qq-official-bot SendResult / 审核回包中解析出站消息 ID */
22
- export function resolveOutboundMessageId(result) {
23
- if (!result || typeof result !== "object") {
24
- throw new Error("QQ 发送消息失败:响应为空");
25
- }
26
- const row = result;
27
- const nested = row.data && typeof row.data === "object"
28
- ? row.data
29
- : undefined;
30
- const audit = (row.message_audit ?? nested?.message_audit);
31
- const id = row.id ?? row.message_id ?? audit?.audit_id;
32
- if (id == null || id === "") {
33
- const code = row.code;
34
- const msg = row.message;
35
- throw new Error(code != null
36
- ? `QQ 发送消息失败(${String(code)})${msg ? `: ${String(msg)}` : ""}`
37
- : "QQ 发送消息失败:响应缺少消息 ID");
38
- }
39
- return String(id);
40
- }
41
- export class QQEndpoint extends QQOfficialClient {
42
- adapter;
43
- $connected = false;
44
- /** 平台侧机器人 user_id,用于 @ 触发匹配 */
45
- $platformUserId;
46
- get pluginLogger() {
47
- return this.adapter.plugin.logger;
48
- }
49
- get $id() {
50
- return this.$config.name;
51
- }
52
- constructor(adapter, config) {
53
- if (!config.data_dir)
54
- config.data_dir = path.join(process.cwd(), "data");
55
- if (config.mode === ReceiverMode.MIDDLEWARE) {
56
- const mw = config;
57
- if (!mw.platform) {
58
- mw.platform = (mw.application ?? "koa");
59
- }
60
- }
61
- super(config);
62
- this.adapter = adapter;
63
- this.$config = config;
64
- this.attachSdkVersionHeader();
65
- applyCustomAuthEndpoints(this, config, this.pluginLogger);
66
- }
67
- /** 出站 QQ API 请求附带 SDK 版本,便于平台侧日志排查 */
68
- attachSdkVersionHeader() {
69
- this.request.interceptors.request.use((reqConfig) => {
70
- reqConfig.headers[SDK_VERSION_HEADER] = SDK_VERSION;
71
- return reqConfig;
72
- });
73
- }
74
- /** 归一化 QQ API v2 群聊字段后再交给 qq-official-bot 解析 */
75
- dispatchEvent(event, wsRes) {
76
- this.pluginLogger.debug({
77
- op: 'inbound_ws',
78
- event,
79
- group: String(wsRes.d?.group_openid ?? wsRes.d?.group_id ?? '?'),
80
- });
81
- if (event === 'GROUP_AT_MESSAGE_CREATE' || event === 'GROUP_MESSAGE_CREATE') {
82
- this.pluginLogger.info(`qq inbound ws: ${event} group=${String(wsRes.d?.group_openid ?? wsRes.d?.group_id ?? '?')}`);
83
- }
84
- normalizeQqInboundWsPayload(event, wsRes);
85
- super.dispatchEvent(event, wsRes);
86
- }
87
- guildMemberCache = new Map();
88
- guildOwnerCache = new Map();
89
- async enrichGuildSender(message, guildId, userId) {
90
- const key = `${guildId}:${userId}`;
91
- const now = Date.now();
92
- const cached = this.guildMemberCache.get(key);
93
- if (cached && now - cached.at < 60_000) {
94
- message.$sender.role = cached.role;
95
- message.$sender.permissions = cached.permissions;
96
- return;
97
- }
98
- try {
99
- let ownerId;
100
- const ownerCached = this.guildOwnerCache.get(guildId);
101
- if (ownerCached && now - ownerCached.at < 300_000) {
102
- ownerId = ownerCached.ownerId;
103
- }
104
- else {
105
- const guild = await this.getGuildInfo(guildId);
106
- ownerId = guild?.owner_id?.toString?.() ?? guild?.owner?.id?.toString?.();
107
- this.guildOwnerCache.set(guildId, { at: now, ownerId });
108
- }
109
- const member = await this.getGuildMember(guildId, userId);
110
- const roleIds = Array.isArray(member?.roles)
111
- ? member.roles.map((r) => typeof r === "string" ? r : r?.id ?? String(r))
112
- : [];
113
- const isOwner = ownerId === userId;
114
- const isAdmin = !isOwner && roleIds.length > 0;
115
- const normalized = normalizeQqGuildSenderForPermit({ roles: roleIds, isOwner, isAdmin });
116
- const entry = {
117
- at: now,
118
- role: normalized.role,
119
- permissions: normalized.permissions ?? [],
120
- };
121
- this.guildMemberCache.set(key, entry);
122
- message.$sender.role = entry.role;
123
- message.$sender.permissions = entry.permissions;
124
- }
125
- catch {
126
- // 保守拒绝
127
- }
128
- }
129
- async handleQQMessage(msg) {
130
- try {
131
- const message = this.$formatMessage(msg);
132
- if (msg.message_type === "guild" && msg.guild_id && message.$sender.id) {
133
- await this.enrichGuildSender(message, String(msg.guild_id), message.$sender.id);
134
- }
135
- this.adapter.emit("message.receive", message);
136
- this.pluginLogger.debug(`${this.$config.name} recv ${message.$channel.type}(${message.$channel.id}):${segment.raw(message.$content)}`);
137
- }
138
- catch (err) {
139
- this.pluginLogger.warn(`qq format inbound failed (${msg.message_type}): ${err instanceof Error ? err.message : String(err)}`);
140
- }
141
- }
142
- async handleQQAction(event) {
143
- try {
144
- await event.reply(0);
145
- const channel = event.notice_type === 'group'
146
- ? { id: String(event.group_id), type: 'group' }
147
- : event.notice_type === 'guild'
148
- ? { id: String(event.channel_id), type: 'channel' }
149
- : { id: String(event.operator_id), type: 'private' };
150
- const message = formatQqActionMessage(event, {
151
- endpointName: this.$config.name,
152
- send: async (content) => this.adapter.sendMessage({
153
- ...channel,
154
- context: 'qq',
155
- endpoint: this.$config.name,
156
- content,
157
- }),
158
- });
159
- await this.adapter.receiveMessageAwait(message);
160
- this.pluginLogger.debug(`qq action ${message.$channel.type}(${message.$channel.id}): ${message.$raw}`);
161
- }
162
- catch (err) {
163
- this.pluginLogger.warn(`qq format action failed: ${err instanceof Error ? err.message : String(err)}`);
164
- }
165
- }
166
- handleGroupNotice(event, payload) {
167
- this.pluginLogger.info(`qq notice ${event}: group=${payload.group_id ?? '?'} operator=${payload.operator_id ?? '?'}`);
168
- }
169
- async $connect() {
170
- this.on("message.group", this.handleQQMessage.bind(this));
171
- this.on("message.guild", this.handleQQMessage.bind(this));
172
- this.on("message.private", this.handleQQMessage.bind(this));
173
- this.on("notice.friend.action", this.handleQQAction.bind(this));
174
- this.on("notice.group.action", this.handleQQAction.bind(this));
175
- this.on("notice.guild.action", this.handleQQAction.bind(this));
176
- this.on("notice.group.increase", (e) => this.handleGroupNotice('group.add_robot', e));
177
- this.on("notice.group.decrease", (e) => this.handleGroupNotice('group.del_robot', e));
178
- this.on("notice.group.receive_open", (e) => this.handleGroupNotice('group.msg_receive_open', e));
179
- this.on("notice.group.receive_close", (e) => this.handleGroupNotice('group.msg_receive_close', e));
180
- await this.start();
181
- this.mountWebhookReceiver();
182
- this.$connected = true;
183
- try {
184
- const self = await this.getSelfInfo();
185
- const uid = self?.id
186
- ?? self?.user_id;
187
- if (uid)
188
- this.$platformUserId = String(uid);
189
- }
190
- catch (err) {
191
- this.pluginLogger.debug(`${this.$config.name} getSelfInfo failed: ${err instanceof Error ? err.message : String(err)}`);
192
- }
193
- }
194
- async $disconnect() {
195
- // Endpoint 继承自 EventEmitter,清除 $connect() 注册的所有监听器
196
- this.removeAllListeners();
197
- await this.stop();
198
- this.$connected = false;
199
- }
200
- resolveWebhookPath() {
201
- const raw = this.$config.webhookPath ?? "/qq/webhook";
202
- return raw.startsWith("/") ? raw : `/${raw}`;
203
- }
204
- /**
205
- * Webhook 入站:middleware(挂 host-router)或独立 HTTP 端口(qq-official-bot 内置服务)。
206
- */
207
- mountWebhookReceiver() {
208
- const mode = this.$config.mode;
209
- if (mode === ReceiverMode.MIDDLEWARE) {
210
- const router = this.adapter.getRouter();
211
- if (!router) {
212
- throw new Error("QQ mode=middleware 需要启用 @zhin.js/host-router 插件");
213
- }
214
- const webhookPath = this.resolveWebhookPath();
215
- const mw = this.middleware;
216
- router.post(webhookPath, async (ctx) => {
217
- this.pluginLogger.debug(ctx.body);
218
- await mw(ctx, async () => { });
219
- });
220
- this.pluginLogger.info(formatCompact({
221
- op: "webhook",
222
- mode: "middleware",
223
- path: webhookPath,
224
- url: `POST ${webhookPath}`,
225
- note: "无 /api 前缀;Host API 才走 /api/*",
226
- }));
227
- return;
228
- }
229
- if (mode === ReceiverMode.WEBHOOK) {
230
- const cfg = this.$config;
231
- this.pluginLogger.info(formatCompact({
232
- op: "webhook",
233
- mode: "standalone",
234
- port: cfg.port,
235
- path: cfg.path,
236
- url: `http://127.0.0.1:${cfg.port}${cfg.path}`,
237
- }));
238
- }
239
- }
240
- toWireSendContent(content) {
241
- const items = (Array.isArray(content) ? content : [content]).map((item) => typeof item === "string" ? { type: "text", data: { text: item } } : item);
242
- return fromCanonicalSegments(toCanonicalSegments(items));
243
- }
244
- $formatMessage(msg) {
245
- const raw = msg;
246
- if (msg.message_type === "group") {
247
- if (!raw.group_id && raw.group_openid) {
248
- raw.group_id = raw.group_openid;
249
- }
250
- if (!msg.user_id && raw.author) {
251
- const uid = raw.author.member_openid ?? raw.author.user_openid ?? raw.author.id;
252
- if (uid)
253
- msg.user_id = String(uid);
254
- }
255
- }
256
- let target_id = msg.user_id;
257
- if (msg.message_type === "guild")
258
- target_id = msg.channel_id;
259
- if (msg.message_type === "group")
260
- target_id = raw.group_id ?? msg.group_id ?? "";
261
- if (msg.sub_type === "direct")
262
- target_id = `direct:${msg.guild_id}`;
263
- let content = msg.message;
264
- if (msg.message_type === "group" && Array.isArray(content)) {
265
- const endpointAtIds = [this.$platformUserId, this.$config.appid]
266
- .filter((id) => Boolean(id))
267
- .map(String);
268
- content = normalizeGroupAtPrefix(content, endpointAtIds, raw.__zhin_group_at === true);
269
- }
270
- if (Array.isArray(content)) {
271
- content = enrichCanonicalMentionNames(toCanonicalSegments(content), this.adapter, raw.mentions);
272
- }
273
- const result = Message.from(msg, {
274
- $id: msg.message_id?.toString(),
275
- $adapter: "qq",
276
- $endpoint: this.$config.name,
277
- $sender: {
278
- id: msg.sender.user_id?.toString(),
279
- name: msg.sender.user_name?.toString(),
280
- },
281
- $channel: {
282
- id: target_id,
283
- type: msg.message_type === "guild" ? "channel" : msg.message_type,
284
- },
285
- $content: content,
286
- $raw: msg.raw_message,
287
- $timestamp: Date.now(),
288
- $recall: async () => {
289
- await this.$recallMessage(result.$id);
290
- },
291
- $reply: async (content, quote = true) => {
292
- if (!Array.isArray(content))
293
- content = [content];
294
- if (quote)
295
- content.unshift({ type: "reply", data: { id: typeof quote === "boolean" ? result.$id : quote } });
296
- return await this.adapter.sendMessage({
297
- ...result.$channel,
298
- context: "qq",
299
- endpoint: this.$config.name,
300
- content,
301
- });
302
- },
303
- });
304
- return result;
305
- }
306
- async $sendMessage(options) {
307
- const expanded = expandKeyboardSegmentsForQq(options.content);
308
- const canonicalized = this.toWireSendContent(expanded);
309
- const mediaNorm = normalizeOutboundMedia(canonicalized);
310
- const markdownMode = this.$config.outboundMarkdown;
311
- if ((options.type === "group" || options.type === "private")
312
- && !options.id.startsWith("direct:")
313
- && shouldSendTextImageMixedMedia(mediaNorm, markdownMode)) {
314
- return await this.$sendTextImageMixedMedia(options, mediaNorm);
315
- }
316
- const content = normalizeOutboundMarkdown(mediaNorm, markdownMode);
317
- switch (options.type) {
318
- case "private": {
319
- if (options.id.startsWith("direct:")) {
320
- const id = options.id.replace("direct:", "");
321
- const result = await this.sendDirectMessage(id, content);
322
- this.pluginLogger.debug(`${this.$config.name} send ${options.type}(${options.id}):${segment.raw(content)}`);
323
- return `direct-${options.id}:${resolveOutboundMessageId(result)}`;
324
- }
325
- else {
326
- const result = await this.sendPrivateMessage(options.id, content);
327
- this.pluginLogger.debug(`${this.$config.name} send ${options.type}(${options.id}):${segment.raw(content)}`);
328
- return `private-${options.id}:${resolveOutboundMessageId(result)}`;
329
- }
330
- }
331
- case "group": {
332
- const result = await this.sendGroupMessage(options.id, content);
333
- this.pluginLogger.debug(`${this.$config.name} send ${options.type}(${options.id}):${segment.raw(content)}`);
334
- return `group-${options.id}:${resolveOutboundMessageId(result)}`;
335
- }
336
- case "channel": {
337
- const result = await this.sendGuildMessage(options.id, content);
338
- this.pluginLogger.debug(`${this.$config.name} send ${options.type}(${options.id}):${segment.raw(content)}`);
339
- return `channel-${options.id}:${resolveOutboundMessageId(result)}`;
340
- }
341
- default:
342
- throw new Error(`unsupported channel type ${options.type}`);
343
- }
344
- }
345
- /** 内联图 + 文本:上传 file_info 后以 msg_type=7 图文混排发送(二维码等场景) */
346
- async $sendTextImageMixedMedia(options, content) {
347
- const endpointPath = this.resolveV2EndpointPath(options);
348
- const { body } = splitReplyPrefix(asOutboundSegments(content));
349
- const image = firstImageSegment(body);
350
- if (!image) {
351
- throw new Error("QQ 图文混排:未找到图片段");
352
- }
353
- const uploadPayload = buildQqImageUploadPayload(image);
354
- const { data: uploadResult } = await this.request.post(`${endpointPath}/files`, { ...uploadPayload, srv_send_msg: false });
355
- if (!uploadResult?.file_info) {
356
- throw new Error("QQ 图文混排:图片上传未返回 file_info");
357
- }
358
- const messagePayload = buildMixedMediaMessagePayload(content, uploadResult.file_info);
359
- const { data: result } = await this.request.post(`${endpointPath}/messages`, messagePayload);
360
- this.pluginLogger.debug(`${this.$config.name} send mixed-media ${options.type}(${options.id}):${segment.raw(content)}`);
361
- const idPrefix = options.type === "group" ? "group" : "private";
362
- return `${idPrefix}-${options.id}:${resolveOutboundMessageId(result)}`;
363
- }
364
- resolveV2EndpointPath(options) {
365
- switch (options.type) {
366
- case "group":
367
- return `/v2/groups/${options.id}`;
368
- case "private":
369
- return `/v2/users/${options.id}`;
370
- default:
371
- throw new Error(`QQ 图文混排不支持 ${options.type}`);
372
- }
373
- }
374
- async $recallMessage(id) {
375
- if (!/^(private|group|channel|direct)-([^\:]+):(.+)$/.test(id))
376
- throw new Error(`invalid message id ${id}`);
377
- const match = id.match(/^(private|group|channel|direct)-([^\:]+):(.+)$/);
378
- if (!match)
379
- return;
380
- const [, target_type, target_id, message_id] = match;
381
- if (target_type === "private")
382
- await this.recallPrivateMessage(target_id, message_id);
383
- if (target_type === "group")
384
- await this.recallGroupMessage(target_id, message_id);
385
- if (target_type === "channel")
386
- await this.recallGuildMessage(target_id, message_id);
387
- if (target_type === "direct")
388
- await this.recallDirectMessage(target_id, message_id);
389
- }
390
- // ==================== 频道管理 API ====================
391
- /**
392
- * 获取频道列表
393
- */
394
- async getGuilds() {
395
- try {
396
- return await this.guildService.getList();
397
- }
398
- catch (error) {
399
- this.pluginLogger.error(`QQ Endpoint ${this.$id} 获取频道列表失败:`, error);
400
- throw error;
401
- }
402
- }
403
- /**
404
- * 获取频道详情
405
- * @param guildId 频道 ID
406
- */
407
- async getGuildInfo(guildId) {
408
- try {
409
- return await this.guildService.getInfo(guildId);
410
- }
411
- catch (error) {
412
- this.pluginLogger.error(`QQ Endpoint ${this.$id} 获取频道详情失败:`, error);
413
- throw error;
414
- }
415
- }
416
- /**
417
- * 获取子频道列表
418
- * @param guildId 频道 ID
419
- */
420
- async getChannels(guildId) {
421
- try {
422
- return await this.channelService.getList(guildId);
423
- }
424
- catch (error) {
425
- this.pluginLogger.error(`QQ Endpoint ${this.$id} 获取子频道列表失败:`, error);
426
- throw error;
427
- }
428
- }
429
- /**
430
- * 获取子频道详情
431
- * @param channelId 子频道 ID
432
- */
433
- async getChannelInfo(channelId) {
434
- try {
435
- return await this.channelService.getInfo(channelId);
436
- }
437
- catch (error) {
438
- this.pluginLogger.error(`QQ Endpoint ${this.$id} 获取子频道详情失败:`, error);
439
- throw error;
440
- }
441
- }
442
- /**
443
- * 获取频道成员列表
444
- * @param guildId 频道 ID
445
- */
446
- async getGuildMembers(guildId) {
447
- try {
448
- return await this.memberService.getGuildMemberList(guildId);
449
- }
450
- catch (error) {
451
- this.pluginLogger.error(`QQ Endpoint ${this.$id} 获取频道成员列表失败:`, error);
452
- throw error;
453
- }
454
- }
455
- /**
456
- * 获取频道成员详情
457
- * @param guildId 频道 ID
458
- * @param userId 用户 ID
459
- */
460
- async getGuildMember(guildId, userId) {
461
- try {
462
- return await this.memberService.getGuildMemberInfo(guildId, userId);
463
- }
464
- catch (error) {
465
- this.pluginLogger.error(`QQ Endpoint ${this.$id} 获取成员详情失败:`, error);
466
- throw error;
467
- }
468
- }
469
- /**
470
- * 删除频道成员(踢出)
471
- * @param guildId 频道 ID
472
- * @param userId 用户 ID
473
- * @param addBlacklist 是否加入黑名单
474
- * @param deleteHistoryMsg 删除历史消息天数 (-1不删除,0全部删除,3/7/15/30)
475
- */
476
- async removeGuildMember(guildId, userId, addBlacklist, deleteHistoryMsg) {
477
- try {
478
- await this.memberService.kickMember(guildId, userId, deleteHistoryMsg, addBlacklist);
479
- this.pluginLogger.info(`QQ Endpoint ${this.$id} 踢出成员 ${userId}(频道 ${guildId})`);
480
- return true;
481
- }
482
- catch (error) {
483
- this.pluginLogger.error(`QQ Endpoint ${this.$id} 踢出成员失败:`, error);
484
- throw error;
485
- }
486
- }
487
- /**
488
- * 获取频道角色列表
489
- * @param guildId 频道 ID
490
- */
491
- async getGuildRoles(guildId) {
492
- try {
493
- return await this.guildService.getRoles(guildId);
494
- }
495
- catch (error) {
496
- this.pluginLogger.error(`QQ Endpoint ${this.$id} 获取角色列表失败:`, error);
497
- throw error;
498
- }
499
- }
500
- /**
501
- * 创建频道角色
502
- * @param guildId 频道 ID
503
- * @param name 角色名
504
- * @param color 颜色
505
- * @param hoist 是否在成员列表中单独展示 (0 或 1)
506
- */
507
- async createGuildRole(guildId, name, color, hoist) {
508
- try {
509
- const result = await this.guildService.createRole(guildId, { name, color: color || 0, hoist: hoist ?? 0 });
510
- this.pluginLogger.info(`QQ Endpoint ${this.$id} 创建角色 "${name}"(频道 ${guildId})`);
511
- return result;
512
- }
513
- catch (error) {
514
- this.pluginLogger.error(`QQ Endpoint ${this.$id} 创建角色失败:`, error);
515
- throw error;
516
- }
517
- }
518
- /**
519
- * 给成员添加角色
520
- * @param guildId 频道 ID
521
- * @param channelId 子频道 ID
522
- * @param userId 用户 ID
523
- * @param roleId 角色 ID
524
- */
525
- async addMemberRole(guildId, channelId, userId, roleId) {
526
- try {
527
- await this.memberService.addMemberRole(guildId, channelId, userId, roleId);
528
- this.pluginLogger.info(`QQ Endpoint ${this.$id} 给成员 ${userId} 添加角色 ${roleId}(频道 ${guildId})`);
529
- return true;
530
- }
531
- catch (error) {
532
- this.pluginLogger.error(`QQ Endpoint ${this.$id} 添加角色失败:`, error);
533
- throw error;
534
- }
535
- }
536
- /**
537
- * 移除成员角色
538
- * @param guildId 频道 ID
539
- * @param channelId 子频道 ID
540
- * @param userId 用户 ID
541
- * @param roleId 角色 ID
542
- */
543
- async removeMemberRole(guildId, channelId, userId, roleId) {
544
- try {
545
- await this.memberService.removeMemberRole(guildId, channelId, userId, roleId);
546
- this.pluginLogger.info(`QQ Endpoint ${this.$id} 移除成员 ${userId} 的角色 ${roleId}(频道 ${guildId})`);
547
- return true;
548
- }
549
- catch (error) {
550
- this.pluginLogger.error(`QQ Endpoint ${this.$id} 移除角色失败:`, error);
551
- throw error;
552
- }
553
- }
554
- /**
555
- * 禁言成员(批量)
556
- * @param guildId 频道 ID
557
- * @param userIds 用户 ID 列表
558
- * @param muteSeconds 禁言时长(秒),0 表示解除禁言
559
- */
560
- async muteMembers(guildId, userIds, muteSeconds) {
561
- try {
562
- if (muteSeconds > 0) {
563
- await this.memberService.muteMembers(guildId, userIds, muteSeconds);
564
- this.pluginLogger.info(`QQ Endpoint ${this.$id} 禁言成员 ${userIds.join(',')} ${muteSeconds}秒(频道 ${guildId})`);
565
- }
566
- else {
567
- await this.memberService.unmuteMembers(guildId, userIds);
568
- this.pluginLogger.info(`QQ Endpoint ${this.$id} 解除成员 ${userIds.join(',')} 禁言(频道 ${guildId})`);
569
- }
570
- return true;
571
- }
572
- catch (error) {
573
- this.pluginLogger.error(`QQ Endpoint ${this.$id} 禁言操作失败:`, error);
574
- throw error;
575
- }
576
- }
577
- /**
578
- * 全员禁言
579
- * @param guildId 频道 ID
580
- * @param muteSeconds 禁言时长(秒),0 表示解除禁言
581
- */
582
- async muteAll(guildId, muteSeconds) {
583
- try {
584
- if (muteSeconds > 0) {
585
- await this.guildService.mute(guildId, muteSeconds);
586
- this.pluginLogger.info(`QQ Endpoint ${this.$id} 开启全员禁言(频道 ${guildId})`);
587
- }
588
- else {
589
- await this.guildService.unmute(guildId);
590
- this.pluginLogger.info(`QQ Endpoint ${this.$id} 关闭全员禁言(频道 ${guildId})`);
591
- }
592
- return true;
593
- }
594
- catch (error) {
595
- this.pluginLogger.error(`QQ Endpoint ${this.$id} 全员禁言操作失败:`, error);
596
- throw error;
597
- }
598
- }
599
- }
600
- //# sourceMappingURL=endpoint.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../../src/endpoint.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- import { formatCompact } from '@zhin.js/logger';
2
- import { ReceiverMode } from 'qq-official-bot';
3
- /** qq-official-bot 默认 token 接口 */
4
- export const DEFAULT_ACCESS_TOKEN_URL = "https://bots.qq.com/app/getAppAccessToken";
5
- /** qq-official-bot 默认 gateway 路径(相对 API baseURL) */
6
- export const DEFAULT_GATEWAY_URL = "/gateway/bot";
7
- /**
8
- * 将自定义 gateway / token 地址注入 SDK Auth。
9
- * SDK 仅在 websocket 模式自动读取配置;middleware / webhook 需在此补丁。
10
- */
11
- export function applyCustomAuthEndpoints(endpoint, config, logger) {
12
- const { accessTokenUrl, gatewayUrl, mode } = config;
13
- if (!accessTokenUrl && !gatewayUrl)
14
- return;
15
- if (mode !== ReceiverMode.WEBSOCKET) {
16
- const session = endpoint.sessionManager;
17
- if (accessTokenUrl)
18
- session.authManager.config.accessTokenUrl = accessTokenUrl;
19
- if (gatewayUrl)
20
- session.authManager.config.gatewayUrl = gatewayUrl;
21
- }
22
- logger.debug(formatCompact({
23
- op: "qq_gateway",
24
- mode,
25
- accessTokenUrl: accessTokenUrl ?? DEFAULT_ACCESS_TOKEN_URL,
26
- gatewayUrl: gatewayUrl ?? DEFAULT_GATEWAY_URL,
27
- note: mode === ReceiverMode.WEBSOCKET
28
- ? "websocket 入站使用 gatewayUrl"
29
- : "middleware/webhook 仅 accessTokenUrl 生效",
30
- }));
31
- }
32
- //# sourceMappingURL=gateway-config.js.map