@zhin.js/adapter-icqq 1.0.0 → 1.0.1

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.
@@ -0,0 +1,12 @@
1
+ import { addPage } from '@zhin.js/client'
2
+
3
+ // 注册ICQQ适配器管理页面
4
+ addPage({
5
+ parentName: 'Zhin',
6
+ path: '/contexts/icqq',
7
+ name: 'ICQQ管理',
8
+ icon: 'pi pi-comment',
9
+ component: () => import('./ICQQManagement.vue')
10
+ })
11
+
12
+ // console.log 已替换为注释
package/lib/index.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ import { Config, Client, PrivateMessageEvent, GroupMessageEvent, Sendable } from "@icqqjs/icqq";
2
+ import { Bot, BotConfig, Adapter, Plugin, Message, SendOptions, MessageSegment, SendContent } from "zhin.js";
3
+ declare module 'zhin.js' {
4
+ interface RegisteredAdapters {
5
+ icqq: Adapter<IcqqBot>;
6
+ }
7
+ }
8
+ export interface IcqqBotConfig extends BotConfig, Config {
9
+ context: 'icqq';
10
+ name: `${number}`;
11
+ password?: string;
12
+ scope?: string;
13
+ }
14
+ export interface IcqqBot {
15
+ $config: IcqqBotConfig;
16
+ }
17
+ export declare class IcqqBot extends Client implements Bot<PrivateMessageEvent | GroupMessageEvent, IcqqBotConfig> {
18
+ private plugin;
19
+ $connected?: boolean;
20
+ constructor(plugin: Plugin, config: IcqqBotConfig);
21
+ private handleIcqqMessage;
22
+ $connect(): Promise<void>;
23
+ $disconnect(): Promise<void>;
24
+ $formatMessage(msg: PrivateMessageEvent | GroupMessageEvent): Message<PrivateMessageEvent | GroupMessageEvent>;
25
+ $sendMessage(options: SendOptions): Promise<void>;
26
+ }
27
+ export declare namespace IcqqBot {
28
+ function toSegments(message: Sendable): MessageSegment[];
29
+ function toSendable(content: SendContent): Sendable;
30
+ }
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,QAAQ,EAAc,MAAM,cAAc,CAAC;AAE5G,OAAO,EACH,GAAG,EACH,SAAS,EAET,OAAO,EACP,MAAM,EAEN,OAAO,EACP,WAAW,EACX,cAAc,EACd,WAAW,EAEd,MAAM,SAAS,CAAC;AACjB,OAAO,QAAQ,SAAS,CAAA;IACpB,UAAU,kBAAkB;QACxB,IAAI,EAAC,OAAO,CAAC,OAAO,CAAC,CAAA;KACxB;CACJ;AACD,MAAM,WAAW,aAAc,SAAQ,SAAS,EAAC,MAAM;IACnD,OAAO,EAAC,MAAM,CAAA;IACd,IAAI,EAAC,GAAG,MAAM,EAAE,CAAA;IAChB,QAAQ,CAAC,EAAC,MAAM,CAAA;IAChB,KAAK,CAAC,EAAC,MAAM,CAAA;CAChB;AACD,MAAM,WAAW,OAAO;IACpB,OAAO,EAAC,aAAa,CAAA;CACxB;AACD,qBAAa,OAAQ,SAAQ,MAAO,YAAW,GAAG,CAAC,mBAAmB,GAAC,iBAAiB,EAAC,aAAa,CAAC;IAEvF,OAAO,CAAC,MAAM;IAD1B,UAAU,CAAC,EAAC,OAAO,CAAA;gBACC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,aAAa;IAOtD,OAAO,CAAC,iBAAiB;IAMnB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BzB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC,cAAc,CAAC,GAAG,EAAC,mBAAmB,GAAC,iBAAiB;IA8BlD,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAkB1D;AACD,yBAAiB,OAAO,CAAA;IACpB,SAAgB,UAAU,CAAC,OAAO,EAAC,QAAQ,GAAE,cAAc,EAAE,CAS5D;IACD,SAAgB,UAAU,CAAC,OAAO,EAAC,WAAW,GAAE,QAAQ,CAOvD;CACJ"}
package/lib/index.js ADDED
@@ -0,0 +1,199 @@
1
+ import { Client } from "@icqqjs/icqq";
2
+ import path from "path";
3
+ import { useContext, Adapter, registerAdapter, Message, segment } from "zhin.js";
4
+ export class IcqqBot extends Client {
5
+ plugin;
6
+ $connected;
7
+ constructor(plugin, config) {
8
+ if (!config.scope)
9
+ config.scope = 'icqqjs';
10
+ if (!config.data_dir)
11
+ config.data_dir = path.join(process.cwd(), 'data');
12
+ if (config.scope.startsWith('@'))
13
+ config.scope = config.scope.slice(1);
14
+ super(config);
15
+ this.plugin = plugin;
16
+ this.$config = config;
17
+ }
18
+ handleIcqqMessage(msg) {
19
+ const message = this.$formatMessage(msg);
20
+ this.plugin.dispatch('message.receive', message);
21
+ this.plugin.logger.info(`recv ${message.$channel.type}(${message.$channel.id}):${segment.raw(message.$content)}`);
22
+ this.plugin.dispatch(`message.${message.$channel.type}.receive`, message);
23
+ }
24
+ async $connect() {
25
+ this.on('message', this.handleIcqqMessage.bind(this));
26
+ this.on('system.login.device', async (e) => {
27
+ await this.sendSmsCode();
28
+ this.plugin.logger.info('请输入短信验证码:');
29
+ process.stdin.once('data', (data) => {
30
+ this.submitSmsCode(data.toString().trim());
31
+ });
32
+ });
33
+ this.on('system.login.qrcode', (e) => {
34
+ this.plugin.logger.info(`取码地址:${e.image}\n请扫码完成后回车继续:`);
35
+ process.stdin.once('data', () => {
36
+ this.login();
37
+ });
38
+ });
39
+ this.on('system.login.slider', (e) => {
40
+ this.plugin.logger.info(`取码地址:${e.url}\n请输入滑块验证ticket:`);
41
+ process.stdin.once('data', (e) => {
42
+ this.submitSlider(e.toString().trim());
43
+ });
44
+ });
45
+ return new Promise((resolve) => {
46
+ this.once('system.online', () => {
47
+ this.$connected = true;
48
+ resolve();
49
+ });
50
+ this.login(Number(this.$config.name), this.$config.password);
51
+ });
52
+ }
53
+ async $disconnect() {
54
+ await this.logout();
55
+ this.$connected = false;
56
+ }
57
+ $formatMessage(msg) {
58
+ const result = Message.from(msg, {
59
+ $id: msg.message_id.toString(),
60
+ $adapter: 'icqq',
61
+ $bot: `${this.$config.name}`,
62
+ $sender: {
63
+ id: msg.sender.user_id.toString(),
64
+ name: msg.sender.nickname.toString(),
65
+ },
66
+ $channel: {
67
+ id: msg.message_type === 'group' ? msg.group_id.toString() : msg.from_id.toString(),
68
+ type: msg.message_type
69
+ },
70
+ $content: IcqqBot.toSegments(msg.message),
71
+ $raw: msg.raw_message,
72
+ $timestamp: msg.time,
73
+ $reply: async (content, quote) => {
74
+ if (!Array.isArray(content))
75
+ content = [content];
76
+ if (quote)
77
+ content.unshift({ type: 'reply', data: { id: typeof quote === "boolean" ? result.$id : quote } });
78
+ this.plugin.dispatch('message.send', {
79
+ ...result.$channel,
80
+ context: 'icqq',
81
+ bot: `${this.uin}`,
82
+ content
83
+ });
84
+ }
85
+ });
86
+ return result;
87
+ }
88
+ async $sendMessage(options) {
89
+ options = await this.plugin.app.handleBeforeSend(options);
90
+ switch (options.type) {
91
+ case 'private': {
92
+ const result = await this.sendPrivateMsg(Number(options.id), IcqqBot.toSendable(options.content));
93
+ this.plugin.logger.info(`send ${options.type}(${options.id}):${segment.raw(options.content)}`);
94
+ break;
95
+ }
96
+ case "group": {
97
+ const result = await this.sendGroupMsg(Number(options.id), IcqqBot.toSendable(options.content));
98
+ this.plugin.logger.info(`send ${options.type}(${options.id}):${segment.raw(options.content)}`);
99
+ break;
100
+ }
101
+ default:
102
+ throw new Error(`unsupported channel type ${options.type}`);
103
+ }
104
+ }
105
+ }
106
+ (function (IcqqBot) {
107
+ function toSegments(message) {
108
+ if (!Array.isArray(message))
109
+ message = [message];
110
+ return message.filter((item, index) => {
111
+ return typeof item === "string" || (item.type !== 'long_msg' || index !== 0);
112
+ }).map((item) => {
113
+ if (typeof item === "string")
114
+ return { type: 'text', data: { text: item } };
115
+ const { type, ...data } = item;
116
+ return { type, data };
117
+ });
118
+ }
119
+ IcqqBot.toSegments = toSegments;
120
+ function toSendable(content) {
121
+ if (!Array.isArray(content))
122
+ content = [content];
123
+ return content.map((segment) => {
124
+ if (typeof segment === "string")
125
+ return { type: 'text', text: segment };
126
+ const { type, data } = segment;
127
+ return { type, ...data };
128
+ });
129
+ }
130
+ IcqqBot.toSendable = toSendable;
131
+ })(IcqqBot || (IcqqBot = {}));
132
+ registerAdapter(new Adapter('icqq', IcqqBot));
133
+ useContext('web', (web) => {
134
+ // 注册ICQQ适配器的客户端入口文件
135
+ const clientEntryPath = path.resolve(import.meta.dirname, '../client/index.ts');
136
+ web.addEntry(clientEntryPath);
137
+ });
138
+ useContext('router', 'icqq', (router, icqq) => {
139
+ router.get('/api/icqq/bots', async (ctx) => {
140
+ try {
141
+ const bots = Array.from(icqq.bots.values());
142
+ if (bots.length === 0) {
143
+ ctx.body = {
144
+ success: true,
145
+ data: [],
146
+ message: '暂无ICQQ机器人实例'
147
+ };
148
+ return;
149
+ }
150
+ const result = bots.map(bot => {
151
+ try {
152
+ return {
153
+ name: bot.$config.name,
154
+ connected: bot.$connected || false,
155
+ groupCount: bot.gl?.size || 0,
156
+ friendCount: bot.fl?.size || 0,
157
+ receiveCount: bot.stat?.recv_msg_cnt || 0,
158
+ sendCount: bot.stat?.sent_msg_cnt || 0,
159
+ loginMode: bot.$config.password ? 'password' : 'qrcode',
160
+ status: bot.$connected ? 'online' : 'offline',
161
+ lastActivity: new Date().toISOString()
162
+ };
163
+ }
164
+ catch (botError) {
165
+ // 单个机器人数据获取失败时的处理
166
+ // 获取机器人数据失败,返回错误状态
167
+ return {
168
+ name: bot.$config.name,
169
+ connected: false,
170
+ groupCount: 0,
171
+ friendCount: 0,
172
+ receiveCount: 0,
173
+ sendCount: 0,
174
+ loginMode: 'unknown',
175
+ status: 'error',
176
+ error: '数据获取失败'
177
+ };
178
+ }
179
+ });
180
+ ctx.body = {
181
+ success: true,
182
+ data: result,
183
+ timestamp: new Date().toISOString()
184
+ };
185
+ }
186
+ catch (error) {
187
+ // ICQQ API调用失败
188
+ ctx.status = 500;
189
+ ctx.body = {
190
+ success: false,
191
+ error: 'ICQQ_API_ERROR',
192
+ message: '获取机器人数据失败',
193
+ details: process.env.NODE_ENV === 'development' ? error.message : undefined,
194
+ timestamp: new Date().toISOString()
195
+ };
196
+ }
197
+ });
198
+ });
199
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,28 +1,50 @@
1
1
  {
2
2
  "name": "@zhin.js/adapter-icqq",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "zhin adapter for icqq",
5
5
  "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
6
+ "main": "./lib/index.js",
7
+ "types": "./lib/index.d.ts",
8
+ "files": [
9
+ "lib",
10
+ "client",
11
+ "README.md"
12
+ ],
8
13
  "exports": {
9
14
  ".": {
10
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js"
15
+ "types": "./lib/index.d.ts",
16
+ "import": "./lib/index.js"
12
17
  }
13
18
  },
14
19
  "dependencies": {
15
- "@lc-cn/icqq": "latest"
20
+ "@icqqjs/icqq": "latest"
16
21
  },
17
22
  "devDependencies": {
18
23
  "typescript": "^5.3.0"
19
24
  },
20
25
  "peerDependencies": {
21
- "zhin.js": "1.0.0",
22
- "@zhin.js/types": "1.0.0"
26
+ "zhin.js": "1.0.1",
27
+ "@zhin.js/client": "1.0.0",
28
+ "@zhin.js/console": "1.0.0",
29
+ "@zhin.js/http": "1.0.1",
30
+ "@zhin.js/types": "1.0.1"
31
+ },
32
+ "peerDependenciesMeta": {
33
+ "@zhin.js/client": {
34
+ "optional": true
35
+ },
36
+ "@zhin.js/http": {
37
+ "optional": true
38
+ },
39
+ "@zhin.js/console": {
40
+ "optional": true
41
+ },
42
+ "@zhin.js/types": {
43
+ "optional": true
44
+ }
23
45
  },
24
46
  "scripts": {
25
47
  "build": "tsc",
26
- "clean": "rm -rf dist"
48
+ "clean": "rm -rf lib"
27
49
  }
28
50
  }
package/dist/index.d.ts DELETED
@@ -1,30 +0,0 @@
1
- import { Config, Client, Sendable } from "@lc-cn/icqq";
2
- import { Bot, BotConfig, Adapter, Plugin, SendOptions, MessageSegment, SendContent } from "zhin.js";
3
- declare module '@zhin.js/types' {
4
- interface GlobalContext {
5
- icqq: Adapter<IcqqBot>;
6
- }
7
- }
8
- export interface IcqqBotConfig extends BotConfig, Config {
9
- context: 'icqq';
10
- name: `${number}`;
11
- password?: string;
12
- scope?: string;
13
- }
14
- export interface IcqqBot {
15
- readonly config: Required<IcqqBotConfig>;
16
- }
17
- export declare class IcqqBot extends Client implements Bot<Required<IcqqBotConfig>> {
18
- private plugin;
19
- connected?: boolean;
20
- constructor(plugin: Plugin, config: IcqqBotConfig);
21
- private handleIcqqMessage;
22
- connect(): Promise<void>;
23
- disconnect(): Promise<void>;
24
- sendMessage(options: SendOptions): Promise<void>;
25
- }
26
- export declare namespace IcqqBot {
27
- function toSegments(message: Sendable): MessageSegment[];
28
- function toSendable(content: SendContent): Sendable;
29
- }
30
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAA0C,QAAQ,EAAc,MAAM,aAAa,CAAC;AAE3G,OAAO,EAAC,GAAG,EAAC,SAAS,EAAC,OAAO,EAAC,MAAM,EAA2B,WAAW,EAAE,cAAc,EAAE,WAAW,EAAC,MAAM,SAAS,CAAC;AACxH,OAAO,QAAQ,gBAAgB,CAAA;IAC3B,UAAU,aAAa;QACnB,IAAI,EAAC,OAAO,CAAC,OAAO,CAAC,CAAA;KACxB;CACJ;AACD,MAAM,WAAW,aAAc,SAAQ,SAAS,EAAC,MAAM;IACnD,OAAO,EAAC,MAAM,CAAA;IACd,IAAI,EAAC,GAAG,MAAM,EAAE,CAAA;IAChB,QAAQ,CAAC,EAAC,MAAM,CAAA;IAChB,KAAK,CAAC,EAAC,MAAM,CAAA;CAChB;AACD,MAAM,WAAW,OAAO;IACpB,QAAQ,CAAC,MAAM,EAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;CAC1C;AACD,qBAAa,OAAQ,SAAQ,MAAO,YAAW,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAE3D,OAAO,CAAC,MAAM;IAD1B,SAAS,CAAC,EAAC,OAAO,CAAA;gBACE,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,aAAa;IAMtD,OAAO,CAAC,iBAAiB;IA+BnB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBzD;AACD,yBAAiB,OAAO,CAAA;IACpB,SAAgB,UAAU,CAAC,OAAO,EAAC,QAAQ,GAAE,cAAc,EAAE,CAO5D;IACD,SAAgB,UAAU,CAAC,OAAO,EAAC,WAAW,GAAE,QAAQ,CAQvD;CACJ"}
package/dist/index.js DELETED
@@ -1,124 +0,0 @@
1
- import { Client } from "@lc-cn/icqq";
2
- import path from "path";
3
- import { Adapter, registerAdapter } from "zhin.js";
4
- export class IcqqBot extends Client {
5
- plugin;
6
- connected;
7
- constructor(plugin, config) {
8
- if (!config.scope)
9
- config.scope = 'lc-cn';
10
- if (!config.data_dir)
11
- config.data_dir = path.join(process.cwd(), 'data');
12
- if (config.scope.startsWith('@'))
13
- config.scope = config.scope.slice(1);
14
- super(config);
15
- this.plugin = plugin;
16
- }
17
- handleIcqqMessage(msg) {
18
- const message = {
19
- id: msg.message_id.toString(),
20
- adapter: 'icqq',
21
- bot: `${this.config.name}`,
22
- sender: {
23
- id: msg.sender.user_id.toString(),
24
- name: msg.sender.nickname.toString(),
25
- },
26
- channel: {
27
- id: msg.message_type === 'group' ? msg.group_id.toString() : msg.from_id.toString(),
28
- type: msg.message_type
29
- },
30
- content: IcqqBot.toSegments(msg.message),
31
- raw: msg.raw_message,
32
- timestamp: msg.time,
33
- reply: async (content, quote) => {
34
- if (!Array.isArray(content))
35
- content = [content];
36
- if (quote)
37
- content.unshift({ type: 'reply', data: { id: typeof quote === "boolean" ? message.id : quote } });
38
- this.plugin.dispatch('message.send', {
39
- ...message.channel,
40
- context: 'icqq',
41
- bot: `${this.uin}`,
42
- content
43
- });
44
- }
45
- };
46
- this.plugin.dispatch('message.receive', message);
47
- this.plugin.logger.info(`recv ${message.channel.type}(${message.channel.id}):${msg.raw_message}`);
48
- this.plugin.dispatch(`message.${message.channel.type}.receive`, message);
49
- }
50
- async connect() {
51
- this.on('message', this.handleIcqqMessage.bind(this));
52
- this.on('system.login.device', (e) => {
53
- this.sendSmsCode();
54
- process.stdin.once('data', (data) => {
55
- this.submitSmsCode(data.toString().trim());
56
- });
57
- });
58
- this.on('system.login.qrcode', (e) => {
59
- process.stdin.once('data', () => {
60
- this.login();
61
- });
62
- });
63
- this.on('system.login.slider', () => {
64
- process.stdin.once('data', (e) => {
65
- this.submitSlider(e.toString().trim());
66
- });
67
- });
68
- return new Promise((resolve) => {
69
- this.once('system.online', () => {
70
- this.connected = true;
71
- resolve();
72
- });
73
- this.login(Number(this.config.name), this.config.password);
74
- });
75
- }
76
- async disconnect() {
77
- await this.logout();
78
- this.connected = false;
79
- }
80
- async sendMessage(options) {
81
- options = await this.plugin.app.handleBeforeSend(options);
82
- switch (options.type) {
83
- case 'private': {
84
- const result = await this.sendPrivateMsg(Number(options.id), IcqqBot.toSendable(options.content));
85
- this.plugin.logger.info(`send ${options.type}(${options.id}):${result.message_id}`);
86
- break;
87
- }
88
- case "group": {
89
- const result = await this.sendGroupMsg(Number(options.id), IcqqBot.toSendable(options.content));
90
- this.plugin.logger.info(`send ${options.type}(${options.id}):${result.message_id}`);
91
- break;
92
- }
93
- default:
94
- throw new Error(`unsupported channel type ${options.type}`);
95
- }
96
- }
97
- }
98
- (function (IcqqBot) {
99
- function toSegments(message) {
100
- if (!Array.isArray(message))
101
- message = [message];
102
- return message.map((item) => {
103
- if (typeof item === "string")
104
- return { type: 'text', data: { text: item } };
105
- const { type, ...data } = item;
106
- return { type, data };
107
- });
108
- }
109
- IcqqBot.toSegments = toSegments;
110
- function toSendable(content) {
111
- if (!Array.isArray(content))
112
- content = [content];
113
- return content.map((segment) => {
114
- if (typeof segment === "string")
115
- return { type: 'text', text: segment };
116
- const { type, data } = segment;
117
- console.log(segment);
118
- return { type, ...data };
119
- });
120
- }
121
- IcqqBot.toSendable = toSendable;
122
- })(IcqqBot || (IcqqBot = {}));
123
- registerAdapter(new Adapter('icqq', IcqqBot));
124
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/src/index.ts DELETED
@@ -1,127 +0,0 @@
1
- import { Config, Client, PrivateMessageEvent, GroupMessageEvent, Sendable, MessageElem} from "@lc-cn/icqq";
2
- import path from "path";
3
- import {Bot,BotConfig,Adapter,Plugin,registerAdapter, Message, SendOptions, MessageSegment, SendContent} from "zhin.js";
4
- declare module '@zhin.js/types'{
5
- interface GlobalContext{
6
- icqq:Adapter<IcqqBot>
7
- }
8
- }
9
- export interface IcqqBotConfig extends BotConfig,Config{
10
- context:'icqq'
11
- name:`${number}`
12
- password?:string
13
- scope?:string
14
- }
15
- export interface IcqqBot{
16
- readonly config:Required<IcqqBotConfig>
17
- }
18
- export class IcqqBot extends Client implements Bot<Required<IcqqBotConfig>>{
19
- connected?:boolean
20
- constructor(private plugin:Plugin,config:IcqqBotConfig) {
21
- if(!config.scope) config.scope='lc-cn'
22
- if(!config.data_dir) config.data_dir=path.join(process.cwd(),'data')
23
- if(config.scope.startsWith('@')) config.scope=config.scope.slice(1)
24
- super(config);
25
- }
26
- private handleIcqqMessage(msg: PrivateMessageEvent|GroupMessageEvent): void {
27
- const message: Message = {
28
- id: msg.message_id.toString(),
29
- adapter:'icqq',
30
- bot:`${this.config.name}`,
31
- sender:{
32
- id:msg.sender.user_id.toString(),
33
- name:msg.sender.nickname.toString(),
34
- },
35
- channel:{
36
- id:msg.message_type==='group'?msg.group_id.toString():msg.from_id.toString(),
37
- type:msg.message_type
38
- },
39
- content: IcqqBot.toSegments(msg.message),
40
- raw: msg.raw_message,
41
- timestamp: msg.time,
42
- reply:async (content: MessageSegment[], quote?: boolean|string):Promise<void>=> {
43
- if(!Array.isArray(content)) content=[content]
44
- if(quote) content.unshift({type:'reply',data:{id:typeof quote==="boolean"?message.id:quote}})
45
- this.plugin.dispatch('message.send',{
46
- ...message.channel,
47
- context:'icqq',
48
- bot:`${this.uin}`,
49
- content
50
- })
51
- }
52
- };
53
- this.plugin.dispatch('message.receive',message)
54
- this.plugin.logger.info(`recv ${message.channel.type}(${message.channel.id}):${msg.raw_message}`)
55
- this.plugin.dispatch(`message.${message.channel.type}.receive`,message)
56
- }
57
- async connect(): Promise<void> {
58
- this.on('message',this.handleIcqqMessage.bind(this))
59
- this.on('system.login.device',(e:unknown)=>{
60
- this.sendSmsCode()
61
- process.stdin.once('data',(data)=>{
62
- this.submitSmsCode(data.toString().trim())
63
- })
64
- })
65
- this.on('system.login.qrcode',(e:unknown)=>{
66
- process.stdin.once('data',()=>{
67
- this.login()
68
- })
69
- })
70
- this.on('system.login.slider',()=>{
71
- process.stdin.once('data',(e)=>{
72
- this.submitSlider(e.toString().trim())
73
- })
74
- })
75
- return new Promise((resolve)=>{
76
- this.once('system.online',()=>{
77
- this.connected=true;
78
- resolve()
79
- })
80
- this.login(Number(this.config.name),this.config.password)
81
- })
82
- }
83
-
84
- async disconnect(): Promise<void> {
85
- await this.logout()
86
- this.connected=false;
87
- }
88
-
89
- async sendMessage(options: SendOptions): Promise<void> {
90
- options=await this.plugin.app.handleBeforeSend(options)
91
- switch (options.type){
92
- case 'private':{
93
- const result= await this.sendPrivateMsg(Number(options.id),IcqqBot.toSendable(options.content))
94
- this.plugin.logger.info(`send ${options.type}(${options.id}):${result.message_id}`)
95
- break;
96
- }
97
- case "group":{
98
- const result=await this.sendGroupMsg(Number(options.id),IcqqBot.toSendable(options.content))
99
- this.plugin.logger.info(`send ${options.type}(${options.id}):${result.message_id}`)
100
- break;
101
- }
102
- default:
103
- throw new Error(`unsupported channel type ${options.type}`)
104
- }
105
- }
106
-
107
- }
108
- export namespace IcqqBot{
109
- export function toSegments(message:Sendable):MessageSegment[]{
110
- if(!Array.isArray(message)) message=[message]
111
- return message.map((item):MessageSegment=>{
112
- if(typeof item==="string") return {type:'text',data:{text:item}}
113
- const {type,...data}=item
114
- return {type,data}
115
- })
116
- }
117
- export function toSendable(content:SendContent):Sendable{
118
- if(!Array.isArray(content)) content=[content]
119
- return content.map((segment):MessageElem=>{
120
- if(typeof segment==="string") return {type:'text',text:segment}
121
- const {type,data}=segment
122
- console.log(segment)
123
- return {type,...data} as MessageElem
124
- })
125
- }
126
- }
127
- registerAdapter(new Adapter('icqq',IcqqBot))
package/tsconfig.json DELETED
@@ -1,25 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "ESNext",
5
- "moduleResolution": "node",
6
- "outDir": "./dist",
7
- "rootDir": "./src",
8
- "strict": true,
9
- "esModuleInterop": true,
10
- "skipLibCheck": true,
11
- "forceConsistentCasingInFileNames": true,
12
- "resolveJsonModule": true,
13
- "isolatedModules": true,
14
- "allowSyntheticDefaultImports": true,
15
- "experimentalDecorators": true,
16
- "emitDecoratorMetadata": true,
17
- "declaration": true,
18
- "declarationMap": true,
19
- "sourceMap": true,
20
- "composite": true,
21
- "verbatimModuleSyntax": false
22
- },
23
- "include": ["src/**/*"],
24
- "exclude": ["dist", "node_modules"]
25
- }