hotcat-bot-qq 0.1.4 → 0.1.6

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.
@@ -13,7 +13,7 @@ export type NoticeEvent = Record<string, any> & {
13
13
  sub_type?: string;
14
14
  };
15
15
  /** BotConsole 日志分类 */
16
- export type BotConsoleType = 'system' | 'groupMessage' | 'privateMessage' | 'error' | 'sendGroupMessage' | 'sendPrivateMessage' | 'groupMessageSelf' | 'privateMessageSelf' | 'requestFriend' | 'requestGroupAdd' | 'requestGroupInvite' | 'notice';
16
+ export type BotConsoleType = 'system' | 'groupMessage' | 'privateMessage' | 'error' | 'sendGroupMessage' | 'sendPrivateMessage' | 'groupMessageSelf' | 'privateMessageSelf' | 'requestFriend' | 'requestGroupAdd' | 'requestGroupInvite' | 'notice' | 'plugin';
17
17
  /** ANSI 颜色/样式码 */
18
18
  export declare const colors: {
19
19
  reset: string;
@@ -66,7 +66,13 @@ export declare const formatMessage: (m: Message) => string;
66
66
  */
67
67
  export declare class BotConsole {
68
68
  type: BotConsoleType;
69
- content: string | GroupMessage | GroupMessageSelf | PrivateMessage | PrivateMessageSelf | Message[] | RequestFriend | RequestGroupAdd | RequestGroupInvite | NoticeEvent;
70
- constructor(type: BotConsoleType, content: string | GroupMessage | GroupMessageSelf | PrivateMessage | PrivateMessageSelf | Message[] | RequestFriend | RequestGroupAdd | RequestGroupInvite | NoticeEvent);
69
+ content: string | GroupMessage | GroupMessageSelf | PrivateMessage | PrivateMessageSelf | Message[] | RequestFriend | RequestGroupAdd | RequestGroupInvite | NoticeEvent | {
70
+ name: string;
71
+ msg: string;
72
+ };
73
+ constructor(type: BotConsoleType, content: string | GroupMessage | GroupMessageSelf | PrivateMessage | PrivateMessageSelf | Message[] | RequestFriend | RequestGroupAdd | RequestGroupInvite | NoticeEvent | {
74
+ name: string;
75
+ msg: string;
76
+ });
71
77
  log(): void;
72
78
  }
@@ -293,5 +293,9 @@ export class BotConsole {
293
293
  ('name_new' in event ? `${colors.green}${sanitize(event.name_new)}${colors.reset}` : '') +
294
294
  ('file' in event ? `文件:${event.file.name}` : ''));
295
295
  }
296
+ else if (this.type === 'plugin') {
297
+ const { name, msg } = this.content;
298
+ console.log(`${colors.magenta}[plugin:${name}]:${colors.reset} ${msg}`);
299
+ }
296
300
  }
297
301
  }
@@ -3,176 +3,101 @@ import { PrivateMessage, PrivateMessageSelf, RequestGroup } from './botConsole';
3
3
  import type { BotClient } from './botClient';
4
4
  import type { BotApi } from './botApi';
5
5
  /**
6
- * 当接收到消息时触发的事件。
7
- *
8
- * @example
9
- * ```ts
10
- * bot.event.message.onGroupMessage(async (bot, event) => {
11
- * await bot.api.sendGroupMessage(event.group_id, Message.text('收到'));
12
- * });
13
- * ```
6
+ * 接收到的事件处理(别人发的消息)。
14
7
  */
15
8
  export declare class MessageEvent {
16
9
  private napcat;
17
10
  private client;
11
+ private wrappers;
18
12
  constructor(napcat: NCWebsocket, client: BotClient);
19
- /**
20
- * 注册群消息事件回调
21
- * @param fn - 回调 `(bot, event) => any`
22
- */
23
13
  onGroupMessage(fn: (bot: BotClient, event: GroupMessage) => any): void;
24
- /**
25
- * 注册群消息普通事件回调
26
- * @param fn - 回调 `(bot, event) => any`
27
- */
14
+ offGroupMessage(fn: Function): void;
28
15
  onGroupNormal(fn: (bot: BotClient, event: GroupMessage) => any): void;
29
- /**
30
- * 注册私聊消息事件回调
31
- * @param fn - 回调 `(bot, event) => any`
32
- */
16
+ offGroupNormal(fn: Function): void;
33
17
  onPrivateMessage(fn: (bot: BotClient, event: PrivateMessage) => any): void;
34
- /**
35
- * 注册私聊消息好友事件回调
36
- * @param fn - 回调 `(bot, event) => any`
37
- */
18
+ offPrivateMessage(fn: Function): void;
38
19
  onPrivateFriend(fn: (bot: BotClient, event: PrivateMessage) => any): void;
39
- /**
40
- * 注册私聊消息群临时事件回调
41
- * @param fn - 回调 `(bot, event) => any`
42
- */
20
+ offPrivateFriend(fn: Function): void;
43
21
  onPrivateGroup(fn: (bot: BotClient, event: PrivateMessage) => any): void;
22
+ offPrivateGroup(fn: Function): void;
44
23
  }
45
24
  /**
46
- * 当 bot 自身发出消息后的事件。
47
- *
48
- * @example
49
- * ```ts
50
- * bot.event.messageSent.onGroupSent(async (bot, event) => {
51
- * console.log('群消息已发送:', event.message_id);
52
- * });
53
- * ```
25
+ * bot 自身发出的消息事件(发送成功后的回执)。
54
26
  */
55
27
  export declare class MessageSent {
56
28
  private napcat;
57
29
  private client;
30
+ private wrappers;
58
31
  constructor(napcat: NCWebsocket, client: BotClient);
59
- /**
60
- * 注册群消息发送回执
61
- * @param fn - 回调 `(bot, event) => any`
62
- */
63
32
  onGroupSent(fn: (bot: BotClient, event: GroupMessageSelf) => any): void;
64
- /**
65
- * 注册群消息发送回执(仅普通消息)
66
- * @param fn - 回调 `(bot, event) => any`
67
- */
33
+ offGroupSent(fn: Function): void;
68
34
  onGroupNormal(fn: (bot: BotClient, event: GroupMessageSelf) => any): void;
69
- /**
70
- * 注册私聊消息发送回执
71
- * @param fn - 回调 `(bot, event) => any`
72
- */
35
+ offGroupNormal(fn: Function): void;
73
36
  onPrivateSent(fn: (bot: BotClient, event: PrivateMessageSelf) => any): void;
74
- /**
75
- * 注册私聊好友消息发送回执
76
- * @param fn - 回调 `(bot, event) => any`
77
- */
37
+ offPrivateSent(fn: Function): void;
78
38
  onPrivateFriend(fn: (bot: BotClient, event: PrivateFriendMessageSelf) => any): void;
79
- /**
80
- * 注册私聊群临时消息发送回执
81
- * @param fn - 回调 `(bot, event) => any`
82
- */
39
+ offPrivateFriend(fn: Function): void;
83
40
  onPrivateGroup(fn: (bot: BotClient, event: PrivateGroupMessageSelf) => any): void;
41
+ offPrivateGroup(fn: Function): void;
84
42
  }
85
43
  /**
86
44
  * 请求事件监听(加好友、加群、邀请入群)。
87
- *
88
- * @example
89
- * ```ts
90
- * bot.event.request.onFriend(async (bot, event) => {
91
- * await bot.api.handleFriendAddRequest(event.flag, true);
92
- * });
93
- * ```
94
45
  */
95
46
  export declare class RequestEvent {
96
47
  private napcat;
97
48
  private client;
49
+ private wrappers;
98
50
  constructor(napcat: NCWebsocket, client: BotClient);
99
- /**
100
- * 注册加好友请求回调
101
- * @param fn - 回调 `(bot, event) => any`,event.flag 可传给 handleFriendAddRequest
102
- */
103
51
  onFriend(fn: (bot: BotClient, event: RequestFriend) => any): void;
104
- /**
105
- * 注册加群请求回调
106
- * @param fn - 回调 `(bot, event) => any`,event.flag 可传给 handleGroupAddRequest
107
- */
52
+ offFriend(fn: Function): void;
108
53
  onGroupAdd(fn: (bot: BotClient, event: RequestGroupAdd) => any): void;
109
- /**
110
- * 注册邀请入群回调
111
- * @param fn - 回调 `(bot, event) => any`
112
- */
54
+ offGroupAdd(fn: Function): void;
113
55
  onGroupInvite(fn: (bot: BotClient, event: RequestGroupInvite) => any): void;
114
- /**
115
- * 注册所有群请求回调(加群 + 邀请)
116
- * @param fn - 回调 `(bot, event) => any`
117
- */
56
+ offGroupInvite(fn: Function): void;
118
57
  onGroupRequest(fn: (bot: BotClient, event: RequestGroup) => any): void;
58
+ offGroupRequest(fn: Function): void;
119
59
  }
120
60
  /**
121
61
  * 通知事件监听(好友添加、群成员变动、禁言、撤回等)。
122
- *
123
- * @example
124
- * ```ts
125
- * bot.event.notice.onFriendAdd(async (bot, event) => { ... });
126
- * bot.event.notice.onGroupIncrease(async (bot, event) => { ... });
127
- * ```
128
62
  */
129
63
  export declare class NoticeEvent {
130
64
  private napcat;
131
65
  private client;
66
+ private wrappers;
132
67
  constructor(napcat: NCWebsocket, client: BotClient);
133
- /** 好友添加 */
134
68
  onFriendAdd(fn: (bot: BotClient, event: FriendAdd) => any): void;
135
- /** 私聊消息撤回 */
69
+ offFriendAdd(fn: Function): void;
136
70
  onFriendRecall(fn: (bot: BotClient, event: FriendRecall) => any): void;
137
- /** 群管理员变动(设置/取消) */
71
+ offFriendRecall(fn: Function): void;
138
72
  onGroupAdmin(fn: (bot: BotClient, event: GroupAdminSet | GroupAdminUnset) => any): void;
139
- /** 群禁言变动(禁言/解除) */
73
+ offGroupAdmin(fn: Function): void;
140
74
  onGroupBan(fn: (bot: BotClient, event: GroupBanBan | GroupBanLiftBan) => any): void;
141
- /** 群名片变更 */
75
+ offGroupBan(fn: Function): void;
142
76
  onGroupCard(fn: (bot: BotClient, event: GroupCard) => any): void;
143
- /** 群成员减少(退群/被踢/bot被踢) */
77
+ offGroupCard(fn: Function): void;
144
78
  onGroupDecrease(fn: (bot: BotClient, event: GroupDecreaseLeave | GroupDecreaseKick | GroupDecreaseKickMe) => any): void;
145
- /** 群成员增加(审批/邀请) */
79
+ offGroupDecrease(fn: Function): void;
146
80
  onGroupIncrease(fn: (bot: BotClient, event: GroupIncreaseApprove | GroupIncreaseInvite) => any): void;
147
- /** 群消息撤回 */
81
+ offGroupIncrease(fn: Function): void;
148
82
  onGroupRecall(fn: (bot: BotClient, event: GroupRecall) => any): void;
149
- /** 群文件上传 */
83
+ offGroupRecall(fn: Function): void;
150
84
  onGroupUpload(fn: (bot: BotClient, event: GroupUpload) => any): void;
151
- /** 群表情回应 */
85
+ offGroupUpload(fn: Function): void;
152
86
  onGroupEmojiLike(fn: (bot: BotClient, event: GroupMsgEmojiLike) => any): void;
153
- /** 群设精(添加/删除) */
87
+ offGroupEmojiLike(fn: Function): void;
154
88
  onGroupEssence(fn: (bot: BotClient, event: GroupEssenceAdd | GroupEssenceDelete) => any): void;
155
- /** 戳一戳(好友/群) */
89
+ offGroupEssence(fn: Function): void;
156
90
  onPoke(fn: (bot: BotClient, event: NotifyPokeFriend | NotifyPokeGroup) => any): void;
157
- /** 群名称变更 */
91
+ offPoke(fn: Function): void;
158
92
  onGroupNameChange(fn: (bot: BotClient, event: NotifyGroupName) => any): void;
159
- /** 群头衔变更 */
93
+ offGroupNameChange(fn: Function): void;
160
94
  onTitleChange(fn: (bot: BotClient, event: NotifyTitle) => any): void;
161
- /** 个人资料点赞 */
95
+ offTitleChange(fn: Function): void;
162
96
  onProfileLike(fn: (bot: BotClient, event: NotifyProfileLike) => any): void;
163
- /** bot 离线 */
97
+ offProfileLike(fn: Function): void;
164
98
  onBotOffline(fn: (bot: BotClient, event: BotOffline) => any): void;
99
+ offBotOffline(fn: Function): void;
165
100
  }
166
- /**
167
- * 事件监听入口,按类别分组暴露监听器。
168
- *
169
- * @example
170
- * ```ts
171
- * bot.event.message.onGroupMessage(...);
172
- * bot.event.messageSent.onGroupSent(...);
173
- * bot.event.request.onFriend(...);
174
- * ```
175
- */
176
101
  export declare class BotEvent {
177
102
  message: MessageEvent;
178
103
  messageSent: MessageSent;
package/dist/botEvent.js CHANGED
@@ -1,13 +1,6 @@
1
1
  import { BotConsole } from './botConsole';
2
2
  /**
3
- * 当接收到消息时触发的事件。
4
- *
5
- * @example
6
- * ```ts
7
- * bot.event.message.onGroupMessage(async (bot, event) => {
8
- * await bot.api.sendGroupMessage(event.group_id, Message.text('收到'));
9
- * });
10
- * ```
3
+ * 接收到的事件处理(别人发的消息)。
11
4
  */
12
5
  export class MessageEvent {
13
6
  constructor(napcat, client) {
@@ -23,15 +16,17 @@ export class MessageEvent {
23
16
  writable: true,
24
17
  value: void 0
25
18
  });
19
+ Object.defineProperty(this, "wrappers", {
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true,
23
+ value: new Map()
24
+ });
26
25
  this.napcat = napcat;
27
26
  this.client = client;
28
27
  }
29
- /**
30
- * 注册群消息事件回调
31
- * @param fn - 回调 `(bot, event) => any`
32
- */
33
28
  onGroupMessage(fn) {
34
- this.napcat.on('message.group', async (event) => {
29
+ const w = async (event) => {
35
30
  try {
36
31
  new BotConsole('groupMessage', event).log();
37
32
  await fn(this.client, event);
@@ -39,14 +34,19 @@ export class MessageEvent {
39
34
  catch (e) {
40
35
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
41
36
  }
42
- });
37
+ };
38
+ this.wrappers.set(fn, w);
39
+ this.napcat.on('message.group', w);
40
+ }
41
+ offGroupMessage(fn) {
42
+ const w = this.wrappers.get(fn);
43
+ if (w) {
44
+ this.napcat.off('message.group', w);
45
+ this.wrappers.delete(fn);
46
+ }
43
47
  }
44
- /**
45
- * 注册群消息普通事件回调
46
- * @param fn - 回调 `(bot, event) => any`
47
- */
48
48
  onGroupNormal(fn) {
49
- this.napcat.on('message.group.normal', async (event) => {
49
+ const w = async (event) => {
50
50
  try {
51
51
  new BotConsole('groupMessage', event).log();
52
52
  await fn(this.client, event);
@@ -54,14 +54,19 @@ export class MessageEvent {
54
54
  catch (e) {
55
55
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
56
56
  }
57
- });
57
+ };
58
+ this.wrappers.set(fn, w);
59
+ this.napcat.on('message.group.normal', w);
60
+ }
61
+ offGroupNormal(fn) {
62
+ const w = this.wrappers.get(fn);
63
+ if (w) {
64
+ this.napcat.off('message.group.normal', w);
65
+ this.wrappers.delete(fn);
66
+ }
58
67
  }
59
- /**
60
- * 注册私聊消息事件回调
61
- * @param fn - 回调 `(bot, event) => any`
62
- */
63
68
  onPrivateMessage(fn) {
64
- this.napcat.on('message.private', async (event) => {
69
+ const w = async (event) => {
65
70
  try {
66
71
  new BotConsole('privateMessage', event).log();
67
72
  await fn(this.client, event);
@@ -69,14 +74,19 @@ export class MessageEvent {
69
74
  catch (e) {
70
75
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
71
76
  }
72
- });
77
+ };
78
+ this.wrappers.set(fn, w);
79
+ this.napcat.on('message.private', w);
80
+ }
81
+ offPrivateMessage(fn) {
82
+ const w = this.wrappers.get(fn);
83
+ if (w) {
84
+ this.napcat.off('message.private', w);
85
+ this.wrappers.delete(fn);
86
+ }
73
87
  }
74
- /**
75
- * 注册私聊消息好友事件回调
76
- * @param fn - 回调 `(bot, event) => any`
77
- */
78
88
  onPrivateFriend(fn) {
79
- this.napcat.on('message.private.friend', async (event) => {
89
+ const w = async (event) => {
80
90
  try {
81
91
  new BotConsole('privateMessage', event).log();
82
92
  await fn(this.client, event);
@@ -84,14 +94,19 @@ export class MessageEvent {
84
94
  catch (e) {
85
95
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
86
96
  }
87
- });
97
+ };
98
+ this.wrappers.set(fn, w);
99
+ this.napcat.on('message.private.friend', w);
100
+ }
101
+ offPrivateFriend(fn) {
102
+ const w = this.wrappers.get(fn);
103
+ if (w) {
104
+ this.napcat.off('message.private.friend', w);
105
+ this.wrappers.delete(fn);
106
+ }
88
107
  }
89
- /**
90
- * 注册私聊消息群临时事件回调
91
- * @param fn - 回调 `(bot, event) => any`
92
- */
93
108
  onPrivateGroup(fn) {
94
- this.napcat.on('message.private.group', async (event) => {
109
+ const w = async (event) => {
95
110
  try {
96
111
  new BotConsole('privateMessage', event).log();
97
112
  await fn(this.client, event);
@@ -99,18 +114,20 @@ export class MessageEvent {
99
114
  catch (e) {
100
115
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
101
116
  }
102
- });
117
+ };
118
+ this.wrappers.set(fn, w);
119
+ this.napcat.on('message.private.group', w);
120
+ }
121
+ offPrivateGroup(fn) {
122
+ const w = this.wrappers.get(fn);
123
+ if (w) {
124
+ this.napcat.off('message.private.group', w);
125
+ this.wrappers.delete(fn);
126
+ }
103
127
  }
104
128
  }
105
129
  /**
106
- * 当 bot 自身发出消息后的事件。
107
- *
108
- * @example
109
- * ```ts
110
- * bot.event.messageSent.onGroupSent(async (bot, event) => {
111
- * console.log('群消息已发送:', event.message_id);
112
- * });
113
- * ```
130
+ * bot 自身发出的消息事件(发送成功后的回执)。
114
131
  */
115
132
  export class MessageSent {
116
133
  constructor(napcat, client) {
@@ -126,15 +143,17 @@ export class MessageSent {
126
143
  writable: true,
127
144
  value: void 0
128
145
  });
146
+ Object.defineProperty(this, "wrappers", {
147
+ enumerable: true,
148
+ configurable: true,
149
+ writable: true,
150
+ value: new Map()
151
+ });
129
152
  this.napcat = napcat;
130
153
  this.client = client;
131
154
  }
132
- /**
133
- * 注册群消息发送回执
134
- * @param fn - 回调 `(bot, event) => any`
135
- */
136
155
  onGroupSent(fn) {
137
- this.napcat.on('message_sent.group', async (event) => {
156
+ const w = async (event) => {
138
157
  try {
139
158
  new BotConsole('groupMessageSelf', event).log();
140
159
  await fn(this.client, event);
@@ -142,14 +161,19 @@ export class MessageSent {
142
161
  catch (e) {
143
162
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
144
163
  }
145
- });
164
+ };
165
+ this.wrappers.set(fn, w);
166
+ this.napcat.on('message_sent.group', w);
167
+ }
168
+ offGroupSent(fn) {
169
+ const w = this.wrappers.get(fn);
170
+ if (w) {
171
+ this.napcat.off('message_sent.group', w);
172
+ this.wrappers.delete(fn);
173
+ }
146
174
  }
147
- /**
148
- * 注册群消息发送回执(仅普通消息)
149
- * @param fn - 回调 `(bot, event) => any`
150
- */
151
175
  onGroupNormal(fn) {
152
- this.napcat.on('message_sent.group.normal', async (event) => {
176
+ const w = async (event) => {
153
177
  try {
154
178
  new BotConsole('groupMessageSelf', event).log();
155
179
  await fn(this.client, event);
@@ -157,14 +181,19 @@ export class MessageSent {
157
181
  catch (e) {
158
182
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
159
183
  }
160
- });
184
+ };
185
+ this.wrappers.set(fn, w);
186
+ this.napcat.on('message_sent.group.normal', w);
187
+ }
188
+ offGroupNormal(fn) {
189
+ const w = this.wrappers.get(fn);
190
+ if (w) {
191
+ this.napcat.off('message_sent.group.normal', w);
192
+ this.wrappers.delete(fn);
193
+ }
161
194
  }
162
- /**
163
- * 注册私聊消息发送回执
164
- * @param fn - 回调 `(bot, event) => any`
165
- */
166
195
  onPrivateSent(fn) {
167
- this.napcat.on('message_sent.private', async (event) => {
196
+ const w = async (event) => {
168
197
  try {
169
198
  new BotConsole('privateMessageSelf', event).log();
170
199
  await fn(this.client, event);
@@ -172,14 +201,19 @@ export class MessageSent {
172
201
  catch (e) {
173
202
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
174
203
  }
175
- });
204
+ };
205
+ this.wrappers.set(fn, w);
206
+ this.napcat.on('message_sent.private', w);
207
+ }
208
+ offPrivateSent(fn) {
209
+ const w = this.wrappers.get(fn);
210
+ if (w) {
211
+ this.napcat.off('message_sent.private', w);
212
+ this.wrappers.delete(fn);
213
+ }
176
214
  }
177
- /**
178
- * 注册私聊好友消息发送回执
179
- * @param fn - 回调 `(bot, event) => any`
180
- */
181
215
  onPrivateFriend(fn) {
182
- this.napcat.on('message_sent.private.friend', async (event) => {
216
+ const w = async (event) => {
183
217
  try {
184
218
  new BotConsole('privateMessageSelf', event).log();
185
219
  await fn(this.client, event);
@@ -187,14 +221,19 @@ export class MessageSent {
187
221
  catch (e) {
188
222
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
189
223
  }
190
- });
224
+ };
225
+ this.wrappers.set(fn, w);
226
+ this.napcat.on('message_sent.private.friend', w);
227
+ }
228
+ offPrivateFriend(fn) {
229
+ const w = this.wrappers.get(fn);
230
+ if (w) {
231
+ this.napcat.off('message_sent.private.friend', w);
232
+ this.wrappers.delete(fn);
233
+ }
191
234
  }
192
- /**
193
- * 注册私聊群临时消息发送回执
194
- * @param fn - 回调 `(bot, event) => any`
195
- */
196
235
  onPrivateGroup(fn) {
197
- this.napcat.on('message_sent.private.group', async (event) => {
236
+ const w = async (event) => {
198
237
  try {
199
238
  new BotConsole('privateMessageSelf', event).log();
200
239
  await fn(this.client, event);
@@ -202,18 +241,20 @@ export class MessageSent {
202
241
  catch (e) {
203
242
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
204
243
  }
205
- });
244
+ };
245
+ this.wrappers.set(fn, w);
246
+ this.napcat.on('message_sent.private.group', w);
247
+ }
248
+ offPrivateGroup(fn) {
249
+ const w = this.wrappers.get(fn);
250
+ if (w) {
251
+ this.napcat.off('message_sent.private.group', w);
252
+ this.wrappers.delete(fn);
253
+ }
206
254
  }
207
255
  }
208
256
  /**
209
257
  * 请求事件监听(加好友、加群、邀请入群)。
210
- *
211
- * @example
212
- * ```ts
213
- * bot.event.request.onFriend(async (bot, event) => {
214
- * await bot.api.handleFriendAddRequest(event.flag, true);
215
- * });
216
- * ```
217
258
  */
218
259
  export class RequestEvent {
219
260
  constructor(napcat, client) {
@@ -229,15 +270,17 @@ export class RequestEvent {
229
270
  writable: true,
230
271
  value: void 0
231
272
  });
273
+ Object.defineProperty(this, "wrappers", {
274
+ enumerable: true,
275
+ configurable: true,
276
+ writable: true,
277
+ value: new Map()
278
+ });
232
279
  this.napcat = napcat;
233
280
  this.client = client;
234
281
  }
235
- /**
236
- * 注册加好友请求回调
237
- * @param fn - 回调 `(bot, event) => any`,event.flag 可传给 handleFriendAddRequest
238
- */
239
282
  onFriend(fn) {
240
- this.napcat.on('request.friend', async (event) => {
283
+ const w = async (event) => {
241
284
  try {
242
285
  new BotConsole('requestFriend', event).log();
243
286
  await fn(this.client, event);
@@ -245,14 +288,19 @@ export class RequestEvent {
245
288
  catch (e) {
246
289
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
247
290
  }
248
- });
291
+ };
292
+ this.wrappers.set(fn, w);
293
+ this.napcat.on('request.friend', w);
294
+ }
295
+ offFriend(fn) {
296
+ const w = this.wrappers.get(fn);
297
+ if (w) {
298
+ this.napcat.off('request.friend', w);
299
+ this.wrappers.delete(fn);
300
+ }
249
301
  }
250
- /**
251
- * 注册加群请求回调
252
- * @param fn - 回调 `(bot, event) => any`,event.flag 可传给 handleGroupAddRequest
253
- */
254
302
  onGroupAdd(fn) {
255
- this.napcat.on('request.group.add', async (event) => {
303
+ const w = async (event) => {
256
304
  try {
257
305
  new BotConsole('requestGroupAdd', event).log();
258
306
  await fn(this.client, event);
@@ -260,14 +308,19 @@ export class RequestEvent {
260
308
  catch (e) {
261
309
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
262
310
  }
263
- });
311
+ };
312
+ this.wrappers.set(fn, w);
313
+ this.napcat.on('request.group.add', w);
314
+ }
315
+ offGroupAdd(fn) {
316
+ const w = this.wrappers.get(fn);
317
+ if (w) {
318
+ this.napcat.off('request.group.add', w);
319
+ this.wrappers.delete(fn);
320
+ }
264
321
  }
265
- /**
266
- * 注册邀请入群回调
267
- * @param fn - 回调 `(bot, event) => any`
268
- */
269
322
  onGroupInvite(fn) {
270
- this.napcat.on('request.group.invite', async (event) => {
323
+ const w = async (event) => {
271
324
  try {
272
325
  new BotConsole('requestGroupInvite', event).log();
273
326
  await fn(this.client, event);
@@ -275,14 +328,19 @@ export class RequestEvent {
275
328
  catch (e) {
276
329
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
277
330
  }
278
- });
331
+ };
332
+ this.wrappers.set(fn, w);
333
+ this.napcat.on('request.group.invite', w);
334
+ }
335
+ offGroupInvite(fn) {
336
+ const w = this.wrappers.get(fn);
337
+ if (w) {
338
+ this.napcat.off('request.group.invite', w);
339
+ this.wrappers.delete(fn);
340
+ }
279
341
  }
280
- /**
281
- * 注册所有群请求回调(加群 + 邀请)
282
- * @param fn - 回调 `(bot, event) => any`
283
- */
284
342
  onGroupRequest(fn) {
285
- this.napcat.on('request.group', async (event) => {
343
+ const w = async (event) => {
286
344
  try {
287
345
  const type = event.sub_type === 'add' ? 'requestGroupAdd' : 'requestGroupInvite';
288
346
  new BotConsole(type, event).log();
@@ -291,17 +349,20 @@ export class RequestEvent {
291
349
  catch (e) {
292
350
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
293
351
  }
294
- });
352
+ };
353
+ this.wrappers.set(fn, w);
354
+ this.napcat.on('request.group', w);
355
+ }
356
+ offGroupRequest(fn) {
357
+ const w = this.wrappers.get(fn);
358
+ if (w) {
359
+ this.napcat.off('request.group', w);
360
+ this.wrappers.delete(fn);
361
+ }
295
362
  }
296
363
  }
297
364
  /**
298
365
  * 通知事件监听(好友添加、群成员变动、禁言、撤回等)。
299
- *
300
- * @example
301
- * ```ts
302
- * bot.event.notice.onFriendAdd(async (bot, event) => { ... });
303
- * bot.event.notice.onGroupIncrease(async (bot, event) => { ... });
304
- * ```
305
366
  */
306
367
  export class NoticeEvent {
307
368
  constructor(napcat, client) {
@@ -317,12 +378,17 @@ export class NoticeEvent {
317
378
  writable: true,
318
379
  value: void 0
319
380
  });
381
+ Object.defineProperty(this, "wrappers", {
382
+ enumerable: true,
383
+ configurable: true,
384
+ writable: true,
385
+ value: new Map()
386
+ });
320
387
  this.napcat = napcat;
321
388
  this.client = client;
322
389
  }
323
- /** 好友添加 */
324
390
  onFriendAdd(fn) {
325
- this.napcat.on('notice.friend_add', async (event) => {
391
+ const w = async (event) => {
326
392
  try {
327
393
  new BotConsole('notice', event).log();
328
394
  await fn(this.client, event);
@@ -330,11 +396,19 @@ export class NoticeEvent {
330
396
  catch (e) {
331
397
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
332
398
  }
333
- });
399
+ };
400
+ this.wrappers.set(fn, w);
401
+ this.napcat.on('notice.friend_add', w);
402
+ }
403
+ offFriendAdd(fn) {
404
+ const w = this.wrappers.get(fn);
405
+ if (w) {
406
+ this.napcat.off('notice.friend_add', w);
407
+ this.wrappers.delete(fn);
408
+ }
334
409
  }
335
- /** 私聊消息撤回 */
336
410
  onFriendRecall(fn) {
337
- this.napcat.on('notice.friend_recall', async (event) => {
411
+ const w = async (event) => {
338
412
  try {
339
413
  new BotConsole('notice', event).log();
340
414
  await fn(this.client, event);
@@ -342,11 +416,19 @@ export class NoticeEvent {
342
416
  catch (e) {
343
417
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
344
418
  }
345
- });
419
+ };
420
+ this.wrappers.set(fn, w);
421
+ this.napcat.on('notice.friend_recall', w);
422
+ }
423
+ offFriendRecall(fn) {
424
+ const w = this.wrappers.get(fn);
425
+ if (w) {
426
+ this.napcat.off('notice.friend_recall', w);
427
+ this.wrappers.delete(fn);
428
+ }
346
429
  }
347
- /** 群管理员变动(设置/取消) */
348
430
  onGroupAdmin(fn) {
349
- this.napcat.on('notice.group_admin', async (event) => {
431
+ const w = async (event) => {
350
432
  try {
351
433
  new BotConsole('notice', event).log();
352
434
  await fn(this.client, event);
@@ -354,11 +436,19 @@ export class NoticeEvent {
354
436
  catch (e) {
355
437
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
356
438
  }
357
- });
439
+ };
440
+ this.wrappers.set(fn, w);
441
+ this.napcat.on('notice.group_admin', w);
442
+ }
443
+ offGroupAdmin(fn) {
444
+ const w = this.wrappers.get(fn);
445
+ if (w) {
446
+ this.napcat.off('notice.group_admin', w);
447
+ this.wrappers.delete(fn);
448
+ }
358
449
  }
359
- /** 群禁言变动(禁言/解除) */
360
450
  onGroupBan(fn) {
361
- this.napcat.on('notice.group_ban', async (event) => {
451
+ const w = async (event) => {
362
452
  try {
363
453
  new BotConsole('notice', event).log();
364
454
  await fn(this.client, event);
@@ -366,11 +456,19 @@ export class NoticeEvent {
366
456
  catch (e) {
367
457
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
368
458
  }
369
- });
459
+ };
460
+ this.wrappers.set(fn, w);
461
+ this.napcat.on('notice.group_ban', w);
462
+ }
463
+ offGroupBan(fn) {
464
+ const w = this.wrappers.get(fn);
465
+ if (w) {
466
+ this.napcat.off('notice.group_ban', w);
467
+ this.wrappers.delete(fn);
468
+ }
370
469
  }
371
- /** 群名片变更 */
372
470
  onGroupCard(fn) {
373
- this.napcat.on('notice.group_card', async (event) => {
471
+ const w = async (event) => {
374
472
  try {
375
473
  new BotConsole('notice', event).log();
376
474
  await fn(this.client, event);
@@ -378,11 +476,19 @@ export class NoticeEvent {
378
476
  catch (e) {
379
477
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
380
478
  }
381
- });
479
+ };
480
+ this.wrappers.set(fn, w);
481
+ this.napcat.on('notice.group_card', w);
482
+ }
483
+ offGroupCard(fn) {
484
+ const w = this.wrappers.get(fn);
485
+ if (w) {
486
+ this.napcat.off('notice.group_card', w);
487
+ this.wrappers.delete(fn);
488
+ }
382
489
  }
383
- /** 群成员减少(退群/被踢/bot被踢) */
384
490
  onGroupDecrease(fn) {
385
- this.napcat.on('notice.group_decrease', async (event) => {
491
+ const w = async (event) => {
386
492
  try {
387
493
  new BotConsole('notice', event).log();
388
494
  await fn(this.client, event);
@@ -390,11 +496,19 @@ export class NoticeEvent {
390
496
  catch (e) {
391
497
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
392
498
  }
393
- });
499
+ };
500
+ this.wrappers.set(fn, w);
501
+ this.napcat.on('notice.group_decrease', w);
502
+ }
503
+ offGroupDecrease(fn) {
504
+ const w = this.wrappers.get(fn);
505
+ if (w) {
506
+ this.napcat.off('notice.group_decrease', w);
507
+ this.wrappers.delete(fn);
508
+ }
394
509
  }
395
- /** 群成员增加(审批/邀请) */
396
510
  onGroupIncrease(fn) {
397
- this.napcat.on('notice.group_increase', async (event) => {
511
+ const w = async (event) => {
398
512
  try {
399
513
  new BotConsole('notice', event).log();
400
514
  await fn(this.client, event);
@@ -402,11 +516,19 @@ export class NoticeEvent {
402
516
  catch (e) {
403
517
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
404
518
  }
405
- });
519
+ };
520
+ this.wrappers.set(fn, w);
521
+ this.napcat.on('notice.group_increase', w);
522
+ }
523
+ offGroupIncrease(fn) {
524
+ const w = this.wrappers.get(fn);
525
+ if (w) {
526
+ this.napcat.off('notice.group_increase', w);
527
+ this.wrappers.delete(fn);
528
+ }
406
529
  }
407
- /** 群消息撤回 */
408
530
  onGroupRecall(fn) {
409
- this.napcat.on('notice.group_recall', async (event) => {
531
+ const w = async (event) => {
410
532
  try {
411
533
  new BotConsole('notice', event).log();
412
534
  await fn(this.client, event);
@@ -414,11 +536,19 @@ export class NoticeEvent {
414
536
  catch (e) {
415
537
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
416
538
  }
417
- });
539
+ };
540
+ this.wrappers.set(fn, w);
541
+ this.napcat.on('notice.group_recall', w);
542
+ }
543
+ offGroupRecall(fn) {
544
+ const w = this.wrappers.get(fn);
545
+ if (w) {
546
+ this.napcat.off('notice.group_recall', w);
547
+ this.wrappers.delete(fn);
548
+ }
418
549
  }
419
- /** 群文件上传 */
420
550
  onGroupUpload(fn) {
421
- this.napcat.on('notice.group_upload', async (event) => {
551
+ const w = async (event) => {
422
552
  try {
423
553
  new BotConsole('notice', event).log();
424
554
  await fn(this.client, event);
@@ -426,11 +556,19 @@ export class NoticeEvent {
426
556
  catch (e) {
427
557
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
428
558
  }
429
- });
559
+ };
560
+ this.wrappers.set(fn, w);
561
+ this.napcat.on('notice.group_upload', w);
562
+ }
563
+ offGroupUpload(fn) {
564
+ const w = this.wrappers.get(fn);
565
+ if (w) {
566
+ this.napcat.off('notice.group_upload', w);
567
+ this.wrappers.delete(fn);
568
+ }
430
569
  }
431
- /** 群表情回应 */
432
570
  onGroupEmojiLike(fn) {
433
- this.napcat.on('notice.group_msg_emoji_like', async (event) => {
571
+ const w = async (event) => {
434
572
  try {
435
573
  new BotConsole('notice', event).log();
436
574
  await fn(this.client, event);
@@ -438,11 +576,19 @@ export class NoticeEvent {
438
576
  catch (e) {
439
577
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
440
578
  }
441
- });
579
+ };
580
+ this.wrappers.set(fn, w);
581
+ this.napcat.on('notice.group_msg_emoji_like', w);
582
+ }
583
+ offGroupEmojiLike(fn) {
584
+ const w = this.wrappers.get(fn);
585
+ if (w) {
586
+ this.napcat.off('notice.group_msg_emoji_like', w);
587
+ this.wrappers.delete(fn);
588
+ }
442
589
  }
443
- /** 群设精(添加/删除) */
444
590
  onGroupEssence(fn) {
445
- this.napcat.on('notice.essence', async (event) => {
591
+ const w = async (event) => {
446
592
  try {
447
593
  new BotConsole('notice', event).log();
448
594
  await fn(this.client, event);
@@ -450,11 +596,19 @@ export class NoticeEvent {
450
596
  catch (e) {
451
597
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
452
598
  }
453
- });
599
+ };
600
+ this.wrappers.set(fn, w);
601
+ this.napcat.on('notice.essence', w);
602
+ }
603
+ offGroupEssence(fn) {
604
+ const w = this.wrappers.get(fn);
605
+ if (w) {
606
+ this.napcat.off('notice.essence', w);
607
+ this.wrappers.delete(fn);
608
+ }
454
609
  }
455
- /** 戳一戳(好友/群) */
456
610
  onPoke(fn) {
457
- this.napcat.on('notice.notify.poke', async (event) => {
611
+ const w = async (event) => {
458
612
  try {
459
613
  new BotConsole('notice', event).log();
460
614
  await fn(this.client, event);
@@ -462,11 +616,19 @@ export class NoticeEvent {
462
616
  catch (e) {
463
617
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
464
618
  }
465
- });
619
+ };
620
+ this.wrappers.set(fn, w);
621
+ this.napcat.on('notice.notify.poke', w);
622
+ }
623
+ offPoke(fn) {
624
+ const w = this.wrappers.get(fn);
625
+ if (w) {
626
+ this.napcat.off('notice.notify.poke', w);
627
+ this.wrappers.delete(fn);
628
+ }
466
629
  }
467
- /** 群名称变更 */
468
630
  onGroupNameChange(fn) {
469
- this.napcat.on('notice.notify.group_name', async (event) => {
631
+ const w = async (event) => {
470
632
  try {
471
633
  new BotConsole('notice', event).log();
472
634
  await fn(this.client, event);
@@ -474,11 +636,19 @@ export class NoticeEvent {
474
636
  catch (e) {
475
637
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
476
638
  }
477
- });
639
+ };
640
+ this.wrappers.set(fn, w);
641
+ this.napcat.on('notice.notify.group_name', w);
642
+ }
643
+ offGroupNameChange(fn) {
644
+ const w = this.wrappers.get(fn);
645
+ if (w) {
646
+ this.napcat.off('notice.notify.group_name', w);
647
+ this.wrappers.delete(fn);
648
+ }
478
649
  }
479
- /** 群头衔变更 */
480
650
  onTitleChange(fn) {
481
- this.napcat.on('notice.notify.title', async (event) => {
651
+ const w = async (event) => {
482
652
  try {
483
653
  new BotConsole('notice', event).log();
484
654
  await fn(this.client, event);
@@ -486,11 +656,19 @@ export class NoticeEvent {
486
656
  catch (e) {
487
657
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
488
658
  }
489
- });
659
+ };
660
+ this.wrappers.set(fn, w);
661
+ this.napcat.on('notice.notify.title', w);
662
+ }
663
+ offTitleChange(fn) {
664
+ const w = this.wrappers.get(fn);
665
+ if (w) {
666
+ this.napcat.off('notice.notify.title', w);
667
+ this.wrappers.delete(fn);
668
+ }
490
669
  }
491
- /** 个人资料点赞 */
492
670
  onProfileLike(fn) {
493
- this.napcat.on('notice.notify.profile_like', async (event) => {
671
+ const w = async (event) => {
494
672
  try {
495
673
  new BotConsole('notice', event).log();
496
674
  await fn(this.client, event);
@@ -498,11 +676,19 @@ export class NoticeEvent {
498
676
  catch (e) {
499
677
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
500
678
  }
501
- });
679
+ };
680
+ this.wrappers.set(fn, w);
681
+ this.napcat.on('notice.notify.profile_like', w);
682
+ }
683
+ offProfileLike(fn) {
684
+ const w = this.wrappers.get(fn);
685
+ if (w) {
686
+ this.napcat.off('notice.notify.profile_like', w);
687
+ this.wrappers.delete(fn);
688
+ }
502
689
  }
503
- /** bot 离线 */
504
690
  onBotOffline(fn) {
505
- this.napcat.on('notice.bot_offline', async (event) => {
691
+ const w = async (event) => {
506
692
  try {
507
693
  new BotConsole('notice', event).log();
508
694
  await fn(this.client, event);
@@ -510,19 +696,18 @@ export class NoticeEvent {
510
696
  catch (e) {
511
697
  new BotConsole('error', e instanceof Error ? e.message : JSON.stringify(e)).log();
512
698
  }
513
- });
699
+ };
700
+ this.wrappers.set(fn, w);
701
+ this.napcat.on('notice.bot_offline', w);
702
+ }
703
+ offBotOffline(fn) {
704
+ const w = this.wrappers.get(fn);
705
+ if (w) {
706
+ this.napcat.off('notice.bot_offline', w);
707
+ this.wrappers.delete(fn);
708
+ }
514
709
  }
515
710
  }
516
- /**
517
- * 事件监听入口,按类别分组暴露监听器。
518
- *
519
- * @example
520
- * ```ts
521
- * bot.event.message.onGroupMessage(...);
522
- * bot.event.messageSent.onGroupSent(...);
523
- * bot.event.request.onFriend(...);
524
- * ```
525
- */
526
711
  export class BotEvent {
527
712
  constructor(api, client) {
528
713
  Object.defineProperty(this, "message", {
@@ -49,6 +49,7 @@ export declare class BotPluginSystem {
49
49
  list(): string[];
50
50
  /** 返回所有已加载的插件名列表 */
51
51
  loaded(): string[];
52
+ private findIndex;
52
53
  /**
53
54
  * 扫描目录,自动注册并加载所有插件
54
55
  * @param dir - 插件目录路径
package/dist/botPlugin.js CHANGED
@@ -70,7 +70,7 @@ export class BotPluginSystem {
70
70
  throw new Error(`插件 "${name}" 已注册`);
71
71
  }
72
72
  this.registry.set(name, { ctor, meta });
73
- new BotConsole('system', `插件 "${meta.name}" 已注册`).log();
73
+ new BotConsole('plugin', { name: meta.name, msg: '已注册' }).log();
74
74
  }
75
75
  /**
76
76
  * 加载插件
@@ -87,7 +87,7 @@ export class BotPluginSystem {
87
87
  const instance = record.ctor.create(this.api, this.client, record.meta);
88
88
  await instance.load();
89
89
  this.instances.set(name, instance);
90
- new BotConsole('system', `插件 "${record.meta.name}" 已加载`).log();
90
+ new BotConsole('plugin', { name: record.meta.name, msg: '已加载' }).log();
91
91
  }
92
92
  /**
93
93
  * 卸载插件
@@ -100,7 +100,7 @@ export class BotPluginSystem {
100
100
  }
101
101
  await instance.unload();
102
102
  this.instances.delete(name);
103
- new BotConsole('system', `插件 "${name}" 已卸载`).log();
103
+ new BotConsole('plugin', { name: this.registry.get(name)?.meta.name || name, msg: '已卸载' }).log();
104
104
  }
105
105
  /**
106
106
  * 热重载:先卸载再加载
@@ -122,6 +122,15 @@ export class BotPluginSystem {
122
122
  loaded() {
123
123
  return Array.from(this.instances.keys());
124
124
  }
125
+ findIndex(dir, name) {
126
+ const js = path.join(dir, name, 'index.js');
127
+ if (fs.existsSync(js))
128
+ return js;
129
+ const ts = path.join(dir, name, 'index.ts');
130
+ if (fs.existsSync(ts))
131
+ return ts;
132
+ return null;
133
+ }
125
134
  /**
126
135
  * 扫描目录,自动注册并加载所有插件
127
136
  * @param dir - 插件目录路径
@@ -137,8 +146,8 @@ export class BotPluginSystem {
137
146
  if (!entry.isDirectory())
138
147
  continue;
139
148
  const name = entry.name;
140
- const indexPath = path.join(dir, name, 'index.ts');
141
- if (!fs.existsSync(indexPath))
149
+ const indexPath = this.findIndex(dir, name);
150
+ if (!indexPath)
142
151
  continue;
143
152
  try {
144
153
  const mod = await import(path.resolve(indexPath));
@@ -179,7 +188,7 @@ export class BotPluginSystem {
179
188
  return;
180
189
  }
181
190
  this.watched = new Set(this.list());
182
- new BotConsole('system', `开始监听插件目录: ${this.watchDir}`).log();
191
+ new BotConsole('plugin', { name: 'watch', msg: `开始监听 ${this.watchDir}` }).log();
183
192
  this.watcher = setInterval(async () => {
184
193
  if (!fs.existsSync(this.watchDir))
185
194
  return;
@@ -189,8 +198,8 @@ export class BotPluginSystem {
189
198
  if (!entry.isDirectory())
190
199
  continue;
191
200
  const name = entry.name;
192
- const indexPath = path.join(this.watchDir, name, 'index.ts');
193
- if (!fs.existsSync(indexPath))
201
+ const indexPath = this.findIndex(this.watchDir, name);
202
+ if (!indexPath)
194
203
  continue;
195
204
  current.add(name);
196
205
  if (!this.watched.has(name)) {
@@ -199,12 +208,13 @@ export class BotPluginSystem {
199
208
  }
200
209
  for (const name of Array.from(this.watched)) {
201
210
  if (!current.has(name) && this.registry.has(name)) {
211
+ const displayName = this.registry.get(name)?.meta.name || name;
202
212
  try {
203
213
  if (this.instances.has(name)) {
204
214
  await this.unload(name);
205
215
  }
206
216
  this.registry.delete(name);
207
- new BotConsole('system', `插件 "${name}" 目录已删除,已移除`).log();
217
+ new BotConsole('plugin', { name: displayName, msg: '目录已删除,已移除' }).log();
208
218
  }
209
219
  catch { }
210
220
  }
@@ -218,11 +228,13 @@ export class BotPluginSystem {
218
228
  clearInterval(this.watcher);
219
229
  this.watcher = null;
220
230
  this.watchDir = null;
221
- new BotConsole('system', '已停止插件目录监听').log();
231
+ new BotConsole('plugin', { name: 'watch', msg: '已停止' }).log();
222
232
  }
223
233
  }
224
234
  async scanOne(dir, name) {
225
- const indexPath = path.join(dir, name, 'index.ts');
235
+ const indexPath = this.findIndex(dir, name);
236
+ if (!indexPath)
237
+ return;
226
238
  try {
227
239
  const mod = await import(indexPath);
228
240
  const ctor = mod[name.charAt(0).toUpperCase() + name.slice(1) + 'Plugin'] || mod.default || Object.values(mod).find((v) => typeof v === 'function' && v.create);
@@ -234,7 +246,7 @@ export class BotPluginSystem {
234
246
  };
235
247
  this.register(name, ctor, meta);
236
248
  await this.load(name);
237
- new BotConsole('system', `检测到新插件 "${name}",已自动加载`).log();
249
+ new BotConsole('plugin', { name: meta.name, msg: '已自动加载' }).log();
238
250
  }
239
251
  catch (e) {
240
252
  new BotConsole('error', `自动加载插件 "${name}" 失败: ${e.message || e}`).log();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hotcat-bot-qq",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "基于 node-napcat-ts 的 TypeScript QQ 机器人框架",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -7,7 +7,7 @@ import * as os from 'os'
7
7
  export class HotCatPlugin extends PluginBase {
8
8
  static meta = {
9
9
  name: 'hotCatPlugin',
10
- version: '0.1.4',
10
+ version: '0.1.6',
11
11
  description: 'HotCat 默认插件(#hotCat 指令查询 bot 状态)',
12
12
  author: 'CHCAT1320',
13
13
  }
@@ -20,14 +20,14 @@ export class HotCatPlugin extends PluginBase {
20
20
 
21
21
  async load() {
22
22
  this.startTime = Date.now()
23
- this.api.napcat.on('message.group', this.onGroupMsg)
23
+ this.bot.event.message.onGroupMessage(this.onGroupMsg)
24
24
  }
25
25
 
26
26
  async unload() {
27
- this.api.napcat.off('message.group', this.onGroupMsg)
27
+ this.bot.event.message.offGroupMessage(this.onGroupMsg)
28
28
  }
29
29
 
30
- private onGroupMsg = async (event: any) => {
30
+ private onGroupMsg = async (_bot: BotClient, event: any) => {
31
31
  const msg = event.raw_message.trim()
32
32
 
33
33
  if (msg === '#hotCat' || msg === '#hotcat') {