mirai-js 2.8.3 → 2.8.5
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.
- package/1.mp3 +0 -0
- package/README.md +2 -0
- package/demo.ts +3 -6
- package/dist/browser/mirai-js.js +1 -1
- package/dist/node/borwserEntry.js +21 -0
- package/dist/node/core/uploadVoice.js +1 -1
- 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/core/uploadVoice.js +1 -1
- 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
|
+
};
|