@zhin.js/adapter-icqq 4.0.0 → 5.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.
- package/CHANGELOG.md +26 -0
- package/README.md +30 -30
- package/client/ICQQManagement.tsx +15 -15
- package/client/LoginAssistPanel.tsx +2 -2
- package/dist/index.js +1 -2
- package/lib/adapter.d.ts +14 -13
- package/lib/adapter.d.ts.map +1 -1
- package/lib/adapter.js +31 -30
- package/lib/adapter.js.map +1 -1
- package/lib/{bot.d.ts → endpoint.d.ts} +9 -9
- package/lib/endpoint.d.ts.map +1 -0
- package/lib/{bot.js → endpoint.js} +30 -41
- package/lib/endpoint.js.map +1 -0
- package/lib/icqq-side-events.d.ts +2 -2
- package/lib/icqq-side-events.d.ts.map +1 -1
- package/lib/icqq-side-events.js +4 -4
- package/lib/icqq-side-events.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/ipc-client.js +2 -2
- package/lib/ipc-client.js.map +1 -1
- package/lib/outbound-media.d.ts +2 -2
- package/lib/outbound-media.d.ts.map +1 -1
- package/lib/outbound-media.js.map +1 -1
- package/lib/routes.js +14 -14
- package/lib/routes.js.map +1 -1
- package/lib/tools/index.d.ts.map +1 -1
- package/lib/tools/index.js +80 -75
- package/lib/tools/index.js.map +1 -1
- package/lib/types.d.ts +2 -2
- package/lib/types.d.ts.map +1 -1
- package/lib/typing-indicator-example.d.ts +10 -10
- package/lib/typing-indicator-example.d.ts.map +1 -1
- package/lib/typing-indicator-example.js +24 -24
- package/lib/typing-indicator-example.js.map +1 -1
- package/lib/typing-indicator.d.ts +10 -10
- package/lib/typing-indicator.d.ts.map +1 -1
- package/lib/typing-indicator.js +37 -37
- package/lib/typing-indicator.js.map +1 -1
- package/package.json +15 -11
- package/skills/icqq/PERMITS.md +22 -0
- package/src/adapter.ts +33 -31
- package/src/{bot.ts → endpoint.ts} +30 -40
- package/src/icqq-side-events.ts +4 -4
- package/src/index.ts +1 -1
- package/src/ipc-client.ts +2 -2
- package/src/outbound-media.ts +2 -2
- package/src/routes.ts +14 -14
- package/src/tools/index.ts +68 -63
- package/src/types.ts +2 -2
- package/src/typing-indicator-example.ts +25 -25
- package/src/typing-indicator.ts +40 -40
- package/lib/bot.d.ts.map +0 -1
- package/lib/bot.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typing-indicator-example.js","sourceRoot":"","sources":["../src/typing-indicator-example.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAEL,qBAAqB,GAGtB,MAAM,uBAAuB,CAAC;AAE/B,+DAA+D;AAE/D;;GAEG;AACH,MAAM,UAAU,+BAA+B,CAAC,OAAoB;IAClE,
|
|
1
|
+
{"version":3,"file":"typing-indicator-example.js","sourceRoot":"","sources":["../src/typing-indicator-example.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* 为 ICQQ 适配器提供消息处理状态提示功能,
|
|
5
5
|
* 使用消息回应(表情)来提示用户"AI 正在处理"。
|
|
6
6
|
*/
|
|
7
|
-
import type {
|
|
7
|
+
import type { IcqqEndpoint } from './endpoint.js';
|
|
8
8
|
import { type TypingIndicatorConfig, type TypingIndicator } from '@zhin.js/agent';
|
|
9
9
|
export interface ICQQTypingIndicatorConfig {
|
|
10
10
|
/** 是否启用 */
|
|
@@ -23,8 +23,8 @@ export interface ICQQTypingIndicatorConfig {
|
|
|
23
23
|
export declare class ICQQTypingIndicatorManager {
|
|
24
24
|
private manager;
|
|
25
25
|
private config;
|
|
26
|
-
private
|
|
27
|
-
constructor(
|
|
26
|
+
private endpoint;
|
|
27
|
+
constructor(endpoint: IcqqEndpoint, config?: Partial<ICQQTypingIndicatorConfig>);
|
|
28
28
|
/**
|
|
29
29
|
* 注册 ICQQ 适配器
|
|
30
30
|
*/
|
|
@@ -61,27 +61,27 @@ export declare class ICQQTypingIndicatorManager {
|
|
|
61
61
|
getConfig(): ICQQTypingIndicatorConfig;
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
|
-
* 为 ICQQ
|
|
64
|
+
* 为 ICQQ Endpoint 创建 Typing Indicator 管理器
|
|
65
65
|
*/
|
|
66
|
-
export declare function createICQQTypingIndicatorManager(
|
|
66
|
+
export declare function createICQQTypingIndicatorManager(endpoint: IcqqEndpoint, config?: Partial<ICQQTypingIndicatorConfig>): ICQQTypingIndicatorManager;
|
|
67
67
|
/**
|
|
68
68
|
* 快速开始提示
|
|
69
69
|
*/
|
|
70
|
-
export declare function startICQQTypingIndicator(
|
|
70
|
+
export declare function startICQQTypingIndicator(endpoint: IcqqEndpoint, options: {
|
|
71
71
|
messageId?: string;
|
|
72
72
|
sessionId: string;
|
|
73
73
|
userId?: string;
|
|
74
74
|
groupId?: string;
|
|
75
75
|
sceneType: 'private' | 'group';
|
|
76
76
|
}, config?: Partial<ICQQTypingIndicatorConfig>): Promise<TypingIndicator>;
|
|
77
|
-
declare module './
|
|
78
|
-
interface
|
|
77
|
+
declare module './endpoint.js' {
|
|
78
|
+
interface IcqqEndpoint {
|
|
79
79
|
/** Typing Indicator 管理器 */
|
|
80
80
|
$typingIndicator?: ICQQTypingIndicatorManager;
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
/**
|
|
84
|
-
* 为
|
|
84
|
+
* 为 IcqqEndpoint 添加 Typing Indicator 支持
|
|
85
85
|
*/
|
|
86
|
-
export declare function enableTypingIndicator(
|
|
86
|
+
export declare function enableTypingIndicator(endpoint: IcqqEndpoint, config?: Partial<ICQQTypingIndicatorConfig>): ICQQTypingIndicatorManager;
|
|
87
87
|
//# sourceMappingURL=typing-indicator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typing-indicator.d.ts","sourceRoot":"","sources":["../src/typing-indicator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"typing-indicator.d.ts","sourceRoot":"","sources":["../src/typing-indicator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAIL,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AAIxB,MAAM,WAAW,yBAAyB;IACxC,WAAW;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,aAAa,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC/C,WAAW;IACX,WAAW,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC9C;AAuBD,qBAAa,0BAA0B;IACrC,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,QAAQ,CAAe;gBAEnB,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAE,OAAO,CAAC,yBAAyB,CAAM;IAgBnF;;OAEG;IACH,OAAO,CAAC,eAAe;IAuEvB;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC;KAChC,GAAG,OAAO,CAAC,eAAe,CAAC;IAoD5B;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBjB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,IAAI;IAI9D;;OAEG;IACH,SAAS,IAAI,yBAAyB;CAGvC;AAID;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,YAAY,EACtB,MAAM,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAC1C,0BAA0B,CAE5B;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE;IACP,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC;CAChC,EACD,MAAM,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAC1C,OAAO,CAAC,eAAe,CAAC,CAG1B;AAID,OAAO,QAAQ,eAAe,CAAC;IAC7B,UAAU,YAAY;QACpB,2BAA2B;QAC3B,gBAAgB,CAAC,EAAE,0BAA0B,CAAC;KAC/C;CACF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,EACtB,MAAM,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAC1C,0BAA0B,CAK5B"}
|
package/lib/typing-indicator.js
CHANGED
|
@@ -27,9 +27,9 @@ const DEFAULT_ICQQ_CONFIG = {
|
|
|
27
27
|
export class ICQQTypingIndicatorManager {
|
|
28
28
|
manager;
|
|
29
29
|
config;
|
|
30
|
-
|
|
31
|
-
constructor(
|
|
32
|
-
this.
|
|
30
|
+
endpoint;
|
|
31
|
+
constructor(endpoint, config = {}) {
|
|
32
|
+
this.endpoint = endpoint;
|
|
33
33
|
this.config = { ...DEFAULT_ICQQ_CONFIG, ...config };
|
|
34
34
|
// 创建 Typing Indicator 管理器
|
|
35
35
|
this.manager = new TypingIndicatorManager({
|
|
@@ -48,16 +48,16 @@ export class ICQQTypingIndicatorManager {
|
|
|
48
48
|
const adapter = new ReactionTypingIndicatorAdapter('icqq',
|
|
49
49
|
// addReaction
|
|
50
50
|
async (messageId, emoji, _options) => {
|
|
51
|
-
return await this.
|
|
51
|
+
return await this.endpoint.$addReaction(messageId, emoji);
|
|
52
52
|
},
|
|
53
53
|
// removeReaction
|
|
54
54
|
async (messageId, reactionId) => {
|
|
55
|
-
await this.
|
|
55
|
+
await this.endpoint.$removeReaction(messageId, reactionId);
|
|
56
56
|
},
|
|
57
57
|
// sendMessage
|
|
58
58
|
async (options, content) => {
|
|
59
59
|
try {
|
|
60
|
-
this.
|
|
60
|
+
this.endpoint.logger.debug('[ICQQ:TypingIndicator] sendMessage called', {
|
|
61
61
|
sessionId: options.sessionId,
|
|
62
62
|
content,
|
|
63
63
|
sceneType: options.sceneType,
|
|
@@ -66,30 +66,30 @@ export class ICQQTypingIndicatorManager {
|
|
|
66
66
|
});
|
|
67
67
|
// 根据场景类型发送消息
|
|
68
68
|
if (options.sceneType === 'group' && options.groupId) {
|
|
69
|
-
this.
|
|
69
|
+
this.endpoint.logger.debug('[ICQQ:TypingIndicator] sending group message', {
|
|
70
70
|
groupId: options.groupId,
|
|
71
71
|
});
|
|
72
|
-
return await this.
|
|
72
|
+
return await this.endpoint.$sendMessage({
|
|
73
73
|
type: 'group',
|
|
74
74
|
id: options.groupId,
|
|
75
75
|
context: 'icqq',
|
|
76
|
-
|
|
76
|
+
endpoint: this.endpoint.$id,
|
|
77
77
|
content: [{ type: 'text', data: { text: content } }],
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
80
|
else if (options.userId) {
|
|
81
|
-
this.
|
|
81
|
+
this.endpoint.logger.debug('[ICQQ:TypingIndicator] sending private message', {
|
|
82
82
|
userId: options.userId,
|
|
83
83
|
});
|
|
84
|
-
return await this.
|
|
84
|
+
return await this.endpoint.$sendMessage({
|
|
85
85
|
type: 'private',
|
|
86
86
|
id: options.userId,
|
|
87
87
|
context: 'icqq',
|
|
88
|
-
|
|
88
|
+
endpoint: this.endpoint.$id,
|
|
89
89
|
content: [{ type: 'text', data: { text: content } }],
|
|
90
90
|
});
|
|
91
91
|
}
|
|
92
|
-
this.
|
|
92
|
+
this.endpoint.logger.debug('[ICQQ:TypingIndicator] no valid target', {
|
|
93
93
|
sceneType: options.sceneType,
|
|
94
94
|
groupId: options.groupId,
|
|
95
95
|
userId: options.userId,
|
|
@@ -97,17 +97,17 @@ export class ICQQTypingIndicatorManager {
|
|
|
97
97
|
return null;
|
|
98
98
|
}
|
|
99
99
|
catch (error) {
|
|
100
|
-
this.
|
|
100
|
+
this.endpoint.logger.error('[ICQQ:TypingIndicator] Failed to send typing message:', error);
|
|
101
101
|
return null;
|
|
102
102
|
}
|
|
103
103
|
},
|
|
104
104
|
// deleteMessage
|
|
105
105
|
async (messageId) => {
|
|
106
106
|
try {
|
|
107
|
-
await this.
|
|
107
|
+
await this.endpoint.$recallMessage(messageId);
|
|
108
108
|
}
|
|
109
109
|
catch (error) {
|
|
110
|
-
this.
|
|
110
|
+
this.endpoint.logger.error('[ICQQ:TypingIndicator] Failed to delete typing message:', error);
|
|
111
111
|
}
|
|
112
112
|
});
|
|
113
113
|
this.manager.registerAdapter(adapter);
|
|
@@ -116,7 +116,7 @@ export class ICQQTypingIndicatorManager {
|
|
|
116
116
|
* 开始提示
|
|
117
117
|
*/
|
|
118
118
|
async start(options) {
|
|
119
|
-
this.
|
|
119
|
+
this.endpoint.logger.debug('[ICQQ:TypingIndicator] start called', {
|
|
120
120
|
enabled: this.config.enabled,
|
|
121
121
|
sceneType: options.sceneType,
|
|
122
122
|
messageId: options.messageId,
|
|
@@ -125,7 +125,7 @@ export class ICQQTypingIndicatorManager {
|
|
|
125
125
|
groupId: options.groupId,
|
|
126
126
|
});
|
|
127
127
|
if (!this.config.enabled) {
|
|
128
|
-
this.
|
|
128
|
+
this.endpoint.logger.debug('[ICQQ:TypingIndicator] disabled, returning noop');
|
|
129
129
|
return {
|
|
130
130
|
start: async () => { },
|
|
131
131
|
stop: async () => { },
|
|
@@ -136,7 +136,7 @@ export class ICQQTypingIndicatorManager {
|
|
|
136
136
|
const config = options.sceneType === 'group'
|
|
137
137
|
? this.config.groupConfig
|
|
138
138
|
: this.config.privateConfig;
|
|
139
|
-
this.
|
|
139
|
+
this.endpoint.logger.debug('[ICQQ:TypingIndicator] using config', {
|
|
140
140
|
sceneType: options.sceneType,
|
|
141
141
|
configType: config?.type,
|
|
142
142
|
configEmoji: config?.emoji,
|
|
@@ -148,12 +148,12 @@ export class ICQQTypingIndicatorManager {
|
|
|
148
148
|
userId: options.userId,
|
|
149
149
|
groupId: options.groupId,
|
|
150
150
|
platform: 'icqq',
|
|
151
|
-
|
|
151
|
+
endpointId: this.endpoint.$id,
|
|
152
152
|
sceneType: options.sceneType,
|
|
153
153
|
};
|
|
154
|
-
this.
|
|
154
|
+
this.endpoint.logger.debug('[ICQQ:TypingIndicator] starting manager', typingOptions);
|
|
155
155
|
const result = await this.manager.start(typingOptions, config);
|
|
156
|
-
this.
|
|
156
|
+
this.endpoint.logger.debug('[ICQQ:TypingIndicator] started', {
|
|
157
157
|
isActive: result.isActive(),
|
|
158
158
|
});
|
|
159
159
|
return result;
|
|
@@ -162,7 +162,7 @@ export class ICQQTypingIndicatorManager {
|
|
|
162
162
|
* 停止提示
|
|
163
163
|
*/
|
|
164
164
|
async stop(options) {
|
|
165
|
-
this.
|
|
165
|
+
this.endpoint.logger.debug('[ICQQ:TypingIndicator] stop called', {
|
|
166
166
|
sessionId: options.sessionId,
|
|
167
167
|
userId: options.userId,
|
|
168
168
|
groupId: options.groupId,
|
|
@@ -172,19 +172,19 @@ export class ICQQTypingIndicatorManager {
|
|
|
172
172
|
userId: options.userId,
|
|
173
173
|
groupId: options.groupId,
|
|
174
174
|
platform: 'icqq',
|
|
175
|
-
|
|
175
|
+
endpointId: this.endpoint.$id,
|
|
176
176
|
sceneType: 'private', // 默认值,实际会根据 sessionId 判断
|
|
177
177
|
};
|
|
178
178
|
await this.manager.stop(typingOptions);
|
|
179
|
-
this.
|
|
179
|
+
this.endpoint.logger.debug('[ICQQ:TypingIndicator] stopped');
|
|
180
180
|
}
|
|
181
181
|
/**
|
|
182
182
|
* 停止所有提示
|
|
183
183
|
*/
|
|
184
184
|
async stopAll() {
|
|
185
|
-
this.
|
|
185
|
+
this.endpoint.logger.debug('[ICQQ:TypingIndicator] stopAll called');
|
|
186
186
|
await this.manager.stopAll();
|
|
187
|
-
this.
|
|
187
|
+
this.endpoint.logger.debug('[ICQQ:TypingIndicator] stopAll completed');
|
|
188
188
|
}
|
|
189
189
|
/**
|
|
190
190
|
* 更新配置
|
|
@@ -201,25 +201,25 @@ export class ICQQTypingIndicatorManager {
|
|
|
201
201
|
}
|
|
202
202
|
// ── 便捷函数 ──────────────────────────────────────────────────────────
|
|
203
203
|
/**
|
|
204
|
-
* 为 ICQQ
|
|
204
|
+
* 为 ICQQ Endpoint 创建 Typing Indicator 管理器
|
|
205
205
|
*/
|
|
206
|
-
export function createICQQTypingIndicatorManager(
|
|
207
|
-
return new ICQQTypingIndicatorManager(
|
|
206
|
+
export function createICQQTypingIndicatorManager(endpoint, config) {
|
|
207
|
+
return new ICQQTypingIndicatorManager(endpoint, config);
|
|
208
208
|
}
|
|
209
209
|
/**
|
|
210
210
|
* 快速开始提示
|
|
211
211
|
*/
|
|
212
|
-
export async function startICQQTypingIndicator(
|
|
213
|
-
const manager = createICQQTypingIndicatorManager(
|
|
212
|
+
export async function startICQQTypingIndicator(endpoint, options, config) {
|
|
213
|
+
const manager = createICQQTypingIndicatorManager(endpoint, config);
|
|
214
214
|
return await manager.start(options);
|
|
215
215
|
}
|
|
216
216
|
/**
|
|
217
|
-
* 为
|
|
217
|
+
* 为 IcqqEndpoint 添加 Typing Indicator 支持
|
|
218
218
|
*/
|
|
219
|
-
export function enableTypingIndicator(
|
|
220
|
-
if (!
|
|
221
|
-
|
|
219
|
+
export function enableTypingIndicator(endpoint, config) {
|
|
220
|
+
if (!endpoint.$typingIndicator) {
|
|
221
|
+
endpoint.$typingIndicator = createICQQTypingIndicatorManager(endpoint, config);
|
|
222
222
|
}
|
|
223
|
-
return
|
|
223
|
+
return endpoint.$typingIndicator;
|
|
224
224
|
}
|
|
225
225
|
//# sourceMappingURL=typing-indicator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typing-indicator.js","sourceRoot":"","sources":["../src/typing-indicator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,sBAAsB,EACtB,8BAA8B,GAI/B,MAAM,gBAAgB,CAAC;AAmBxB,MAAM,mBAAmB,GAA8B;IACrD,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,GAAG;IACjB,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,IAAI;IACjB,aAAa,EAAE;QACb,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;KAClB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,GAAG;QACV,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;KAClB;CACF,CAAC;AAEF,qEAAqE;AAErE,MAAM,OAAO,0BAA0B;IAC7B,OAAO,CAAyB;IAChC,MAAM,CAA4B;IAClC,
|
|
1
|
+
{"version":3,"file":"typing-indicator.js","sourceRoot":"","sources":["../src/typing-indicator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/adapter-icqq",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"description": "Zhin.js adapter for ICQQ (QQ Bot)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -49,21 +49,25 @@
|
|
|
49
49
|
"@types/react": "^19.2.15",
|
|
50
50
|
"@types/react-dom": "^19.2.3",
|
|
51
51
|
"lucide-react": "^1.17.0",
|
|
52
|
-
"radix-ui": "^1.
|
|
52
|
+
"radix-ui": "^1.5.0",
|
|
53
53
|
"typescript": "^6.0.3",
|
|
54
|
-
"@zhin.js/
|
|
54
|
+
"@zhin.js/agent": "0.3.0",
|
|
55
|
+
"@zhin.js/cli": "1.0.89",
|
|
56
|
+
"@zhin.js/client": "2.0.3",
|
|
55
57
|
"@zhin.js/contract": "1.0.1",
|
|
56
|
-
"@zhin.js/
|
|
57
|
-
"zhin.js": "2.0.0"
|
|
58
|
+
"@zhin.js/core": "1.3.0",
|
|
59
|
+
"@zhin.js/host-api": "2.0.0",
|
|
60
|
+
"@zhin.js/host-router": "2.0.0",
|
|
61
|
+
"zhin.js": "3.0.0"
|
|
58
62
|
},
|
|
59
63
|
"peerDependencies": {
|
|
60
|
-
"@zhin.js/agent": "0.
|
|
61
|
-
"@zhin.js/
|
|
62
|
-
"@zhin.js/
|
|
64
|
+
"@zhin.js/agent": "0.3.0",
|
|
65
|
+
"@zhin.js/client": "2.0.3",
|
|
66
|
+
"@zhin.js/host-api": "2.0.0",
|
|
63
67
|
"@zhin.js/contract": "1.0.1",
|
|
64
|
-
"@zhin.js/core": "1.
|
|
65
|
-
"@zhin.js/host-router": "
|
|
66
|
-
"zhin.js": "
|
|
68
|
+
"@zhin.js/core": "1.3.0",
|
|
69
|
+
"@zhin.js/host-router": "2.0.0",
|
|
70
|
+
"zhin.js": "3.0.0"
|
|
67
71
|
},
|
|
68
72
|
"peerDependenciesMeta": {
|
|
69
73
|
"@zhin.js/agent": {
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# ICQQ Platform Permits(QQ 群)
|
|
2
|
+
|
|
3
|
+
## 入站字段
|
|
4
|
+
|
|
5
|
+
群成员 `owner` / `admin` / `member` 写入 `$sender.role`(IPC 侧已有)。
|
|
6
|
+
|
|
7
|
+
## Permit 词汇表
|
|
8
|
+
|
|
9
|
+
| `platform(icqq,…)` | 含义 |
|
|
10
|
+
|--------------------|------|
|
|
11
|
+
| `group_owner` | 群主 |
|
|
12
|
+
| `group_admin` | 群管理员(含群主) |
|
|
13
|
+
|
|
14
|
+
## 扩展工具示例
|
|
15
|
+
|
|
16
|
+
| 工具 | permit |
|
|
17
|
+
|------|--------|
|
|
18
|
+
| `icqq_set_title` | `group_owner` |
|
|
19
|
+
| `icqq_announce` / `icqq_essence` / `icqq_list_muted` | `group_admin` |
|
|
20
|
+
| `icqq_set_anonymous` | `group_owner` |
|
|
21
|
+
|
|
22
|
+
工厂群管工具使用默认 `group_admin` / `group_owner`。
|
package/src/adapter.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ICQQ 适配器 — 通过 @icqqjs/cli 守护进程 IPC 管理
|
|
2
|
+
* ICQQ 适配器 — 通过 @icqqjs/cli 守护进程 IPC 管理 Endpoint 实例
|
|
3
3
|
*/
|
|
4
4
|
import { formatCompact, Adapter, Plugin } from 'zhin.js';
|
|
5
|
-
import {
|
|
6
|
-
import type {
|
|
5
|
+
import { IcqqEndpoint } from "./endpoint.js";
|
|
6
|
+
import type { IcqqEndpointConfig, IpcMemberInfo } from "./types.js";
|
|
7
7
|
import { Actions } from "./protocol.js";
|
|
8
8
|
|
|
9
|
-
export class IcqqAdapter extends Adapter<
|
|
9
|
+
export class IcqqAdapter extends Adapter<IcqqEndpoint> {
|
|
10
|
+
static override readonly capabilities = ['inbound', 'outbound'] as const;
|
|
11
|
+
|
|
10
12
|
constructor(plugin: Plugin) {
|
|
11
13
|
super(plugin, "icqq", []);
|
|
12
14
|
}
|
|
@@ -21,8 +23,8 @@ export class IcqqAdapter extends Adapter<IcqqBot> {
|
|
|
21
23
|
};
|
|
22
24
|
}
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
return new
|
|
26
|
+
createEndpoint(config: IcqqEndpointConfig): IcqqEndpoint {
|
|
27
|
+
return new IcqqEndpoint(this, config);
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
async start(): Promise<void> {
|
|
@@ -36,15 +38,15 @@ export class IcqqAdapter extends Adapter<IcqqBot> {
|
|
|
36
38
|
|
|
37
39
|
// ── IGroupManagement 标准群管方法(通过 IPC) ─────────────────────
|
|
38
40
|
|
|
39
|
-
private
|
|
40
|
-
const
|
|
41
|
-
if (!
|
|
42
|
-
return
|
|
41
|
+
private getEndpoint(endpointId: string): IcqqEndpoint {
|
|
42
|
+
const endpoint = this.endpoints.get(endpointId);
|
|
43
|
+
if (!endpoint) throw new Error(`Endpoint ${endpointId} 不存在`);
|
|
44
|
+
return endpoint;
|
|
43
45
|
}
|
|
44
46
|
|
|
45
|
-
async kickMember(
|
|
46
|
-
const
|
|
47
|
-
const resp = await
|
|
47
|
+
async kickMember(endpointId: string, sceneId: string, userId: string) {
|
|
48
|
+
const endpoint = this.getEndpoint(endpointId);
|
|
49
|
+
const resp = await endpoint.ipc.request(Actions.GROUP_KICK, {
|
|
48
50
|
group_id: Number(sceneId),
|
|
49
51
|
user_id: Number(userId),
|
|
50
52
|
reject_add_request: false,
|
|
@@ -54,13 +56,13 @@ export class IcqqAdapter extends Adapter<IcqqBot> {
|
|
|
54
56
|
}
|
|
55
57
|
|
|
56
58
|
async muteMember(
|
|
57
|
-
|
|
59
|
+
endpointId: string,
|
|
58
60
|
sceneId: string,
|
|
59
61
|
userId: string,
|
|
60
62
|
duration = 600,
|
|
61
63
|
) {
|
|
62
|
-
const
|
|
63
|
-
const resp = await
|
|
64
|
+
const endpoint = this.getEndpoint(endpointId);
|
|
65
|
+
const resp = await endpoint.ipc.request(Actions.GROUP_MUTE, {
|
|
64
66
|
group_id: Number(sceneId),
|
|
65
67
|
user_id: Number(userId),
|
|
66
68
|
duration,
|
|
@@ -69,9 +71,9 @@ export class IcqqAdapter extends Adapter<IcqqBot> {
|
|
|
69
71
|
return true;
|
|
70
72
|
}
|
|
71
73
|
|
|
72
|
-
async muteAll(
|
|
73
|
-
const
|
|
74
|
-
const resp = await
|
|
74
|
+
async muteAll(endpointId: string, sceneId: string, enable = true) {
|
|
75
|
+
const endpoint = this.getEndpoint(endpointId);
|
|
76
|
+
const resp = await endpoint.ipc.request(Actions.GROUP_MUTE_ALL, {
|
|
75
77
|
group_id: Number(sceneId),
|
|
76
78
|
enable,
|
|
77
79
|
});
|
|
@@ -80,13 +82,13 @@ export class IcqqAdapter extends Adapter<IcqqBot> {
|
|
|
80
82
|
}
|
|
81
83
|
|
|
82
84
|
async setAdmin(
|
|
83
|
-
|
|
85
|
+
endpointId: string,
|
|
84
86
|
sceneId: string,
|
|
85
87
|
userId: string,
|
|
86
88
|
enable = true,
|
|
87
89
|
) {
|
|
88
|
-
const
|
|
89
|
-
const resp = await
|
|
90
|
+
const endpoint = this.getEndpoint(endpointId);
|
|
91
|
+
const resp = await endpoint.ipc.request(Actions.SET_GROUP_ADMIN, {
|
|
90
92
|
group_id: Number(sceneId),
|
|
91
93
|
user_id: Number(userId),
|
|
92
94
|
enable,
|
|
@@ -96,13 +98,13 @@ export class IcqqAdapter extends Adapter<IcqqBot> {
|
|
|
96
98
|
}
|
|
97
99
|
|
|
98
100
|
async setMemberNickname(
|
|
99
|
-
|
|
101
|
+
endpointId: string,
|
|
100
102
|
sceneId: string,
|
|
101
103
|
userId: string,
|
|
102
104
|
nickname: string,
|
|
103
105
|
) {
|
|
104
|
-
const
|
|
105
|
-
const resp = await
|
|
106
|
+
const endpoint = this.getEndpoint(endpointId);
|
|
107
|
+
const resp = await endpoint.ipc.request(Actions.SET_GROUP_CARD, {
|
|
106
108
|
group_id: Number(sceneId),
|
|
107
109
|
user_id: Number(userId),
|
|
108
110
|
card: nickname,
|
|
@@ -111,9 +113,9 @@ export class IcqqAdapter extends Adapter<IcqqBot> {
|
|
|
111
113
|
return true;
|
|
112
114
|
}
|
|
113
115
|
|
|
114
|
-
async setGroupName(
|
|
115
|
-
const
|
|
116
|
-
const resp = await
|
|
116
|
+
async setGroupName(endpointId: string, sceneId: string, name: string) {
|
|
117
|
+
const endpoint = this.getEndpoint(endpointId);
|
|
118
|
+
const resp = await endpoint.ipc.request(Actions.SET_GROUP_NAME, {
|
|
117
119
|
group_id: Number(sceneId),
|
|
118
120
|
name,
|
|
119
121
|
});
|
|
@@ -121,9 +123,9 @@ export class IcqqAdapter extends Adapter<IcqqBot> {
|
|
|
121
123
|
return true;
|
|
122
124
|
}
|
|
123
125
|
|
|
124
|
-
async listMembers(
|
|
125
|
-
const
|
|
126
|
-
const resp = await
|
|
126
|
+
async listMembers(endpointId: string, sceneId: string) {
|
|
127
|
+
const endpoint = this.getEndpoint(endpointId);
|
|
128
|
+
const resp = await endpoint.ipc.request(Actions.LIST_GROUP_MEMBERS, {
|
|
127
129
|
group_id: Number(sceneId),
|
|
128
130
|
});
|
|
129
131
|
if (!resp.ok) throw new Error(resp.error ?? "获取成员列表失败");
|