mirai-js 2.3.0 → 2.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. package/README.md +17 -283
  2. package/demo.js +13 -17
  3. package/dist/browser/mirai-js.js +1 -1
  4. package/dist/node/BaseType.d.ts +5 -2
  5. package/dist/node/Bot.d.ts +79 -4
  6. package/dist/node/Bot.js +171 -4
  7. package/dist/node/Middleware.js +1 -1
  8. package/dist/node/core/anno/deleteAnno.js +67 -0
  9. package/dist/node/core/anno/getAnno.js +70 -0
  10. package/dist/node/core/anno/publishAnno.js +70 -0
  11. package/dist/node/core/auth.js +3 -9
  12. package/dist/node/core/fs/deleteGroupFile.js +3 -9
  13. package/dist/node/core/fs/getGroupFileInfo.js +3 -9
  14. package/dist/node/core/fs/getGroupFileList.js +3 -9
  15. package/dist/node/core/fs/makeGroupDir.js +3 -9
  16. package/dist/node/core/fs/moveGroupFile.js +3 -9
  17. package/dist/node/core/fs/renameGroupFile.js +3 -9
  18. package/dist/node/core/fs/uploadGroupFIle.js +3 -9
  19. package/dist/node/core/getFriendList.js +3 -9
  20. package/dist/node/core/getGroupConfig.js +3 -9
  21. package/dist/node/core/getGroupList.js +3 -9
  22. package/dist/node/core/getMemberInfo.js +7 -17
  23. package/dist/node/core/getMemberList.js +3 -9
  24. package/dist/node/core/getSessionConfig.js +3 -9
  25. package/dist/node/core/getUserProfile.js +78 -0
  26. package/dist/node/core/mute.js +3 -9
  27. package/dist/node/core/muteAll.js +3 -9
  28. package/dist/node/core/quitGroup.js +3 -9
  29. package/dist/node/core/recall.js +3 -9
  30. package/dist/node/core/releaseSession.js +3 -9
  31. package/dist/node/core/removeFriend.js +3 -9
  32. package/dist/node/core/removeMember.js +3 -9
  33. package/dist/node/core/responseBotInvitedJoinGroupRequest.js +3 -9
  34. package/dist/node/core/responseFirendRequest.js +3 -9
  35. package/dist/node/core/responseMemberJoinRequest.js +3 -9
  36. package/dist/node/core/sendCommand.js +3 -9
  37. package/dist/node/core/sendFirendMessage.js +3 -9
  38. package/dist/node/core/sendGroupMessage.js +3 -9
  39. package/dist/node/core/sendNudge.js +3 -9
  40. package/dist/node/core/sendTempMessage.js +3 -9
  41. package/dist/node/core/setEssence.js +3 -9
  42. package/dist/node/core/setGroupConfig.js +3 -9
  43. package/dist/node/core/setMemberAdmin.js +3 -9
  44. package/dist/node/core/setMemberInfo.js +3 -9
  45. package/dist/node/core/setSessionConfig.js +3 -9
  46. package/dist/node/core/startListeningBrowser.js +3 -8
  47. package/dist/node/core/startListeningNode.js +3 -9
  48. package/dist/node/core/unmute.js +3 -9
  49. package/dist/node/core/unmuteAll.js +3 -9
  50. package/dist/node/core/uploadImage.js +3 -9
  51. package/dist/node/core/uploadVoice.js +3 -9
  52. package/dist/node/core/verify.js +3 -9
  53. package/dist/node/polyfill/URL.js +5 -0
  54. package/dist/node/polyfill/wsListener.js +6 -0
  55. package/package.json +1 -1
  56. package/src/BaseType.d.ts +5 -2
  57. package/src/Bot.d.ts +79 -4
  58. package/src/Bot.js +107 -3
  59. package/src/Middleware.js +1 -1
  60. package/src/core/anno/deleteAnno.js +42 -0
  61. package/src/core/anno/getAnno.js +43 -0
  62. package/src/core/anno/publishAnno.js +43 -0
  63. package/src/core/auth.js +1 -6
  64. package/src/core/fs/deleteGroupFile.js +1 -6
  65. package/src/core/fs/getGroupFileInfo.js +1 -6
  66. package/src/core/fs/getGroupFileList.js +1 -6
  67. package/src/core/fs/makeGroupDir.js +1 -6
  68. package/src/core/fs/moveGroupFile.js +1 -6
  69. package/src/core/fs/renameGroupFile.js +1 -6
  70. package/src/core/fs/uploadGroupFIle.js +1 -6
  71. package/src/core/getFriendList.js +1 -6
  72. package/src/core/getGroupConfig.js +1 -6
  73. package/src/core/getGroupList.js +1 -6
  74. package/src/core/getMemberInfo.js +4 -9
  75. package/src/core/getMemberList.js +1 -6
  76. package/src/core/getSessionConfig.js +1 -6
  77. package/src/core/getUserProfile.js +39 -0
  78. package/src/core/mute.js +1 -6
  79. package/src/core/muteAll.js +1 -6
  80. package/src/core/quitGroup.js +1 -6
  81. package/src/core/recall.js +1 -6
  82. package/src/core/releaseSession.js +1 -6
  83. package/src/core/removeFriend.js +1 -6
  84. package/src/core/removeMember.js +1 -6
  85. package/src/core/responseBotInvitedJoinGroupRequest.js +1 -6
  86. package/src/core/responseFirendRequest.js +1 -6
  87. package/src/core/responseMemberJoinRequest.js +1 -6
  88. package/src/core/sendCommand.js +1 -6
  89. package/src/core/sendFirendMessage.js +1 -6
  90. package/src/core/sendGroupMessage.js +1 -6
  91. package/src/core/sendNudge.js +1 -6
  92. package/src/core/sendTempMessage.js +1 -6
  93. package/src/core/setEssence.js +1 -6
  94. package/src/core/setGroupConfig.js +1 -6
  95. package/src/core/setMemberAdmin.js +1 -6
  96. package/src/core/setMemberInfo.js +1 -6
  97. package/src/core/setSessionConfig.js +1 -6
  98. package/src/core/startListeningBrowser.js +1 -6
  99. package/src/core/startListeningNode.js +1 -6
  100. package/src/core/unmute.js +1 -6
  101. package/src/core/unmuteAll.js +1 -6
  102. package/src/core/uploadImage.js +1 -6
  103. package/src/core/uploadVoice.js +1 -6
  104. package/src/core/verify.js +1 -6
  105. package/src/polyfill/URL.js +3 -0
  106. package/src/polyfill/wsListener.js +4 -0
package/README.md CHANGED
@@ -1,16 +1,21 @@
1
1
  # Mirai-js
2
2
 
3
3
  [![CodeFactor](https://www.codefactor.io/repository/github/drincann/mirai-js/badge)](https://www.codefactor.io/repository/github/drincann/mirai-js)
4
+ [![HitCount](https://hits.dwyl.com/drincann/drincann/Mirai-js.svg?style=flat-square)](http://hits.dwyl.com/drincann/drincann/Mirai-js)
4
5
 
5
6
  Mirai-js,一个运行在 Node.js、浏览器下的,简单的 QQ 机器人开发框架。
6
7
 
8
+ 使用一目了然的异步 api,以及强大的中间件机制来实现你的应用。
9
+
7
10
  ```js
8
- bot.on('FriendMessage', async data => {
9
- await bot.sendMessage({
10
- friend: data.sender.id,
11
- message: new Message().addText('hello world!'),
12
- });
13
- });
11
+ bot.on('FriendMessage', new Middleware().friendFilter([ 1019933576 ])
12
+ .done(async data => {
13
+ await bot.sendMessage({
14
+ friend: data.sender.id,
15
+ message: new Message().addText('hello world!'),
16
+ });
17
+ })
18
+ );
14
19
  ```
15
20
 
16
21
  开发文档:
@@ -22,290 +27,19 @@ QQ 群: 730757181
22
27
 
23
28
  如果觉得这个项目还不错的话,就动动小手给个 star 吧!
24
29
 
25
- ### Star
30
+ ## Star
26
31
 
27
32
  [![Stargazers repo roster for @Drincann/Mirai-js](https://reporoster.com/stars/Drincann/Mirai-js)](https://github.com/Drincann/Mirai-js/stargazers)
28
33
 
29
- ### Fork
34
+ ## Fork
30
35
 
31
36
  [![Forkers repo roster for @Drincann/Mirai-js](https://reporoster.com/forks/Drincann/Mirai-js)](https://github.com/Drincann/Mirai-js/network/members)
32
37
 
33
- # 快速开始
34
-
35
- ## 加载依赖
36
-
37
- ### Node.js
38
-
39
- 从 `npm` 安装:
40
-
41
- ```bash
42
- npm install mirai-js
43
- ```
44
-
45
- 然后从 `mirai-js` 解构:
46
-
47
- ```js
48
- const { Bot, Message } = require('mirai-js');
49
- ```
50
-
51
- ### 浏览器
52
-
53
- 使用 cdn:
54
-
55
- ```html
56
- <script src="https://cdn.jsdelivr.net/npm/mirai-js/dist/browser/mirai-js.js"></script>
57
- ```
58
-
59
- 然后从 `window.miraiJs` 解构:
60
-
61
- ```js
62
- const { Bot, Message } = window.miraiJs;
63
- ```
64
-
65
- ## 登录
66
-
67
- !> 警告,不应将 `verifyKey`、`password` 暴露在可被公共访问的网络资源上
68
-
69
- 可以直接在 **mirai-console** 中输入`/login qq password`。
70
-
71
- 若想要远程控制 **mirai-console** 登录,可通过 `Bot` 的类方法`sendCommend`发送命令:
72
-
73
- ```js
74
- await Bot.sendCommand({
75
- // mirai-api-http 服务的网络位置
76
- baseUrl: 'http://example.com:8080',
77
- // 在 mirai-api-http 的配置中设置的 verifyKey
78
- verifyKey: 'verifyKey',
79
- // 指令名
80
- command: '/login',
81
- // 指令参数列表,这条指令等价于 /login 1019933576 password
82
- args: ['1019933576', 'password'],
83
- });
84
- ```
85
-
86
- 注意该方法的返回值,已知的问题:
87
-
88
- > 'Login failed: Mirai 无法完成滑块验证. 使用协议 ANDROID_PHONE 强制要求滑块验证, 请更换协议后重试. 另请参阅: <https://github.com/project-mirai/mirai-login-solver-selenium>'
89
-
90
- > 不要重复登录!
91
-
92
- ## 建立连接
93
-
94
- 获得一个`Bot`实例,然后在实例上调用`open`方法连接到你的 **mirai-api-http** 服务:
95
-
96
- ```js
97
- const bot = new Bot();
38
+ ## 感谢
98
39
 
99
- // 连接到一个 mirai-api-http 服务
100
- await bot.open({
101
- baseUrl: 'http://example.com:8080',
102
- verifyKey: 'verifyKey',
103
- // 要绑定的 qq,须确保该用户已在 mirai-console 登录
104
- qq: 1019933576,
105
- });
106
- ```
107
-
108
- > 重复调用 `open` 方法将重建连接,需要重建连接时,可以传入想要修改的参数。
109
- >
110
- > 若未提供任何参数,将保持原先的配置。
111
-
112
- ## 发送消息
113
-
114
- 向好友发送消息:
115
-
116
- ```js
117
- await bot.sendMessage({
118
- // 好友 qq 号
119
- friend: '1019933576',
120
- // Message 实例,表示一条消息
121
- message: new Message().addText('hello world!').addImageUrl('http://exapmle/image.jpg'),
122
- });
123
- ```
40
+ [<img width="200" src="https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.png"></img>](https://www.jetbrains.com/community/opensource/#support)
124
41
 
125
- > 注意!这些方法都是异步的
126
-
127
- 还可以使用 **mirai-api-http** 接口所需的原始格式来作为 message。
128
-
129
- 向群组发送消息:
130
-
131
- ```js
132
- await bot.sendMessage({
133
- // 群号
134
- group: '123456789',
135
- // 是 http server 接口所需的原始格式,若提供则优先使用
136
- message: [
137
- { type: 'Plain', text: 'hello world!'},
138
- { type: 'Image', url:;'http://example/image.jpg'},
139
- ],
140
- });
141
- ```
142
-
143
- 具体的`MessageChain`的消息类型见 [MessageType](https://github.com/project-mirai/mirai-api-http/blob/master/docs/MessageType.md)。
144
-
145
- ## 接收消息和事件
146
-
147
- 注册事件处理器,接收好友消息:
148
-
149
- ```js
150
- // 监听好友消息事件
151
- bot.on('FriendMessage', async data => {
152
- await bot.sendMessage({
153
- friend: data.sender.id,
154
- message: new Message().addText('hello world!'),
155
- });
156
- });
157
- ```
158
-
159
- FriendMessage 事件的消息结构:
160
-
161
- ```json
162
- {
163
- messageChain,
164
- sender: {
165
- id,
166
- nickname,
167
- remark
168
- }
169
- }
170
- ```
171
42
 
172
- > 框架以原始的 messageChain 的方式给出具体的消息内容,其结构是一个 MessageType 数组,各种 MessageType 见 **[MessageType](https://github.com/project-mirai/mirai-api-http/blob/master/docs/MessageType.md)**
173
- >
174
- > 不想看没关系,如果你仅关注文本消息,那么我们可以使用框架预定义的中间件轻松解决这个问题。
43
+ > [JetBrains](https://www.jetbrains.com/community/opensource/#support) 一直致力于创造强大、高效的开发工具。
175
44
 
176
- 接收群消息:
177
-
178
- ```js
179
- // 监听群消息事件
180
- bot.on('GroupMessage', async data => {
181
- await bot.sendMessage({
182
- group: data.sender.group.id,
183
- message: new Message().addText('hello world!'),
184
- });
185
-
186
- // 你可以像这样来判断群成员的权限
187
- switch (data.sender.permission) {
188
- case Bot.groupPermission.OWNER:
189
- // 群主
190
- break;
191
- case Bot.groupPermission.ADMINISTRATOR:
192
- // 管理员
193
- break;
194
- case Bot.groupPermission.MEMBER:
195
- // 普通群成员
196
- break;
197
- }
198
- });
199
- ```
200
-
201
- GroupMessage 事件的消息结构:
202
-
203
- ```json
204
- {
205
- messageChain,
206
- sender: {
207
- id,
208
- memberName,
209
- permission,
210
- group: {
211
- id,
212
- name,
213
- permission
214
- }
215
- }
216
- }
217
- ```
218
-
219
- 具体的事件类型及消息结构见 [EventType](https://github.com/project-mirai/mirai-api-http/blob/master/docs/EventType.md)。
220
-
221
- ## 使用中间件
222
-
223
- 框架还提供了一系列预定义的用于处理消息的中间件:
224
-
225
- Node.js:
226
-
227
- ```js
228
- const { Middleware } = require('mirai-js');
229
- ```
230
-
231
- 浏览器端:
232
-
233
- ```js
234
- const { Middleware } = window.miraiJs;
235
- ```
236
-
237
- 获得一个 `Middleware` 的实例:
238
-
239
- ```js
240
- const middleware = new Middleware();
241
- ```
242
-
243
- 在实例上(链式)调用你需要的中间件:
244
-
245
- `textProcessor`用于拼接`messageChain`所有的文本信息,并置于`data.text`,`groupFilter`则是过滤出指定群号的群消息事件。
246
-
247
- ```js
248
- middleware.textProcessor().groupFilter([123456789, 987654321]);
249
- ```
250
-
251
- 通过调用 `done` 方法, 传入你的事件处理器,获得一个带有中间件的事件处理器:
252
-
253
- ```js
254
- const processor = middleware.done(async data => {
255
- bot.sendMessage({
256
- friend: data.sender.id,
257
- message: new Message().addText(data.text),
258
- });
259
- });
260
- ```
261
-
262
- 注册到一个事件上:
263
-
264
- ```js
265
- bot.on('FriendMessage', processor);
266
- ```
267
-
268
- 也可以组合在一起:
269
-
270
- ```js
271
- bot.on('FriendMessage', new Middleware()
272
- .textProcessor()
273
- .groupFilter([123456789, 987654321])
274
- .done(async data => {
275
- bot.sendMessage({
276
- friend: data.sender.id,
277
- message: new Message().addText(data.text),
278
- });
279
- })
280
- );
281
- ```
282
-
283
- 此外,你也可以自定义中间件,使用 `use`:
284
-
285
- 最后调用 `next` 将控制权移交给下一个中间件。
286
-
287
- ```js
288
- const processor = middleware.use((data, next) => {
289
- data.text = data.messageChain
290
- .filter((val) => val.type == 'Plain')
291
- .map((val) => val.text)
292
- .join('');
293
- next();
294
- }).done(/* callback */);
295
- ```
296
-
297
- ## 已知的问题
298
-
299
- 当我们的机器人下线并重新登陆后,当前会话会陷入一种未失效但无法操作的状态,强行操作(例如发送消息)将抛出服务端异常(status 500)。
300
-
301
- 重新登陆后再次调用`open`方法可以避免这个问题。
302
-
303
- 或者在需要重新登陆的事件下使用预定义的`autoReLogin`中间件,将会在掉线后自动登陆,例子:
304
-
305
- ```js
306
- bot.on('BotOfflineEventForce',
307
- new Middleware()
308
- .autoReLogin({ bot, baseUrl, verifyKey, password })
309
- .done()
310
- );
311
- ```
45
+ 感谢 [JetBrains](https://www.jetbrains.com/community/opensource/#support) 对该项目支持的开源开发许可证。
package/demo.js CHANGED
@@ -1,4 +1,5 @@
1
1
  const { Bot, Message } = require('./src');
2
+
2
3
  (async () => {
3
4
  try {
4
5
  const baseUrl = 'http://127.0.0.1:8080';
@@ -17,25 +18,20 @@ const { Bot, Message } = require('./src');
17
18
  // verifyKey 用于验证连接者的身份,在插件配置文件中设置
18
19
  verifyKey,
19
20
  });
20
- await bot.setMemberInfo({ group: 829153782, qq: 1019933576, permission: '' });
21
- // 监听好友消息事件
22
- bot.on('FriendMessage', async ({
23
- messageChain,
24
- sender: {
25
- id: fromQQ,
26
- nickname: fromQQNickName,
27
- remark
28
- }
29
- }) => {
30
- console.log({ fromQQ, fromQQNickName, remark });
31
- const { id: messageId } = messageChain[0];
32
21
 
33
- bot.sendMessage({
34
- friend: fromQQ,
35
- quote: messageId,
36
- message: new Message().addText('hello world!'),
37
- });
22
+ // await bot.setMemberInfo({ group: 829153782, qq: 1019933576, permission: Bot.groupPermission.ADMINISTRATOR });
23
+ // await bot.publishAnno({ group: 829153782, content: 'hello world', pinned: true });
24
+ // console.log(bot.getAnnoIter({ group: 829153782 }));
25
+ // for await (const anno of bot.getAnnoIter({ group: 829153783 })) {
26
+ // console.log(anno);
27
+ // await bot.deleteAnno({ group: 829153783, fid: anno.fid });
28
+ // }
29
+ await bot.sendMessage({
30
+ group: 960874071,
31
+ message: new Message().addText('在维护框架, 测试的时候看到 console 里的记录')
38
32
  });
33
+
34
+ bot.close();
39
35
  } catch (err) {
40
36
  console.log(err);
41
37
  }