koishi-plugin-aktmp 1.0.0

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 (63) hide show
  1. package/lib/api/evmOpenApi.d.ts +45 -0
  2. package/lib/api/evmOpenApi.js +158 -0
  3. package/lib/api/truckersMpApi.d.ts +34 -0
  4. package/lib/api/truckersMpApi.js +110 -0
  5. package/lib/api/truckersMpMapApi.d.ts +6 -0
  6. package/lib/api/truckersMpMapApi.js +25 -0
  7. package/lib/api/truckyAppApi.d.ts +12 -0
  8. package/lib/api/truckyAppApi.js +32 -0
  9. package/lib/command/tmpBind.d.ts +2 -0
  10. package/lib/command/tmpBind.js +19 -0
  11. package/lib/command/tmpDlcMap.d.ts +3 -0
  12. package/lib/command/tmpDlcMap.js +33 -0
  13. package/lib/command/tmpFootprint.d.ts +3 -0
  14. package/lib/command/tmpFootprint.js +82 -0
  15. package/lib/command/tmpMileageRanking.d.ts +3 -0
  16. package/lib/command/tmpMileageRanking.js +55 -0
  17. package/lib/command/tmpPosition.d.ts +3 -0
  18. package/lib/command/tmpPosition.js +95 -0
  19. package/lib/command/tmpQuery.d.ts +2 -0
  20. package/lib/command/tmpQuery.js +148 -0
  21. package/lib/command/tmpServer/tmpServer.d.ts +2 -0
  22. package/lib/command/tmpServer/tmpServer.js +15 -0
  23. package/lib/command/tmpServer/tmpServerImg.d.ts +3 -0
  24. package/lib/command/tmpServer/tmpServerImg.js +35 -0
  25. package/lib/command/tmpServer/tmpServerText.d.ts +2 -0
  26. package/lib/command/tmpServer/tmpServerText.js +40 -0
  27. package/lib/command/tmpTraffic/tmpTraffic.d.ts +2 -0
  28. package/lib/command/tmpTraffic/tmpTraffic.js +15 -0
  29. package/lib/command/tmpTraffic/tmpTrafficMap.d.ts +3 -0
  30. package/lib/command/tmpTraffic/tmpTrafficMap.js +119 -0
  31. package/lib/command/tmpTraffic/tmpTrafficText.d.ts +2 -0
  32. package/lib/command/tmpTraffic/tmpTrafficText.js +122 -0
  33. package/lib/command/tmpUnbind.js +17 -0
  34. package/lib/command/tmpVersion.d.ts +2 -0
  35. package/lib/command/tmpVersion.js +31 -0
  36. package/lib/database/guildBind.d.ts +22 -0
  37. package/lib/database/guildBind.js +55 -0
  38. package/lib/database/model.d.ts +2 -0
  39. package/lib/database/model.js +65 -0
  40. package/lib/database/translateCache.d.ts +14 -0
  41. package/lib/database/translateCache.js +31 -0
  42. package/lib/index.d.ts +14 -0
  43. package/lib/index.js +59 -0
  44. package/lib/resource/dlc.html +115 -0
  45. package/lib/resource/footprint.html +241 -0
  46. package/lib/resource/mileage-leaderboard.html +363 -0
  47. package/lib/resource/package/SEGUIEMJ.TTF +0 -0
  48. package/lib/resource/package/ets-map.js +63 -0
  49. package/lib/resource/package/leaflet/heatmap.min.js +9 -0
  50. package/lib/resource/package/leaflet/leaflet-heatmap.js +246 -0
  51. package/lib/resource/package/leaflet/leaflet.min.css +1 -0
  52. package/lib/resource/package/leaflet/leaflet.min.js +1 -0
  53. package/lib/resource/position.html +229 -0
  54. package/lib/resource/server-list.html +309 -0
  55. package/lib/resource/traffic.html +207 -0
  56. package/lib/util/baiduTranslate.d.ts +2 -0
  57. package/lib/util/baiduTranslate.js +30 -0
  58. package/lib/util/common.d.ts +1 -0
  59. package/lib/util/common.js +5 -0
  60. package/lib/util/constant.d.ts +19 -0
  61. package/lib/util/constant.js +36 -0
  62. package/package.json +48 -0
  63. package/readme.md +86 -0
@@ -0,0 +1,45 @@
1
+ /**
2
+ * 查询服务器列表
3
+ */
4
+ export function serverList(http: any): Promise<{
5
+ error: boolean;
6
+ }>;
7
+ /**
8
+ * 查询在线玩家
9
+ */
10
+ export function mapPlayerList(http: any, serverId: any, ax: any, ay: any, bx: any, by: any): Promise<{
11
+ error: boolean;
12
+ }>;
13
+ /**
14
+ * 查询玩家信息
15
+ */
16
+ export function playerInfo(http: any, tmpId: any): Promise<{
17
+ code: any;
18
+ error: boolean;
19
+ } | {
20
+ error: boolean;
21
+ }>;
22
+ /**
23
+ * DLC列表
24
+ */
25
+ export function dlcList(http: any, type: any): Promise<{
26
+ error: boolean;
27
+ }>;
28
+ /**
29
+ * 玩家里程排行
30
+ */
31
+ export function mileageRankingList(http: any, rankingType: any, tmpId: any): Promise<{
32
+ error: boolean;
33
+ }>;
34
+ /**
35
+ * 查询玩家历史数据
36
+ */
37
+ export function mapPlayerHistory(http: any, tmpId: any, serverId: any, startTime: any, endTime: any): Promise<{
38
+ error: boolean;
39
+ }>;
40
+ /**
41
+ * 获取 TMP 版本信息
42
+ */
43
+ export function tmpVersion(http: any): Promise<{
44
+ error: boolean;
45
+ }>;
@@ -0,0 +1,158 @@
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
+ /**
137
+ * 获取 TMP 版本信息
138
+ */
139
+ async tmpVersion(http) {
140
+ let result = null;
141
+ try {
142
+ result = await http.get(`${BASE_API}/other/tmpVersion`);
143
+ }
144
+ catch {
145
+ return {
146
+ error: true
147
+ };
148
+ }
149
+ // 拼接返回数据
150
+ let data = {
151
+ error: result.code !== 200
152
+ };
153
+ if (!data.error) {
154
+ data.data = result.data;
155
+ }
156
+ return data;
157
+ },
158
+ };
@@ -0,0 +1,34 @@
1
+ /**
2
+ * 查询玩家信息
3
+ */
4
+ export function player(http: any, tmpId: any): Promise<{
5
+ error: any;
6
+ }>;
7
+ /**
8
+ * 查询服务器列表
9
+ */
10
+ export function servers(http: any): Promise<{
11
+ error: any;
12
+ }>;
13
+ /**
14
+ * 查询玩家封禁信息
15
+ */
16
+ export function bans(http: any, tmpId: any): Promise<{
17
+ error: any;
18
+ }>;
19
+ /**
20
+ * 游戏版本
21
+ */
22
+ export function version(http: any): Promise<{
23
+ error: boolean;
24
+ data?: undefined;
25
+ } | {
26
+ error: boolean;
27
+ data: any;
28
+ }>;
29
+ /**
30
+ * 查询车队成员信息
31
+ */
32
+ export function vtcMember(http: any, vtcId: any, memberId: any): Promise<{
33
+ error: any;
34
+ }>;
@@ -0,0 +1,110 @@
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
+ };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 区域查询玩家
3
+ */
4
+ export function area(http: any, serverId: any, x1: any, y1: any, x2: any, y2: any): Promise<{
5
+ error: boolean;
6
+ }>;
@@ -0,0 +1,25 @@
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
+ };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * 查询线上信息
3
+ */
4
+ export function online(http: any, tmpId: any): Promise<{
5
+ error: any;
6
+ }>;
7
+ /**
8
+ * 查询热门交通数据
9
+ */
10
+ export function trafficTop(http: any, serverName: any): Promise<{
11
+ error: boolean;
12
+ }>;
@@ -0,0 +1,32 @@
1
+ const PROXY_API = 'https://api.codetabs.com/v1/proxy/?quest=';
2
+ const DIRECT_API = 'https://api.truckyapp.com';
3
+ module.exports = {
4
+ /**
5
+ * 查询线上信息
6
+ */
7
+ async online(http, tmpId) {
8
+ const path = `/v3/map/online?playerID=${tmpId}`;
9
+ for (const base of [DIRECT_API, PROXY_API]) {
10
+ try {
11
+ const result = await http.get(`${base}${base === PROXY_API ? encodeURIComponent(DIRECT_API + path) : path}`);
12
+ if (!result || !result.response || result.response.error) continue;
13
+ return { error: false, data: result.response };
14
+ } catch {}
15
+ }
16
+ return { error: true };
17
+ },
18
+ /**
19
+ * 查询热门交通数据
20
+ */
21
+ async trafficTop(http, serverName) {
22
+ const path = `/v2/traffic/top?game=ets2&server=${serverName}`;
23
+ for (const base of [DIRECT_API, PROXY_API]) {
24
+ try {
25
+ const result = await http.get(`${base}${base === PROXY_API ? encodeURIComponent(DIRECT_API + path) : path}`);
26
+ if (!result || !result.response || result.response.length <= 0) continue;
27
+ return { error: false, data: result.response };
28
+ } catch {}
29
+ }
30
+ return { error: true };
31
+ }
32
+ };
@@ -0,0 +1,2 @@
1
+ declare function _exports(ctx: any, cfg: any, session: any, tmpId: any): Promise<string>;
2
+ export = _exports;
@@ -0,0 +1,19 @@
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
+ };
@@ -0,0 +1,3 @@
1
+ declare function _exports(ctx: any, session: any): Promise<segment | "未启用 Puppeteer 功能" | "渲染异常,请重试">;
2
+ export = _exports;
3
+ import { segment } from "@koishijs/core";
@@ -0,0 +1,33 @@
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, deviceScaleFactor: 2 });
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
+ };
@@ -0,0 +1,3 @@
1
+ declare function _exports(ctx: any, session: any, serverType: any, tmpId: any): Promise<string | segment>;
2
+ export = _exports;
3
+ import { segment } from "@koishijs/core";
@@ -0,0 +1,82 @@
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 `🔄请绑定玩家ID编号`;
14
+ }
15
+ // 如果没有传入tmpId,尝试从数据库查询绑定信息
16
+ if (!tmpId) {
17
+ let guildBindData = await guildBind.get(ctx.database, session.platform, session.userId);
18
+ if (!guildBindData) {
19
+ return `🔄请绑定玩家ID编号`;
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: mapPlayerHistoryArr
59
+ };
60
+ let page;
61
+ try {
62
+ page = await ctx.puppeteer.page();
63
+ await page.setViewport({ width: 1000, height: 1000, deviceScaleFactor: 2 });
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
+ };
@@ -0,0 +1,3 @@
1
+ declare function _exports(ctx: any, session: any, rankingType: any): Promise<segment | "未启用 Puppeteer 功能" | "渲染异常,请重试" | "查询排行榜信息失败" | "暂无数据">;
2
+ export = _exports;
3
+ import { segment } from "@koishijs/core";
@@ -0,0 +1,55 @@
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, deviceScaleFactor: 2 });
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
+ };
@@ -0,0 +1,3 @@
1
+ declare function _exports(ctx: any, cfg: any, session: any, tmpId: any): Promise<segment | "渲染异常,请重试" | "未启用 puppeteer 服务" | "请输入正确的玩家编号,或绑定玩家编号" | "查询玩家信息失败,请重试" | "查询玩家位置信息失败,请重试" | "玩家离线">;
2
+ export = _exports;
3
+ import { segment } from "@koishijs/core";