mirai-js 2.2.0 → 2.4.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.
Files changed (122) hide show
  1. package/.github/FUNDING.yml +1 -1
  2. package/README.md +17 -283
  3. package/demo.html +1 -1
  4. package/demo.js +13 -71
  5. package/dist/browser/mirai-js.js +1 -1
  6. package/dist/node/BaseType.d.ts +5 -2
  7. package/dist/node/Bot.d.ts +95 -8
  8. package/dist/node/Bot.js +233 -10
  9. package/dist/node/FileManager.js +15 -6
  10. package/dist/node/core/anno/deleteAnno.js +67 -0
  11. package/dist/node/core/anno/getAnno.js +70 -0
  12. package/dist/node/core/anno/publishAnno.js +70 -0
  13. package/dist/node/core/auth.js +9 -11
  14. package/dist/node/core/fs/deleteGroupFile.js +71 -0
  15. package/dist/node/core/fs/getGroupFileInfo.js +77 -0
  16. package/dist/node/core/fs/getGroupFileList.js +82 -0
  17. package/dist/node/core/fs/makeGroupDir.js +73 -0
  18. package/dist/node/core/fs/moveGroupFile.js +77 -0
  19. package/dist/node/core/fs/renameGroupFile.js +73 -0
  20. package/dist/node/core/fs/uploadGroupFIle.js +81 -0
  21. package/dist/node/core/getFriendList.js +9 -11
  22. package/dist/node/core/getGroupConfig.js +9 -11
  23. package/dist/node/core/getGroupFileInfo.js +6 -2
  24. package/dist/node/core/getGroupFileList.js +6 -2
  25. package/dist/node/core/getGroupList.js +9 -11
  26. package/dist/node/core/getMemberInfo.js +13 -19
  27. package/dist/node/core/getMemberList.js +9 -11
  28. package/dist/node/core/getSessionConfig.js +9 -11
  29. package/dist/node/core/getUserProfile.js +78 -0
  30. package/dist/node/core/groupFileDelete.js +6 -2
  31. package/dist/node/core/groupFileMove.js +6 -2
  32. package/dist/node/core/groupFileRename.js +6 -2
  33. package/dist/node/core/mute.js +9 -11
  34. package/dist/node/core/muteAll.js +9 -11
  35. package/dist/node/core/quitGroup.js +9 -11
  36. package/dist/node/core/recall.js +9 -11
  37. package/dist/node/core/releaseSession.js +10 -11
  38. package/dist/node/core/removeFriend.js +64 -0
  39. package/dist/node/core/removeMember.js +9 -11
  40. package/dist/node/core/responseBotInvitedJoinGroupRequest.js +9 -11
  41. package/dist/node/core/responseFirendRequest.js +9 -11
  42. package/dist/node/core/responseMemberJoinRequest.js +9 -11
  43. package/dist/node/core/sendCommand.js +9 -11
  44. package/dist/node/core/sendFirendMessage.js +9 -11
  45. package/dist/node/core/sendGroupMessage.js +9 -11
  46. package/dist/node/core/sendNudge.js +9 -11
  47. package/dist/node/core/sendTempMessage.js +9 -11
  48. package/dist/node/core/setEssence.js +9 -11
  49. package/dist/node/core/setGroupConfig.js +9 -11
  50. package/dist/node/core/setMemberAdmin.js +70 -0
  51. package/dist/node/core/setMemberInfo.js +9 -11
  52. package/dist/node/core/setSessionConfig.js +9 -11
  53. package/dist/node/core/startListeningBrowser.js +8 -9
  54. package/dist/node/core/startListeningNode.js +8 -10
  55. package/dist/node/core/stopListeningBrowser.js +5 -1
  56. package/dist/node/core/stopListeningNode.js +5 -1
  57. package/dist/node/core/unmute.js +9 -11
  58. package/dist/node/core/unmuteAll.js +9 -11
  59. package/dist/node/core/uploadFileAndSend.js +6 -1
  60. package/dist/node/core/uploadImage.js +9 -10
  61. package/dist/node/core/uploadVoice.js +9 -10
  62. package/dist/node/core/verify.js +9 -11
  63. package/dist/node/polyfill/URL.js +5 -0
  64. package/dist/node/polyfill/wsListener.js +6 -0
  65. package/package.json +2 -2
  66. package/src/BaseType.d.ts +5 -2
  67. package/src/Bot.d.ts +95 -8
  68. package/src/Bot.js +154 -9
  69. package/src/FileManager.js +10 -6
  70. package/src/core/anno/deleteAnno.js +42 -0
  71. package/src/core/anno/getAnno.js +43 -0
  72. package/src/core/anno/publishAnno.js +43 -0
  73. package/src/core/auth.js +5 -7
  74. package/src/core/fs/deleteGroupFile.js +44 -0
  75. package/src/core/fs/getGroupFileInfo.js +45 -0
  76. package/src/core/fs/getGroupFileList.js +46 -0
  77. package/src/core/fs/makeGroupDir.js +44 -0
  78. package/src/core/fs/moveGroupFile.js +46 -0
  79. package/src/core/{groupFileRename.js → fs/renameGroupFile.js} +11 -13
  80. package/src/core/{uploadFileAndSend.js → fs/uploadGroupFIle.js} +9 -11
  81. package/src/core/getFriendList.js +5 -7
  82. package/src/core/getGroupConfig.js +5 -7
  83. package/src/core/getGroupList.js +5 -7
  84. package/src/core/getMemberInfo.js +8 -10
  85. package/src/core/getMemberList.js +5 -7
  86. package/src/core/getSessionConfig.js +5 -7
  87. package/src/core/getUserProfile.js +39 -0
  88. package/src/core/mute.js +5 -7
  89. package/src/core/muteAll.js +5 -7
  90. package/src/core/quitGroup.js +5 -7
  91. package/src/core/recall.js +5 -7
  92. package/src/core/releaseSession.js +6 -7
  93. package/src/core/{groupFileDelete.js → removeFriend.js} +11 -17
  94. package/src/core/removeMember.js +5 -7
  95. package/src/core/responseBotInvitedJoinGroupRequest.js +5 -7
  96. package/src/core/responseFirendRequest.js +5 -7
  97. package/src/core/responseMemberJoinRequest.js +5 -7
  98. package/src/core/sendCommand.js +5 -7
  99. package/src/core/sendFirendMessage.js +5 -7
  100. package/src/core/sendGroupMessage.js +5 -7
  101. package/src/core/sendNudge.js +5 -7
  102. package/src/core/sendTempMessage.js +5 -7
  103. package/src/core/setEssence.js +5 -7
  104. package/src/core/setGroupConfig.js +5 -7
  105. package/src/core/setMemberAdmin.js +43 -0
  106. package/src/core/setMemberInfo.js +5 -7
  107. package/src/core/setSessionConfig.js +5 -7
  108. package/src/core/startListeningBrowser.js +4 -6
  109. package/src/core/startListeningNode.js +4 -6
  110. package/src/core/stopListeningBrowser.js +3 -0
  111. package/src/core/stopListeningNode.js +3 -0
  112. package/src/core/unmute.js +5 -7
  113. package/src/core/unmuteAll.js +5 -7
  114. package/src/core/uploadImage.js +5 -7
  115. package/src/core/uploadVoice.js +5 -7
  116. package/src/core/verify.js +5 -7
  117. package/src/polyfill/URL.js +3 -0
  118. package/src/polyfill/wsListener.js +4 -0
  119. package/webpack.config.js +4 -0
  120. package/src/core/getGroupFileInfo.js +0 -44
  121. package/src/core/getGroupFileList.js +0 -40
  122. package/src/core/groupFileMove.js +0 -46
@@ -9,4 +9,4 @@ community_bridge: # Replace with a single Community Bridge project-name e.g., cl
9
9
  liberapay: # Replace with a single Liberapay username
10
10
  issuehunt: # Replace with a single IssueHunt username
11
11
  otechie: # Replace with a single Otechie username
12
- custom: ['http://gaolihai.cool/']
12
+ custom: ['http://codingfor.life/']
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.html CHANGED
@@ -9,7 +9,7 @@
9
9
  </head>
10
10
 
11
11
  <body>
12
- <script src="./dist/mirai-js.js"></script>
12
+ <script src="./dist/browser/mirai-js.js"></script>
13
13
  <div></div>
14
14
 
15
15
  <script>
package/demo.js CHANGED
@@ -1,4 +1,4 @@
1
- const { Bot, Message, Middleware } = require('./src');
1
+ const { Bot, Message } = require('./src');
2
2
 
3
3
  (async () => {
4
4
  try {
@@ -19,77 +19,19 @@ const { Bot, Message, Middleware } = require('./src');
19
19
  verifyKey,
20
20
  });
21
21
 
22
- // 监听好友消息事件
23
- // bot.on('FriendMessage', async ({
24
- // messageChain,
25
- // sender: {
26
- // id: fromQQ,
27
- // nickname: fromQQNickName,
28
- // remark
29
- // }
30
- // }) => {
31
- // console.log({ fromQQ, fromQQNickName, remark });
32
- // const { id: messageId } = messageChain[0];
33
-
34
- // bot.sendMessage({
35
- // friend: fromQQ,
36
- // quote: messageId,
37
- // message: new Message().addText('hello world!'),
38
- // });
39
- // });
40
-
41
- bot.on('GroupMessage',
42
- new Middleware()
43
- // 保证连续对话未处理完成时不会多次触发
44
- .friendLock({ autoUnlock: true })
45
- .syncWrapper()
46
- .done(async ({ waitFor, bot, sender, sender: { group: { id: group } }, }) => {
47
- await bot.sendMessage({
48
- group,
49
- message: new Message().addPlain(`请输入随机数上限 ${sender.id}`),
50
- });
51
- // 等待下一次输入
52
- const max = Number.parseInt(await waitFor.groupMember().text());
53
- await bot.sendMessage({
54
- group,
55
- message: new Message().addPlain(Math.floor(Math.random() * (max + 1))),
56
- });
57
- })
58
- );
59
-
60
-
61
-
62
- // 使用中间件
63
- // 过滤分类 message
64
- // bot.on('GroupMessage', new Middleware()
65
- // .messageProcessor(['Plain', 'Image'])
66
- // .textProcessor().done(({
67
- // // 第一个中间件,分类过的 messageChain
68
- // classified,
69
- // // 第二个中间件,文本部分
70
- // text,
71
-
72
- // messageChain,
73
- // sender: {
74
- // id: fromQQ,
75
- // nickname: fromQQNickName,
76
- // remark
77
- // }
78
- // }) => {
79
- // console.log({ fromQQ, fromQQNickName, remark, messageChain, classified, text });
80
-
81
- // bot.sendMessage({
82
- // friend: fromQQ,
83
- // message: new Message().addText(text),
84
- // });
85
- // }));
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 里的记录')
32
+ });
86
33
 
87
- // 自动重新登陆
88
- bot.on('BotOfflineEventForce',
89
- new Middleware()
90
- .autoReLogin({ password: 'your password' })
91
- .done()
92
- );
34
+ bot.close();
93
35
  } catch (err) {
94
36
  console.log(err);
95
37
  }