mirai-js 2.8.4 → 2.8.5
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +2 -0
- package/dist/browser/mirai-js.js +1 -1
- package/dist/node/borwserEntry.js +21 -0
- package/dist/node/lib/index.ts +0 -0
- package/index.ts +36 -3
- package/package.json +1 -1
- package/src/borwserEntry.js +11 -0
- package/src/lib/index.ts +0 -0
- package/srcold/BaseType.d.ts +419 -0
- package/srcold/Bot.d.ts +567 -0
- package/srcold/Bot.js +1208 -0
- package/srcold/FileManager.js +270 -0
- package/srcold/Message.d.ts +66 -0
- package/srcold/Message.js +314 -0
- package/srcold/Middleware.d.ts +170 -0
- package/srcold/Middleware.js +657 -0
- package/srcold/Waiter.d.ts +13 -0
- package/srcold/Waiter.js +24 -0
- package/srcold/core/anno/deleteAnno.js +43 -0
- package/srcold/core/anno/getAnno.js +44 -0
- package/srcold/core/anno/publishAnno.js +44 -0
- package/srcold/core/auth.js +40 -0
- package/srcold/core/fs/deleteGroupFile.js +45 -0
- package/srcold/core/fs/getGroupFileInfo.js +46 -0
- package/srcold/core/fs/getGroupFileList.js +47 -0
- package/srcold/core/fs/makeGroupDir.js +45 -0
- package/srcold/core/fs/moveGroupFile.js +47 -0
- package/srcold/core/fs/renameGroupFile.js +44 -0
- package/srcold/core/fs/uploadGroupFIle.js +58 -0
- package/srcold/core/getFriendList.js +37 -0
- package/srcold/core/getGroupConfig.js +37 -0
- package/srcold/core/getGroupList.js +37 -0
- package/srcold/core/getMemberInfo.js +41 -0
- package/srcold/core/getMemberList.js +49 -0
- package/srcold/core/getSessionConfig.js +39 -0
- package/srcold/core/getUserProfile.js +40 -0
- package/srcold/core/messageFromId.js +40 -0
- package/srcold/core/mute.js +41 -0
- package/srcold/core/muteAll.js +39 -0
- package/srcold/core/quitGroup.js +40 -0
- package/srcold/core/recall.js +39 -0
- package/srcold/core/releaseSession.js +41 -0
- package/srcold/core/removeFriend.js +40 -0
- package/srcold/core/removeMember.js +42 -0
- package/srcold/core/responseBotInvitedJoinGroupRequest.js +46 -0
- package/srcold/core/responseFirendRequest.js +45 -0
- package/srcold/core/responseMemberJoinRequest.js +47 -0
- package/srcold/core/sendCommand.js +41 -0
- package/srcold/core/sendFriendMessage.js +43 -0
- package/srcold/core/sendGroupMessage.js +43 -0
- package/srcold/core/sendImageMessage.js +4 -0
- package/srcold/core/sendNudge.js +43 -0
- package/srcold/core/sendTempMessage.js +55 -0
- package/srcold/core/setEssence.js +44 -0
- package/srcold/core/setGroupConfig.js +58 -0
- package/srcold/core/setMemberAdmin.js +44 -0
- package/srcold/core/setMemberInfo.js +48 -0
- package/srcold/core/setSessionConfig.js +41 -0
- package/srcold/core/startListeningBrowser.js +62 -0
- package/srcold/core/startListeningNode.js +74 -0
- package/srcold/core/stopListeningBrowser.js +34 -0
- package/srcold/core/stopListeningNode.js +34 -0
- package/srcold/core/unmute.js +40 -0
- package/srcold/core/unmuteAll.js +39 -0
- package/srcold/core/uploadImage.js +55 -0
- package/srcold/core/uploadVoice.js +54 -0
- package/srcold/core/verify.js +41 -0
- package/srcold/index.d.ts +10 -0
- package/srcold/index.js +21 -0
- package/srcold/interface.js +20 -0
- package/srcold/polyfill/URL.js +5 -0
- package/srcold/polyfill/wsListener.js +6 -0
- package/srcold/typeHelpers.d.ts +2 -0
- package/srcold/util/errCode.js +23 -0
- package/srcold/util/errorHandler.js +24 -0
- package/srcold/util/getInvalidParamsString.js +12 -0
- package/srcold/util/isBrowserEnv.js +3 -0
- package/srcold/util/random.js +6 -0
- package/webpack.config.js +3 -2
@@ -0,0 +1,43 @@
|
|
1
|
+
const { errCodeMap } = require('../util/errCode');
|
2
|
+
const axios = require('axios').default;
|
3
|
+
const { URL } = require('../polyfill/URL');
|
4
|
+
const errorHandler = require('../util/errorHandler');
|
5
|
+
const path = require('path');
|
6
|
+
const { isBrowserEnv } = require('../util/isBrowserEnv');
|
7
|
+
const locationStr = !isBrowserEnv() ? `core.${path.basename(__filename, path.extname(__filename))}` : 'borwser';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @description 向 qq 好友发送消息
|
11
|
+
* @param {string} baseUrl mirai-api-http server 的地址
|
12
|
+
* @param {string} sessionKey 会话标识
|
13
|
+
* @param {number} target 目标好友 qq 号
|
14
|
+
* @param {number} quote 消息引用,使用发送时返回的 messageId
|
15
|
+
* @param {MessageType[]} messageChain 消息链,MessageType 数组
|
16
|
+
* @returns {Object} 结构 { message, code, messageId }
|
17
|
+
*/
|
18
|
+
module.exports = async ({ baseUrl, sessionKey, target, quote, messageChain }) => {
|
19
|
+
try {
|
20
|
+
// 拼接 url
|
21
|
+
const url = new URL('/sendFriendMessage', baseUrl).toString();
|
22
|
+
|
23
|
+
// 请求
|
24
|
+
const responseData = await axios.post(url, {
|
25
|
+
sessionKey, target, quote, messageChain
|
26
|
+
});
|
27
|
+
try {
|
28
|
+
var {
|
29
|
+
data: { msg: message, code, messageId }
|
30
|
+
} = responseData;
|
31
|
+
} catch (error) {
|
32
|
+
throw new Error(('请求返回格式出错,请检查 mirai-console'));
|
33
|
+
}
|
34
|
+
// 抛出 mirai 的异常,到 catch 中处理后再抛出
|
35
|
+
if (code in errCodeMap) {
|
36
|
+
throw new Error(message);
|
37
|
+
}
|
38
|
+
return messageId;
|
39
|
+
} catch (error) {
|
40
|
+
console.error(`mirai-js: error ${locationStr}`);
|
41
|
+
errorHandler(error);
|
42
|
+
}
|
43
|
+
};
|
@@ -0,0 +1,43 @@
|
|
1
|
+
const { errCodeMap } = require('../util/errCode');
|
2
|
+
const axios = require('axios').default;
|
3
|
+
const { URL } = require('../polyfill/URL');
|
4
|
+
const errorHandler = require('../util/errorHandler');
|
5
|
+
const path = require('path');
|
6
|
+
const { isBrowserEnv } = require('../util/isBrowserEnv');
|
7
|
+
const locationStr = !isBrowserEnv() ? `core.${path.basename(__filename, path.extname(__filename))}` : 'borwser';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @description 向 qq 群发送消息
|
11
|
+
* @param {string} baseUrl mirai-api-http server 的地址
|
12
|
+
* @param {string} sessionKey 会话标识
|
13
|
+
* @param {number} target 目标群号
|
14
|
+
* @param {number} quote 消息引用,使用发送时返回的 messageId
|
15
|
+
* @param {MessageType[]} messageChain 消息链,MessageType 数组
|
16
|
+
* @returns {Object} 结构 { message, code, messageId }
|
17
|
+
*/
|
18
|
+
module.exports = async ({ baseUrl, sessionKey, target, quote, messageChain }) => {
|
19
|
+
try {
|
20
|
+
// 拼接 url
|
21
|
+
const url = new URL('/sendGroupMessage', baseUrl).toString();
|
22
|
+
|
23
|
+
// 请求
|
24
|
+
const responseData = await axios.post(url, {
|
25
|
+
sessionKey, target, quote, messageChain
|
26
|
+
});
|
27
|
+
try {
|
28
|
+
var {
|
29
|
+
data: { msg: message, code, messageId }
|
30
|
+
} = responseData;
|
31
|
+
} catch (error) {
|
32
|
+
throw new Error(('请求返回格式出错,请检查 mirai-console'));
|
33
|
+
}
|
34
|
+
// 抛出 mirai 的异常,到 catch 中处理后再抛出
|
35
|
+
if (code in errCodeMap) {
|
36
|
+
throw new Error(message);
|
37
|
+
}
|
38
|
+
return messageId;
|
39
|
+
} catch (error) {
|
40
|
+
console.error(`mirai-js: error ${locationStr}`);
|
41
|
+
errorHandler(error);
|
42
|
+
}
|
43
|
+
};
|
@@ -0,0 +1,43 @@
|
|
1
|
+
const { errCodeMap } = require('../util/errCode');
|
2
|
+
const axios = require('axios').default;
|
3
|
+
const { URL } = require('../polyfill/URL');
|
4
|
+
const errorHandler = require('../util/errorHandler');
|
5
|
+
const path = require('path');
|
6
|
+
const { isBrowserEnv } = require('../util/isBrowserEnv');
|
7
|
+
const locationStr = !isBrowserEnv() ? `core.${path.basename(__filename, path.extname(__filename))}` : 'borwser';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @description 发送戳一戳消息
|
11
|
+
* @param {string} baseUrl mirai-api-http server 的地址
|
12
|
+
* @param {string} sessionKey 会话标识
|
13
|
+
* @param {number} target 戳一戳的目标
|
14
|
+
* @param {number} subject 戳一戳的上下文,群或好友
|
15
|
+
* @param {string} kind 上下文类型, 可选值 Friend, Group
|
16
|
+
* @returns {Object} 结构 { message, code, messageId }
|
17
|
+
*/
|
18
|
+
module.exports = async ({ baseUrl, sessionKey, target, subject, kind }) => {
|
19
|
+
try {
|
20
|
+
// 拼接 url
|
21
|
+
const url = new URL('/sendNudge', baseUrl).toString();
|
22
|
+
|
23
|
+
// 请求
|
24
|
+
const responseData = await axios.post(url, {
|
25
|
+
sessionKey, target, subject, kind
|
26
|
+
});
|
27
|
+
try {
|
28
|
+
var {
|
29
|
+
data: { msg: message, code }
|
30
|
+
} = responseData;
|
31
|
+
} catch (error) {
|
32
|
+
throw new Error(('请求返回格式出错,请检查 mirai-console'));
|
33
|
+
}
|
34
|
+
// 抛出 mirai 的异常,到 catch 中处理后再抛出
|
35
|
+
if (code in errCodeMap) {
|
36
|
+
throw new Error(message);
|
37
|
+
}
|
38
|
+
return { message, code };
|
39
|
+
} catch (error) {
|
40
|
+
console.error(`mirai-js: error ${locationStr}`);
|
41
|
+
errorHandler(error);
|
42
|
+
}
|
43
|
+
};
|
@@ -0,0 +1,55 @@
|
|
1
|
+
const { errCodeMap } = require('../util/errCode');
|
2
|
+
const axios = require('axios').default;
|
3
|
+
const { URL } = require('../polyfill/URL');
|
4
|
+
const errorHandler = require('../util/errorHandler');
|
5
|
+
const path = require('path');
|
6
|
+
const { isBrowserEnv } = require('../util/isBrowserEnv');
|
7
|
+
const locationStr = !isBrowserEnv() ? `core.${path.basename(__filename, path.extname(__filename))}` : 'borwser';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @description 向临时对象发送消息
|
11
|
+
* @param {string} baseUrl mirai-api-http server 的地址
|
12
|
+
* @param {string} sessionKey 会话标识
|
13
|
+
* @param {number} qq 目标 qq 号
|
14
|
+
* @param {number} group 目标群号
|
15
|
+
* @param {number} quote 消息引用,使用发送时返回的 messageId
|
16
|
+
* @param {MessageType[]} messageChain 消息链,MessageType 数组
|
17
|
+
* @returns {Object} 结构 { message, code, messageId }
|
18
|
+
*/
|
19
|
+
module.exports = async ({ baseUrl, sessionKey, qq, group, quote, messageChain }) => {
|
20
|
+
try {
|
21
|
+
// 拼接 url
|
22
|
+
const url = new URL('/sendTempMessage', baseUrl).toString();
|
23
|
+
|
24
|
+
if (!qq || !group) {
|
25
|
+
throw new Error('sendTempMessage 缺少必要的 qq 和 group 参数');
|
26
|
+
}
|
27
|
+
|
28
|
+
// 请求
|
29
|
+
const responseData = await axios.post(url, {
|
30
|
+
sessionKey,
|
31
|
+
qq,
|
32
|
+
group,
|
33
|
+
quote,
|
34
|
+
messageChain
|
35
|
+
});
|
36
|
+
|
37
|
+
try {
|
38
|
+
var {
|
39
|
+
data: { msg: message, code, messageId }
|
40
|
+
} = responseData;
|
41
|
+
} catch (error) {
|
42
|
+
throw new Error(('请求返回格式出错,请检查 mirai-console'));
|
43
|
+
}
|
44
|
+
|
45
|
+
// 抛出 mirai 的异常,到 catch 中处理后再抛出
|
46
|
+
if (code in errCodeMap) {
|
47
|
+
throw new Error(message);
|
48
|
+
}
|
49
|
+
return messageId;
|
50
|
+
} catch (error) {
|
51
|
+
console.error(`mirai-js: error ${locationStr}`);
|
52
|
+
errorHandler(error);
|
53
|
+
}
|
54
|
+
|
55
|
+
};
|
@@ -0,0 +1,44 @@
|
|
1
|
+
const { errCodeMap } = require('../util/errCode');
|
2
|
+
const axios = require('axios').default;
|
3
|
+
const { URL } = require('../polyfill/URL');
|
4
|
+
const errorHandler = require('../util/errorHandler');
|
5
|
+
const path = require('path');
|
6
|
+
const { isBrowserEnv } = require('../util/isBrowserEnv');
|
7
|
+
const locationStr = !isBrowserEnv() ? `core.${path.basename(__filename, path.extname(__filename))}` : 'borwser';
|
8
|
+
|
9
|
+
|
10
|
+
/**
|
11
|
+
* @description 设置群精华消息
|
12
|
+
* @param {string} baseUrl mirai-api-http server 的地址
|
13
|
+
* @param {string} sessionKey 会话标识
|
14
|
+
* @param {string} target 消息 id
|
15
|
+
* @returns {Object} 结构 { message, code }
|
16
|
+
*/
|
17
|
+
module.exports = async ({
|
18
|
+
baseUrl, sessionKey, target
|
19
|
+
}) => {
|
20
|
+
try {
|
21
|
+
// 拼接 url
|
22
|
+
const url = new URL('/setEssence', baseUrl).toString();
|
23
|
+
|
24
|
+
// 请求
|
25
|
+
const responseData = await axios.post(url, {
|
26
|
+
sessionKey, target,
|
27
|
+
});
|
28
|
+
try {
|
29
|
+
var {
|
30
|
+
data: { msg: message, code }
|
31
|
+
} = responseData;
|
32
|
+
} catch (error) {
|
33
|
+
throw new Error(('请求返回格式出错,请检查 mirai-console'));
|
34
|
+
}
|
35
|
+
// 抛出 mirai 的异常,到 catch 中处理后再抛出
|
36
|
+
if (code in errCodeMap) {
|
37
|
+
throw new Error(message);
|
38
|
+
}
|
39
|
+
return { message, code };
|
40
|
+
} catch (error) {
|
41
|
+
console.error(`mirai-js: error ${locationStr}`);
|
42
|
+
errorHandler(error);
|
43
|
+
}
|
44
|
+
};
|
@@ -0,0 +1,58 @@
|
|
1
|
+
const { errCodeMap } = require('../util/errCode');
|
2
|
+
const axios = require('axios').default;
|
3
|
+
const { URL } = require('../polyfill/URL');
|
4
|
+
const errorHandler = require('../util/errorHandler');
|
5
|
+
const path = require('path');
|
6
|
+
const { isBrowserEnv } = require('../util/isBrowserEnv');
|
7
|
+
const locationStr = !isBrowserEnv() ? `core.${path.basename(__filename, path.extname(__filename))}` : 'borwser';
|
8
|
+
|
9
|
+
|
10
|
+
/**
|
11
|
+
* @description 设置群配置
|
12
|
+
* @param {string} baseUrl mirai-api-http server 的地址
|
13
|
+
* @param {string} sessionKey 会话标识
|
14
|
+
* @param {string} name 群名
|
15
|
+
* @param {string} announcement 群公告
|
16
|
+
* @param {boolean} confessTalk 是否开启坦白说
|
17
|
+
* @param {boolean} allowMemberInvite 是否允许群员邀请
|
18
|
+
* @param {boolean} autoApprove 是否开启自动审批入群
|
19
|
+
* @param {boolean} anonymousChat 是否允许匿名聊天
|
20
|
+
* @returns {Object} 结构 { message, code }
|
21
|
+
*/
|
22
|
+
module.exports = async ({
|
23
|
+
baseUrl, sessionKey, target,
|
24
|
+
name, announcement, confessTalk, allowMemberInvite, autoApprove, anonymousChat
|
25
|
+
}) => {
|
26
|
+
try {
|
27
|
+
// 拼接 url
|
28
|
+
const url = new URL('/groupConfig', baseUrl).toString();
|
29
|
+
|
30
|
+
// 请求
|
31
|
+
const responseData = await axios.post(url, {
|
32
|
+
sessionKey, target,
|
33
|
+
config: {
|
34
|
+
name,
|
35
|
+
announcement,
|
36
|
+
confessTalk,
|
37
|
+
allowMemberInvite,
|
38
|
+
autoApprove,
|
39
|
+
anonymousChat,
|
40
|
+
}
|
41
|
+
});
|
42
|
+
try {
|
43
|
+
var {
|
44
|
+
data: { msg: message, code }
|
45
|
+
} = responseData;
|
46
|
+
} catch (error) {
|
47
|
+
throw new Error(('请求返回格式出错,请检查 mirai-console'));
|
48
|
+
}
|
49
|
+
// 抛出 mirai 的异常,到 catch 中处理后再抛出
|
50
|
+
if (code in errCodeMap) {
|
51
|
+
throw new Error(message);
|
52
|
+
}
|
53
|
+
return { message, code };
|
54
|
+
} catch (error) {
|
55
|
+
console.error(`mirai-js: error ${locationStr}`);
|
56
|
+
errorHandler(error);
|
57
|
+
}
|
58
|
+
};
|
@@ -0,0 +1,44 @@
|
|
1
|
+
const { errCodeMap } = require('../util/errCode');
|
2
|
+
const axios = require('axios');
|
3
|
+
const { URL } = require('../polyfill/URL');
|
4
|
+
const errorHandler = require('../util/errorHandler');
|
5
|
+
const path = require('path');
|
6
|
+
const { isBrowserEnv } = require('../util/isBrowserEnv');
|
7
|
+
const locationStr = !isBrowserEnv() ? `core.${path.basename(__filename, path.extname(__filename))}` : 'borwser';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @description 设置群成员权限
|
11
|
+
* @param {string} baseUrl mirai-api-http server 的地址
|
12
|
+
* @param {string} sessionKey 会话标识
|
13
|
+
* @param {number} target 群成员所在群号
|
14
|
+
* @param {number} memberId 群成员的 qq 号
|
15
|
+
* @param {string} assign 是否设置为管理员
|
16
|
+
* @returns {Object} 结构 { message, code }
|
17
|
+
*/
|
18
|
+
module.exports = async ({ baseUrl, sessionKey, target, memberId, assign }) => {
|
19
|
+
try {
|
20
|
+
// 拼接 url
|
21
|
+
const url = new URL('/memberAdmin', baseUrl).toString();
|
22
|
+
|
23
|
+
// 请求
|
24
|
+
const responseData = await axios.post(url, {
|
25
|
+
sessionKey, target, memberId, assign
|
26
|
+
});
|
27
|
+
try {
|
28
|
+
var {
|
29
|
+
data: { msg: message, code }
|
30
|
+
} = responseData;
|
31
|
+
} catch (error) {
|
32
|
+
throw new Error(('请求返回格式出错,请检查 mirai-console'));
|
33
|
+
}
|
34
|
+
// 抛出 mirai 的异常,到 catch 中处理后再抛出
|
35
|
+
if (code in errCodeMap) {
|
36
|
+
throw new Error(message);
|
37
|
+
}
|
38
|
+
return { message, code };
|
39
|
+
} catch (error) {
|
40
|
+
console.error(`mirai-js: error ${locationStr}`);
|
41
|
+
errorHandler(error);
|
42
|
+
}
|
43
|
+
|
44
|
+
};
|
@@ -0,0 +1,48 @@
|
|
1
|
+
const { errCodeMap } = require('../util/errCode');
|
2
|
+
const axios = require('axios');
|
3
|
+
const { URL } = require('../polyfill/URL');
|
4
|
+
const errorHandler = require('../util/errorHandler');
|
5
|
+
const path = require('path');
|
6
|
+
const { isBrowserEnv } = require('../util/isBrowserEnv');
|
7
|
+
const locationStr = !isBrowserEnv() ? `core.${path.basename(__filename, path.extname(__filename))}` : 'borwser';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @description 设置群成员信息
|
11
|
+
* @param {string} baseUrl mirai-api-http server 的地址
|
12
|
+
* @param {string} sessionKey 会话标识
|
13
|
+
* @param {number} target 群成员所在群号
|
14
|
+
* @param {number} memberId 群成员的 qq 号
|
15
|
+
* @param {string} name 要设置的群名片
|
16
|
+
* @param {string} specialTitle 要设置的群头衔
|
17
|
+
* @returns {Object} 结构 { message, code }
|
18
|
+
*/
|
19
|
+
module.exports = async ({ baseUrl, sessionKey, target, memberId, name, specialTitle }) => {
|
20
|
+
try {
|
21
|
+
// 拼接 url
|
22
|
+
const url = new URL('/memberInfo', baseUrl).toString();
|
23
|
+
|
24
|
+
// 请求
|
25
|
+
const responseData = await axios.post(url, {
|
26
|
+
sessionKey, target, memberId,
|
27
|
+
info: {
|
28
|
+
name, specialTitle,
|
29
|
+
}
|
30
|
+
});
|
31
|
+
try {
|
32
|
+
var {
|
33
|
+
data: { msg: message, code }
|
34
|
+
} = responseData;
|
35
|
+
} catch (error) {
|
36
|
+
throw new Error(('请求返回格式出错,请检查 mirai-console'));
|
37
|
+
}
|
38
|
+
// 抛出 mirai 的异常,到 catch 中处理后再抛出
|
39
|
+
if (code in errCodeMap) {
|
40
|
+
throw new Error(message);
|
41
|
+
}
|
42
|
+
return { message, code };
|
43
|
+
} catch (error) {
|
44
|
+
console.error(`mirai-js: error ${locationStr}`);
|
45
|
+
errorHandler(error);
|
46
|
+
}
|
47
|
+
|
48
|
+
};
|
@@ -0,0 +1,41 @@
|
|
1
|
+
const { errCodeMap } = require('../util/errCode');
|
2
|
+
const axios = require('axios').default;
|
3
|
+
const { URL } = require('../polyfill/URL');
|
4
|
+
const errorHandler = require('../util/errorHandler');
|
5
|
+
const path = require('path');
|
6
|
+
const { isBrowserEnv } = require('../util/isBrowserEnv');
|
7
|
+
const locationStr = !isBrowserEnv() ? `core.${path.basename(__filename, path.extname(__filename))}` : 'borwser';
|
8
|
+
|
9
|
+
|
10
|
+
/**
|
11
|
+
* @description 设置指定 session 的 config
|
12
|
+
* @param {string} baseUrl mirai-api-http server 的地址
|
13
|
+
* @param {string} sessionKey 会话标识
|
14
|
+
* @param {number} cacheSize 插件缓存大小
|
15
|
+
* @param {boolean} enableWebsocket websocket 状态
|
16
|
+
* @returns {Object} 结构 { message, code }
|
17
|
+
*/
|
18
|
+
module.exports = async ({ baseUrl, sessionKey, cacheSize, enableWebsocket }) => {
|
19
|
+
try {
|
20
|
+
// 拼接 url
|
21
|
+
const url = new URL('/config', baseUrl).toString();
|
22
|
+
|
23
|
+
// 请求
|
24
|
+
const responseData = await axios.post(url, { sessionKey, cacheSize, enableWebsocket });
|
25
|
+
try {
|
26
|
+
var {
|
27
|
+
data: { msg: message, code }
|
28
|
+
} = responseData;
|
29
|
+
} catch (error) {
|
30
|
+
throw new Error(('请求返回格式出错,请检查 mirai-console'));
|
31
|
+
}
|
32
|
+
// 抛出 mirai 的异常,到 catch 中处理后再抛出
|
33
|
+
if (code in errCodeMap) {
|
34
|
+
throw new Error(message);
|
35
|
+
}
|
36
|
+
return { message, code };
|
37
|
+
} catch (error) {
|
38
|
+
console.error(`mirai-js: error ${locationStr}`);
|
39
|
+
errorHandler(error);
|
40
|
+
}
|
41
|
+
};
|
@@ -0,0 +1,62 @@
|
|
1
|
+
const WebSocket = window.WebSocket;
|
2
|
+
const { URL } = require('../polyfill/URL');
|
3
|
+
const errorHandler = require('../util/errorHandler');
|
4
|
+
const path = require('path');
|
5
|
+
const { isBrowserEnv } = require('../util/isBrowserEnv');
|
6
|
+
const locationStr = !isBrowserEnv() ? `core.${path.basename(__filename, path.extname(__filename))}` : 'borwser';
|
7
|
+
|
8
|
+
/**
|
9
|
+
* @description 开始侦听事件
|
10
|
+
* @param {string} baseUrl mirai-api-http server 的地址
|
11
|
+
* @param {string} sessionKey 会话标识
|
12
|
+
* @param {function} message 回调函数
|
13
|
+
* @param {function} error 回调函数
|
14
|
+
* @param {function} close 回调函数
|
15
|
+
* @returns {WebSocket} 建立连接的 WebSocket 实例
|
16
|
+
*/
|
17
|
+
module.exports = async ({ baseUrl, sessionKey, verifyKey, message, error, close }) => {
|
18
|
+
try {
|
19
|
+
// 拼接 url
|
20
|
+
let url = new URL(`/all?sessionKey=${sessionKey}&verifyKey=${verifyKey}`, baseUrl);
|
21
|
+
// 更改协议为 ws
|
22
|
+
url.protocol = 'ws';
|
23
|
+
url = url.toString();
|
24
|
+
|
25
|
+
const ws = new WebSocket(url);
|
26
|
+
|
27
|
+
// 监听 ws 事件,分发消息
|
28
|
+
ws.onopen = () => {
|
29
|
+
// 10s 发个心跳,浏览器会过早关闭没有发生交互的连接
|
30
|
+
const interval = setInterval(() => {
|
31
|
+
ws.send(1);
|
32
|
+
}, 10000);
|
33
|
+
|
34
|
+
ws.onmessage = ({ data }) => {
|
35
|
+
try {
|
36
|
+
message(JSON.parse(data)?.data);
|
37
|
+
} catch (error) { }// eslint-disable-line no-empty
|
38
|
+
};
|
39
|
+
|
40
|
+
ws.onerror = err => {
|
41
|
+
/*
|
42
|
+
interface Error {
|
43
|
+
name: string;
|
44
|
+
message: string;
|
45
|
+
stack?: string;
|
46
|
+
}
|
47
|
+
*/
|
48
|
+
error(err);
|
49
|
+
};
|
50
|
+
|
51
|
+
ws.onclose = ({ code, reason }) => {
|
52
|
+
// 关闭心跳
|
53
|
+
clearInterval(interval);
|
54
|
+
close({ code, reason });
|
55
|
+
};
|
56
|
+
};
|
57
|
+
return ws;
|
58
|
+
} catch (error) {
|
59
|
+
console.error(`mirai-js: error ${locationStr}`);
|
60
|
+
errorHandler(error);
|
61
|
+
}
|
62
|
+
};
|
@@ -0,0 +1,74 @@
|
|
1
|
+
const WebSocket = require('ws');
|
2
|
+
const { URL } = require('../polyfill/URL');
|
3
|
+
const errorHandler = require('../util/errorHandler');
|
4
|
+
const path = require('path');
|
5
|
+
const { isBrowserEnv } = require('../util/isBrowserEnv');
|
6
|
+
const locationStr = !isBrowserEnv() ? `core.${path.basename(__filename, path.extname(__filename))}` : 'borwser';
|
7
|
+
|
8
|
+
/**
|
9
|
+
* @description 开始侦听事件
|
10
|
+
* @param {string} baseUrl mirai-api-http server 的地址
|
11
|
+
* @param {string} sessionKey 会话标识
|
12
|
+
* @param {function} message 回调函数
|
13
|
+
* @param {function} error 回调函数
|
14
|
+
* @param {function} close 回调函数
|
15
|
+
* @param {function} unexpectedResponse 回调函数
|
16
|
+
* @returns {WebSocket} 建立连接的 WebSocket 实例
|
17
|
+
*/
|
18
|
+
module.exports = async ({ baseUrl, sessionKey, verifyKey, message, error, close, unexpectedResponse }) => {
|
19
|
+
try {
|
20
|
+
// 拼接 url
|
21
|
+
let url = new URL(`/all?sessionKey=${sessionKey}&verifyKey=${verifyKey}`, baseUrl);
|
22
|
+
// 更改协议为 ws
|
23
|
+
url.protocol = 'ws';
|
24
|
+
url = url.toString();
|
25
|
+
|
26
|
+
const ws = new WebSocket(url);
|
27
|
+
|
28
|
+
|
29
|
+
// 监听 ws 事件,分发消息
|
30
|
+
ws.on('open', () => {
|
31
|
+
// 60s 发个心跳
|
32
|
+
const interval = setInterval(() => {
|
33
|
+
ws.ping((err) => {
|
34
|
+
if (err) {
|
35
|
+
try {
|
36
|
+
console.log(`ws ping error\n${JSON.stringify(err)}`);
|
37
|
+
} catch (error) { }// eslint-disable-line no-empty
|
38
|
+
}
|
39
|
+
});
|
40
|
+
}, 60000);
|
41
|
+
|
42
|
+
ws.on('message', data => {
|
43
|
+
try {
|
44
|
+
message(JSON.parse(data)?.data);
|
45
|
+
} catch (error) { }// eslint-disable-line no-empty
|
46
|
+
});
|
47
|
+
|
48
|
+
ws.on('error', err => {
|
49
|
+
/*
|
50
|
+
interface Error {
|
51
|
+
name: string;
|
52
|
+
message: string;
|
53
|
+
stack?: string;
|
54
|
+
}
|
55
|
+
*/
|
56
|
+
error(err);
|
57
|
+
});
|
58
|
+
|
59
|
+
ws.on('close', (code, reason) => {
|
60
|
+
// 关闭心跳
|
61
|
+
clearInterval(interval);
|
62
|
+
close({ code, reason });
|
63
|
+
});
|
64
|
+
|
65
|
+
ws.on('unexpectedResponse', ({ req, res }) => {
|
66
|
+
unexpectedResponse({ req, res });
|
67
|
+
});
|
68
|
+
});
|
69
|
+
return ws;
|
70
|
+
} catch (error) {
|
71
|
+
console.error(`mirai-js: error ${locationStr}`);
|
72
|
+
errorHandler(error);
|
73
|
+
}
|
74
|
+
};
|
@@ -0,0 +1,34 @@
|
|
1
|
+
const errorHandler = require('../util/errorHandler');
|
2
|
+
const path = require('path');
|
3
|
+
const { isBrowserEnv } = require('../util/isBrowserEnv');
|
4
|
+
const locationStr = !isBrowserEnv() ? `core.${path.basename(__filename, path.extname(__filename))}` : 'borwser';
|
5
|
+
|
6
|
+
/**
|
7
|
+
* @description 停止侦听事件
|
8
|
+
* @param {WebSocket} 建立连接的 WebSocket 实例
|
9
|
+
*/
|
10
|
+
module.exports = async (wsConnection) => {
|
11
|
+
try {
|
12
|
+
// 由于在 ws open 之前关闭连接会抛异常,故应先判断此时是否正在连接中
|
13
|
+
if (wsConnection.readyState == wsConnection.CONNECTING) {
|
14
|
+
// 正在连接中,注册一个 open,等待回调时关闭
|
15
|
+
// 由于是一个异步过程,使用 Promise 包装以配合开发者可能存在的同步调用
|
16
|
+
await new Promise(resolve => {
|
17
|
+
wsConnection.onopen = () => {
|
18
|
+
// 关闭 websocket 的连接
|
19
|
+
wsConnection.close(1000);
|
20
|
+
resolve(undefined);
|
21
|
+
};
|
22
|
+
});
|
23
|
+
} else if (wsConnection.readyState == wsConnection.OPEN) {
|
24
|
+
// 关闭 websocket 的连接
|
25
|
+
wsConnection.close(1000);
|
26
|
+
} else {
|
27
|
+
// CLOSING or CLOSED
|
28
|
+
// do nothing
|
29
|
+
}
|
30
|
+
} catch (error) {
|
31
|
+
console.error(`mirai-js: error ${locationStr}`);
|
32
|
+
errorHandler(error);
|
33
|
+
}
|
34
|
+
};
|
@@ -0,0 +1,34 @@
|
|
1
|
+
const errorHandler = require('../util/errorHandler');
|
2
|
+
const path = require('path');
|
3
|
+
const { isBrowserEnv } = require('../util/isBrowserEnv');
|
4
|
+
const locationStr = !isBrowserEnv() ? `core.${path.basename(__filename, path.extname(__filename))}` : 'borwser';
|
5
|
+
|
6
|
+
/**
|
7
|
+
* @description 停止侦听事件
|
8
|
+
* @param {WebSocket} 建立连接的 WebSocket 实例
|
9
|
+
*/
|
10
|
+
module.exports = async (wsConnection) => {
|
11
|
+
try {
|
12
|
+
// 由于在 ws open 之前关闭连接会抛异常,故应先判断此时是否正在连接中
|
13
|
+
if (wsConnection.readyState == wsConnection.CONNECTING) {
|
14
|
+
// 正在连接中,注册一个 open,等待回调时关闭
|
15
|
+
// 由于是一个异步过程,使用 Promise 包装以配合开发者可能存在的同步调用
|
16
|
+
await new Promise(resolve => {
|
17
|
+
wsConnection.on('open', () => {
|
18
|
+
// 关闭 websocket 的连接
|
19
|
+
wsConnection.close(1000);
|
20
|
+
resolve(undefined);
|
21
|
+
});
|
22
|
+
});
|
23
|
+
} else if (wsConnection.readyState == wsConnection.OPEN) {
|
24
|
+
// 关闭 websocket 的连接
|
25
|
+
wsConnection.close(1000);
|
26
|
+
} else {
|
27
|
+
// CLOSING or CLOSED
|
28
|
+
// do nothing
|
29
|
+
}
|
30
|
+
} catch (error) {
|
31
|
+
console.error(`mirai-js: error ${locationStr}`);
|
32
|
+
errorHandler(error);
|
33
|
+
}
|
34
|
+
};
|
@@ -0,0 +1,40 @@
|
|
1
|
+
const { errCodeMap } = require('../util/errCode');
|
2
|
+
const axios = require('axios').default;
|
3
|
+
const { URL } = require('../polyfill/URL');
|
4
|
+
const errorHandler = require('../util/errorHandler');
|
5
|
+
const path = require('path');
|
6
|
+
const { isBrowserEnv } = require('../util/isBrowserEnv');
|
7
|
+
const locationStr = !isBrowserEnv() ? `core.${path.basename(__filename, path.extname(__filename))}` : 'borwser';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @description 解除禁言
|
11
|
+
* @param {string} baseUrl mirai-api-http server 的主机地址
|
12
|
+
* @param {string} sessionKey 会话标识
|
13
|
+
* @param {number} target 欲解除禁言的成员所在群号
|
14
|
+
* @param {number} memberId 欲解除禁言的成员 qq 号
|
15
|
+
* @returns {Object} 结构 { message, code }
|
16
|
+
*/
|
17
|
+
module.exports = async ({ baseUrl, sessionKey, target, memberId }) => {
|
18
|
+
try {
|
19
|
+
// 拼接 URL
|
20
|
+
const url = new URL('/unmute', baseUrl).toString();
|
21
|
+
|
22
|
+
// 请求
|
23
|
+
const responseData = await axios.post(url, { sessionKey, target, memberId });
|
24
|
+
try {
|
25
|
+
var {
|
26
|
+
data: { code, msg: message }
|
27
|
+
} = responseData;
|
28
|
+
} catch (error) {
|
29
|
+
throw new Error(('请求返回格式出错,请检查 mirai-console'));
|
30
|
+
}
|
31
|
+
// 抛出 mirai 的异常,到 catch 中处理后再抛出
|
32
|
+
if (code in errCodeMap) {
|
33
|
+
throw new Error(message);
|
34
|
+
}
|
35
|
+
return { message, code };
|
36
|
+
} catch (error) {
|
37
|
+
console.error(`mirai-js: error ${locationStr}`);
|
38
|
+
errorHandler(error);
|
39
|
+
}
|
40
|
+
};
|