koishi-plugin-tmp-bot 1.20.0 → 1.20.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.
- package/lib/api/evmOpenApi.js +136 -1
- package/lib/api/truckersMpApi.js +110 -1
- package/lib/api/truckersMpMapApi.js +25 -1
- package/lib/api/truckyAppApi.js +47 -1
- package/lib/command/tmpBind.js +19 -1
- package/lib/command/tmpDlcMap.js +33 -1
- package/lib/command/tmpFootprint.js +82 -1
- package/lib/command/tmpMileageRanking.js +55 -1
- package/lib/command/tmpPosition.d.ts +1 -1
- package/lib/command/tmpPosition.js +95 -1
- package/lib/command/tmpQuery/tmpQuery.js +12 -1
- package/lib/command/tmpQuery/tmpQueryImg.d.ts +1 -1
- package/lib/command/tmpQuery/tmpQueryImg.js +103 -1
- package/lib/command/tmpQuery/tmpQueryText.js +118 -1
- package/lib/command/tmpServer.js +34 -1
- package/lib/command/tmpTraffic/tmpTraffic.js +15 -1
- package/lib/command/tmpTraffic/tmpTrafficMap.js +119 -1
- package/lib/command/tmpTraffic/tmpTrafficText.js +58 -1
- package/lib/command/tmpVersion.js +14 -1
- package/lib/database/guildBind.js +41 -1
- package/lib/database/model.js +65 -1
- package/lib/database/translateCache.js +31 -1
- package/lib/index.js +57 -1
- package/lib/resource/dlc.html +30 -1
- package/lib/resource/footprint.html +125 -1
- package/lib/resource/mileage-leaderboard.html +174 -1
- package/lib/resource/package/ets-map.js +63 -1
- package/lib/resource/package/leaflet/heatmap.min.js +9 -1
- package/lib/resource/package/leaflet/leaflet-heatmap.js +246 -1
- package/lib/resource/package/leaflet/leaflet.min.js +1 -1
- package/lib/resource/position.html +105 -1
- package/lib/resource/query.html +137 -1
- package/lib/resource/traffic.html +121 -1
- package/lib/util/baiduTranslate.js +30 -1
- package/lib/util/common.js +5 -1
- package/lib/util/constant.js +36 -1
- package/package.json +2 -1
package/lib/api/evmOpenApi.js
CHANGED
|
@@ -1 +1,136 @@
|
|
|
1
|
-
const
|
|
1
|
+
const BASE_API = 'https://da.vtcm.link';
|
|
2
|
+
module.exports = {
|
|
3
|
+
/**
|
|
4
|
+
* 查询服务器列表
|
|
5
|
+
*/
|
|
6
|
+
async serverList(http) {
|
|
7
|
+
let result = null;
|
|
8
|
+
try {
|
|
9
|
+
result = await http.get(`${BASE_API}/server/list`);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return {
|
|
13
|
+
error: true
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
// 拼接返回数据
|
|
17
|
+
let data = {
|
|
18
|
+
error: result.code !== 200
|
|
19
|
+
};
|
|
20
|
+
if (!data.error) {
|
|
21
|
+
data.data = result.data;
|
|
22
|
+
}
|
|
23
|
+
return data;
|
|
24
|
+
},
|
|
25
|
+
/**
|
|
26
|
+
* 查询在线玩家
|
|
27
|
+
*/
|
|
28
|
+
async mapPlayerList(http, serverId, ax, ay, bx, by) {
|
|
29
|
+
let result = null;
|
|
30
|
+
try {
|
|
31
|
+
result = await http.get(`${BASE_API}/map/playerList?aAxisX=${ax}&aAxisY=${ay}&bAxisX=${bx}&bAxisY=${by}&serverId=${serverId}`);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return {
|
|
35
|
+
error: true
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// 拼接返回数据
|
|
39
|
+
let data = {
|
|
40
|
+
error: result.code !== 200
|
|
41
|
+
};
|
|
42
|
+
if (!data.error) {
|
|
43
|
+
data.data = result.data;
|
|
44
|
+
}
|
|
45
|
+
return data;
|
|
46
|
+
},
|
|
47
|
+
/**
|
|
48
|
+
* 查询玩家信息
|
|
49
|
+
*/
|
|
50
|
+
async playerInfo(http, tmpId) {
|
|
51
|
+
let result = null;
|
|
52
|
+
try {
|
|
53
|
+
result = await http.get(`${BASE_API}/player/info?tmpId=${tmpId}`);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return {
|
|
57
|
+
error: true
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// 拼接返回数据
|
|
61
|
+
let data = {
|
|
62
|
+
code: result.code,
|
|
63
|
+
error: result.code !== 200
|
|
64
|
+
};
|
|
65
|
+
if (!data.error) {
|
|
66
|
+
data.data = result.data;
|
|
67
|
+
}
|
|
68
|
+
return data;
|
|
69
|
+
},
|
|
70
|
+
/**
|
|
71
|
+
* DLC列表
|
|
72
|
+
*/
|
|
73
|
+
async dlcList(http, type) {
|
|
74
|
+
let result = null;
|
|
75
|
+
try {
|
|
76
|
+
result = await http.get(`${BASE_API}/dlc/list?type=${type}`);
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
return {
|
|
80
|
+
error: true
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// 拼接返回数据
|
|
84
|
+
let data = {
|
|
85
|
+
error: result.code !== 200
|
|
86
|
+
};
|
|
87
|
+
if (!data.error) {
|
|
88
|
+
data.data = result.data;
|
|
89
|
+
}
|
|
90
|
+
return data;
|
|
91
|
+
},
|
|
92
|
+
/**
|
|
93
|
+
* 玩家里程排行
|
|
94
|
+
*/
|
|
95
|
+
async mileageRankingList(http, rankingType, tmpId) {
|
|
96
|
+
let result = null;
|
|
97
|
+
try {
|
|
98
|
+
result = await http.get(`${BASE_API}/statistics/mileageRankingList?rankingType=${rankingType}&tmpId=${tmpId || ''}&rankingCount=10`);
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
return {
|
|
102
|
+
error: true
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
// 拼接返回数据
|
|
106
|
+
let data = {
|
|
107
|
+
error: result.code !== 200
|
|
108
|
+
};
|
|
109
|
+
if (!data.error) {
|
|
110
|
+
data.data = result.data;
|
|
111
|
+
}
|
|
112
|
+
return data;
|
|
113
|
+
},
|
|
114
|
+
/**
|
|
115
|
+
* 查询玩家历史数据
|
|
116
|
+
*/
|
|
117
|
+
async mapPlayerHistory(http, tmpId, serverId, startTime, endTime) {
|
|
118
|
+
let result = null;
|
|
119
|
+
try {
|
|
120
|
+
result = await http.get(`${BASE_API}/map/playerHistory?tmpId=${tmpId || ''}&serverId=${serverId || ''}&startTime=${startTime || ''}&endTime=${endTime || ''}`);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return {
|
|
124
|
+
error: true
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// 拼接返回数据
|
|
128
|
+
let data = {
|
|
129
|
+
error: result.code !== 200
|
|
130
|
+
};
|
|
131
|
+
if (!data.error) {
|
|
132
|
+
data.data = result.data;
|
|
133
|
+
}
|
|
134
|
+
return data;
|
|
135
|
+
}
|
|
136
|
+
};
|
package/lib/api/truckersMpApi.js
CHANGED
|
@@ -1 +1,110 @@
|
|
|
1
|
-
|
|
1
|
+
const BASE_API = 'https://api.truckersmp.com/v2';
|
|
2
|
+
module.exports = {
|
|
3
|
+
/**
|
|
4
|
+
* 查询玩家信息
|
|
5
|
+
*/
|
|
6
|
+
async player(http, tmpId) {
|
|
7
|
+
let result = null;
|
|
8
|
+
try {
|
|
9
|
+
result = await http.get(`${BASE_API}/player/${tmpId}`);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return {
|
|
13
|
+
error: true
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
// 拼接返回数据
|
|
17
|
+
let data = {
|
|
18
|
+
error: JSON.parse(result.error)
|
|
19
|
+
};
|
|
20
|
+
if (!data.error) {
|
|
21
|
+
data.data = result.response;
|
|
22
|
+
}
|
|
23
|
+
return data;
|
|
24
|
+
},
|
|
25
|
+
/**
|
|
26
|
+
* 查询服务器列表
|
|
27
|
+
*/
|
|
28
|
+
async servers(http) {
|
|
29
|
+
let result = null;
|
|
30
|
+
try {
|
|
31
|
+
result = await http.get(`${BASE_API}/servers`);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return {
|
|
35
|
+
error: true
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// 拼接返回数据
|
|
39
|
+
let data = {
|
|
40
|
+
error: JSON.parse(result.error)
|
|
41
|
+
};
|
|
42
|
+
if (!data.error) {
|
|
43
|
+
data.data = result.response;
|
|
44
|
+
}
|
|
45
|
+
return data;
|
|
46
|
+
},
|
|
47
|
+
/**
|
|
48
|
+
* 查询玩家封禁信息
|
|
49
|
+
*/
|
|
50
|
+
async bans(http, tmpId) {
|
|
51
|
+
let result = null;
|
|
52
|
+
try {
|
|
53
|
+
result = await http.get(`${BASE_API}/bans/${tmpId}`);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return {
|
|
57
|
+
error: true
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// 拼接返回数据
|
|
61
|
+
let data = {
|
|
62
|
+
error: JSON.parse(result.error)
|
|
63
|
+
};
|
|
64
|
+
if (!data.error) {
|
|
65
|
+
data.data = result.response;
|
|
66
|
+
}
|
|
67
|
+
return data;
|
|
68
|
+
},
|
|
69
|
+
/**
|
|
70
|
+
* 游戏版本
|
|
71
|
+
*/
|
|
72
|
+
async version(http) {
|
|
73
|
+
let result = null;
|
|
74
|
+
try {
|
|
75
|
+
result = await http.get(`${BASE_API}/version`);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return {
|
|
79
|
+
error: true
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
// 拼接返回数据
|
|
83
|
+
return {
|
|
84
|
+
error: false,
|
|
85
|
+
data: result
|
|
86
|
+
};
|
|
87
|
+
},
|
|
88
|
+
/**
|
|
89
|
+
* 查询车队成员信息
|
|
90
|
+
*/
|
|
91
|
+
async vtcMember(http, vtcId, memberId) {
|
|
92
|
+
let result = null;
|
|
93
|
+
try {
|
|
94
|
+
result = await http.get(`${BASE_API}/vtc/${vtcId}/member/${memberId}`);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return {
|
|
98
|
+
error: true
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
// 拼接返回数据
|
|
102
|
+
let data = {
|
|
103
|
+
error: JSON.parse(result.error)
|
|
104
|
+
};
|
|
105
|
+
if (!data.error) {
|
|
106
|
+
data.data = result.response;
|
|
107
|
+
}
|
|
108
|
+
return data;
|
|
109
|
+
}
|
|
110
|
+
};
|
|
@@ -1 +1,25 @@
|
|
|
1
|
-
const
|
|
1
|
+
const BASE_API = 'https://tracker.ets2map.com';
|
|
2
|
+
module.exports = {
|
|
3
|
+
/**
|
|
4
|
+
* 区域查询玩家
|
|
5
|
+
*/
|
|
6
|
+
async area(http, serverId, x1, y1, x2, y2) {
|
|
7
|
+
let result = null;
|
|
8
|
+
try {
|
|
9
|
+
result = await http.get(`${BASE_API}/v3/area?x1=${x1}&y1=${y1}&x2=${x2}&y2=${y2}&server=${serverId}`);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return {
|
|
13
|
+
error: true
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
// 拼接返回数据
|
|
17
|
+
let data = {
|
|
18
|
+
error: !result || !result.Success
|
|
19
|
+
};
|
|
20
|
+
if (!data.error) {
|
|
21
|
+
data.data = result.Data;
|
|
22
|
+
}
|
|
23
|
+
return data;
|
|
24
|
+
}
|
|
25
|
+
};
|
package/lib/api/truckyAppApi.js
CHANGED
|
@@ -1 +1,47 @@
|
|
|
1
|
-
|
|
1
|
+
const BASE_API = 'https://api.codetabs.com/v1/proxy/?quest=https://api.truckyapp.com';
|
|
2
|
+
module.exports = {
|
|
3
|
+
/**
|
|
4
|
+
* 查询线上信息
|
|
5
|
+
*/
|
|
6
|
+
async online(http, tmpId) {
|
|
7
|
+
let result = null;
|
|
8
|
+
try {
|
|
9
|
+
result = await http.get(`${BASE_API}/v3/map/online?playerID=${tmpId}`);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return {
|
|
13
|
+
error: true
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
// 拼接返回数据
|
|
17
|
+
let data = {
|
|
18
|
+
error: !result || !result.response || result.response.error
|
|
19
|
+
};
|
|
20
|
+
if (!data.error) {
|
|
21
|
+
data.data = result.response;
|
|
22
|
+
}
|
|
23
|
+
return data;
|
|
24
|
+
},
|
|
25
|
+
/**
|
|
26
|
+
* 查询热门交通数据
|
|
27
|
+
*/
|
|
28
|
+
async trafficTop(http, serverName) {
|
|
29
|
+
let result = null;
|
|
30
|
+
try {
|
|
31
|
+
result = await http.get(`${BASE_API}/v2/traffic/top?game=ets2&server=${serverName}`);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return {
|
|
35
|
+
error: true
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// 拼接返回数据
|
|
39
|
+
let data = {
|
|
40
|
+
error: !result || !result.response || result.response.length <= 0
|
|
41
|
+
};
|
|
42
|
+
if (!data.error) {
|
|
43
|
+
data.data = result.response;
|
|
44
|
+
}
|
|
45
|
+
return data;
|
|
46
|
+
}
|
|
47
|
+
};
|
package/lib/command/tmpBind.js
CHANGED
|
@@ -1 +1,19 @@
|
|
|
1
|
-
const
|
|
1
|
+
const guildBind = require('../database/guildBind');
|
|
2
|
+
const truckersMpApi = require("../api/truckersMpApi");
|
|
3
|
+
const evmOpenApi = require('../api/evmOpenApi');
|
|
4
|
+
/**
|
|
5
|
+
* 绑定 TMP ID
|
|
6
|
+
*/
|
|
7
|
+
module.exports = async (ctx, cfg, session, tmpId) => {
|
|
8
|
+
if (!tmpId || isNaN(tmpId)) {
|
|
9
|
+
return `请输入正确的玩家编号`;
|
|
10
|
+
}
|
|
11
|
+
// 查询玩家信息
|
|
12
|
+
let playerInfo = await evmOpenApi.playerInfo(ctx.http, tmpId);
|
|
13
|
+
if (playerInfo.error) {
|
|
14
|
+
return '绑定失败 (查询玩家信息失败)';
|
|
15
|
+
}
|
|
16
|
+
// 更新数据库
|
|
17
|
+
guildBind.saveOrUpdate(ctx.database, session.platform, session.userId, playerInfo.data.tmpId);
|
|
18
|
+
return `绑定成功 ( ${playerInfo.data.name} )`;
|
|
19
|
+
};
|
package/lib/command/tmpDlcMap.js
CHANGED
|
@@ -1 +1,33 @@
|
|
|
1
|
-
|
|
1
|
+
const { segment } = require('koishi');
|
|
2
|
+
const { resolve } = require('path');
|
|
3
|
+
const common = require('../util/common');
|
|
4
|
+
const evmOpenApi = require('../api/evmOpenApi');
|
|
5
|
+
module.exports = async (ctx, session) => {
|
|
6
|
+
if (!ctx.puppeteer) {
|
|
7
|
+
return '未启用 Puppeteer 功能';
|
|
8
|
+
}
|
|
9
|
+
// 查询DLC数据
|
|
10
|
+
let dlcData = await evmOpenApi.dlcList(ctx.http, 1);
|
|
11
|
+
let page;
|
|
12
|
+
try {
|
|
13
|
+
page = await ctx.puppeteer.page();
|
|
14
|
+
await page.setViewport({ width: 1000, height: 1000 });
|
|
15
|
+
await page.goto(`file:///${resolve(__dirname, '../resource/dlc.html')}`);
|
|
16
|
+
await page.evaluate(`setData(${JSON.stringify(dlcData.data)})`);
|
|
17
|
+
await page.waitForNetworkIdle();
|
|
18
|
+
await common.sleep(500);
|
|
19
|
+
const element = await page.$("#dlc-info-container");
|
|
20
|
+
return (segment.image(await element.screenshot({
|
|
21
|
+
encoding: "binary"
|
|
22
|
+
}), "image/jpg"));
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
console.info(e);
|
|
26
|
+
return '渲染异常,请重试';
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
if (page) {
|
|
30
|
+
await page.close();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
@@ -1 +1,82 @@
|
|
|
1
|
-
|
|
1
|
+
const { segment } = require('koishi');
|
|
2
|
+
const dayjs = require('dayjs');
|
|
3
|
+
const { resolve } = require('path');
|
|
4
|
+
const common = require('../util/common');
|
|
5
|
+
const { PromodsIds, ServerType } = require('../util/constant');
|
|
6
|
+
const evmOpenApi = require('../api/evmOpenApi');
|
|
7
|
+
const guildBind = require('../database/guildBind');
|
|
8
|
+
module.exports = async (ctx, session, serverType, tmpId) => {
|
|
9
|
+
if (!ctx.puppeteer) {
|
|
10
|
+
return '未启用 puppeteer 服务';
|
|
11
|
+
}
|
|
12
|
+
if (tmpId && isNaN(tmpId)) {
|
|
13
|
+
return `请输入正确的玩家编号,或绑定玩家编号`;
|
|
14
|
+
}
|
|
15
|
+
// 如果没有传入tmpId,尝试从数据库查询绑定信息
|
|
16
|
+
if (!tmpId) {
|
|
17
|
+
let guildBindData = await guildBind.get(ctx.database, session.platform, session.userId);
|
|
18
|
+
if (!guildBindData) {
|
|
19
|
+
return `请输入正确的玩家编号,或绑定玩家编号`;
|
|
20
|
+
}
|
|
21
|
+
tmpId = guildBindData.tmp_id;
|
|
22
|
+
}
|
|
23
|
+
// 查询玩家信息
|
|
24
|
+
let playerInfo = await evmOpenApi.playerInfo(ctx.http, tmpId);
|
|
25
|
+
if (playerInfo.error && playerInfo.code === 10001) {
|
|
26
|
+
return '玩家不存在';
|
|
27
|
+
}
|
|
28
|
+
else if (playerInfo.error) {
|
|
29
|
+
return '查询玩家信息失败,请重试';
|
|
30
|
+
}
|
|
31
|
+
// 查询当日历史位置数据
|
|
32
|
+
const startTime = dayjs().startOf('day').format('YYYY-MM-DD HH:mm:ss');
|
|
33
|
+
const endTime = dayjs().endOf('day').format('YYYY-MM-DD HH:mm:ss');
|
|
34
|
+
let mapPlayerHistory = await evmOpenApi.mapPlayerHistory(ctx.http, tmpId, null, startTime, endTime);
|
|
35
|
+
if (mapPlayerHistory.error) {
|
|
36
|
+
return '查询玩家历史位置数据失败,请稍后重试';
|
|
37
|
+
}
|
|
38
|
+
// 过滤非对应服务器数据
|
|
39
|
+
const promodsIdSet = new Set(PromodsIds);
|
|
40
|
+
const mapPlayerHistoryArr = mapPlayerHistory.data.filter(item => {
|
|
41
|
+
if (ServerType.ets === serverType) {
|
|
42
|
+
return !promodsIdSet.has(item.serverId);
|
|
43
|
+
}
|
|
44
|
+
else if (ServerType.promods === serverType) {
|
|
45
|
+
return promodsIdSet.has(item.serverId);
|
|
46
|
+
}
|
|
47
|
+
return false;
|
|
48
|
+
});
|
|
49
|
+
if (mapPlayerHistoryArr.length === 0) {
|
|
50
|
+
return `当日暂无数据`;
|
|
51
|
+
}
|
|
52
|
+
// 拼接数据
|
|
53
|
+
let data = {
|
|
54
|
+
mapType: ServerType.promods === serverType ? 'promods' : 'ets',
|
|
55
|
+
name: playerInfo.data.name,
|
|
56
|
+
smallAvatarUrl: playerInfo.data.smallAvatarUrl,
|
|
57
|
+
todayMileage: playerInfo.data.todayMileage,
|
|
58
|
+
points: mapPlayerHistory.data
|
|
59
|
+
};
|
|
60
|
+
let page;
|
|
61
|
+
try {
|
|
62
|
+
page = await ctx.puppeteer.page();
|
|
63
|
+
await page.setViewport({ width: 1000, height: 1000 });
|
|
64
|
+
await page.goto(`file:///${resolve(__dirname, '../resource/footprint.html')}`);
|
|
65
|
+
await page.evaluate(`init(${JSON.stringify(data)})`);
|
|
66
|
+
await common.sleep(100);
|
|
67
|
+
await page.waitForNetworkIdle();
|
|
68
|
+
const element = await page.$("#container");
|
|
69
|
+
return (segment.image(await element.screenshot({
|
|
70
|
+
encoding: "binary"
|
|
71
|
+
}), "image/jpg"));
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
return '渲染异常,请重试';
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
if (page) {
|
|
78
|
+
await page.close();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return `OK: ` + playerInfo.data.name;
|
|
82
|
+
};
|
|
@@ -1 +1,55 @@
|
|
|
1
|
-
const
|
|
1
|
+
const { segment } = require('koishi');
|
|
2
|
+
const { resolve } = require('path');
|
|
3
|
+
const common = require('../util/common');
|
|
4
|
+
const evmOpenApi = require('../api/evmOpenApi');
|
|
5
|
+
const guildBind = require('../database/guildBind');
|
|
6
|
+
module.exports = async (ctx, session, rankingType) => {
|
|
7
|
+
if (!ctx.puppeteer) {
|
|
8
|
+
return '未启用 Puppeteer 功能';
|
|
9
|
+
}
|
|
10
|
+
// 查询排行榜信息
|
|
11
|
+
let mileageRankingList = await evmOpenApi.mileageRankingList(ctx.http, rankingType, null);
|
|
12
|
+
if (mileageRankingList.error) {
|
|
13
|
+
return '查询排行榜信息失败';
|
|
14
|
+
}
|
|
15
|
+
else if (mileageRankingList.data.length === 0) {
|
|
16
|
+
return '暂无数据';
|
|
17
|
+
}
|
|
18
|
+
// 查询当前玩家的排行信息
|
|
19
|
+
let guildBindData = await guildBind.get(ctx.database, session.platform, session.userId);
|
|
20
|
+
let playerMileageRanking = null;
|
|
21
|
+
if (guildBindData) {
|
|
22
|
+
let playerMileageRankingResult = await evmOpenApi.mileageRankingList(ctx.http, rankingType, guildBindData.tmp_id);
|
|
23
|
+
if (!playerMileageRankingResult.error && playerMileageRankingResult.data.length > 0) {
|
|
24
|
+
playerMileageRanking = playerMileageRankingResult.data[0];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// 拼接页面数据
|
|
28
|
+
let data = {
|
|
29
|
+
rankingType: rankingType,
|
|
30
|
+
mileageRankingList: mileageRankingList.data,
|
|
31
|
+
playerMileageRanking: playerMileageRanking
|
|
32
|
+
};
|
|
33
|
+
let page;
|
|
34
|
+
try {
|
|
35
|
+
page = await ctx.puppeteer.page();
|
|
36
|
+
await page.setViewport({ width: 1000, height: 1000 });
|
|
37
|
+
await page.goto(`file:///${resolve(__dirname, '../resource/mileage-leaderboard.html')}`);
|
|
38
|
+
await page.evaluate(`setData(${JSON.stringify(data)})`);
|
|
39
|
+
await page.waitForNetworkIdle();
|
|
40
|
+
await common.sleep(500);
|
|
41
|
+
const element = await page.$("#container");
|
|
42
|
+
return (segment.image(await element.screenshot({
|
|
43
|
+
encoding: "binary"
|
|
44
|
+
}), "image/jpg"));
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
console.info(e);
|
|
48
|
+
return '渲染异常,请重试';
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
if (page) {
|
|
52
|
+
await page.close();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
declare function _exports(ctx: any, cfg: any, session: any, tmpId: any): Promise<segment | "
|
|
1
|
+
declare function _exports(ctx: any, cfg: any, session: any, tmpId: any): Promise<segment | "渲染异常,请重试" | "未启用 puppeteer 服务" | "请输入正确的玩家编号,或绑定玩家编号" | "查询玩家信息失败,请重试" | "玩家离线">;
|
|
2
2
|
export = _exports;
|
|
3
3
|
import { segment } from "@koishijs/core";
|