koishi-plugin-tmp-bot
Version:
欧洲卡车模拟2 TMP查询插件,不会部署的可以直接使用此机器人->QQ:3523283907
83 lines (82 loc) • 3.13 kB
JavaScript
const { segment } = require('koishi');
const dayjs = require('dayjs');
const { resolve } = require('path');
const common = require('../util/common');
const { PromodsIds, ServerType } = require('../util/constant');
const evmOpenApi = require('../api/evmOpenApi');
const guildBind = require('../database/guildBind');
module.exports = async (ctx, session, serverType, tmpId) => {
if (!ctx.puppeteer) {
return '未启用 puppeteer 服务';
}
if (tmpId && isNaN(tmpId)) {
return `请输入正确的玩家编号,或绑定玩家编号`;
}
// 如果没有传入tmpId,尝试从数据库查询绑定信息
if (!tmpId) {
let guildBindData = await guildBind.get(ctx.database, session.platform, session.userId);
if (!guildBindData) {
return `请输入正确的玩家编号,或绑定玩家编号`;
}
tmpId = guildBindData.tmp_id;
}
// 查询玩家信息
let playerInfo = await evmOpenApi.playerInfo(ctx.http, tmpId);
if (playerInfo.error && playerInfo.code === 10001) {
return '玩家不存在';
}
else if (playerInfo.error) {
return '查询玩家信息失败,请重试';
}
// 查询当日历史位置数据
const startTime = dayjs().startOf('day').format('YYYY-MM-DD HH:mm:ss');
const endTime = dayjs().endOf('day').format('YYYY-MM-DD HH:mm:ss');
let mapPlayerHistory = await evmOpenApi.mapPlayerHistory(ctx.http, tmpId, null, startTime, endTime);
if (mapPlayerHistory.error) {
return '查询玩家历史位置数据失败,请稍后重试';
}
// 过滤非对应服务器数据
const promodsIdSet = new Set(PromodsIds);
const mapPlayerHistoryArr = mapPlayerHistory.data.filter(item => {
if (ServerType.ets === serverType) {
return !promodsIdSet.has(item.serverId);
}
else if (ServerType.promods === serverType) {
return promodsIdSet.has(item.serverId);
}
return false;
});
if (mapPlayerHistoryArr.length === 0) {
return `当日暂无数据`;
}
// 拼接数据
let data = {
mapType: ServerType.promods === serverType ? 'promods' : 'ets',
name: playerInfo.data.name,
smallAvatarUrl: playerInfo.data.smallAvatarUrl,
todayMileage: playerInfo.data.todayMileage,
points: mapPlayerHistoryArr
};
let page;
try {
page = await ctx.puppeteer.page();
await page.setViewport({ width: 1000, height: 1000, deviceScaleFactor: 1.5 });
await page.goto(`file:///${resolve(__dirname, '../resource/footprint.html')}`);
await page.evaluate(`init(${JSON.stringify(data)})`);
await common.sleep(100);
await page.waitForNetworkIdle();
const element = await page.$("#container");
return (segment.image(await element.screenshot({
encoding: "binary"
}), "image/jpg"));
}
catch (e) {
return '渲染异常,请重试';
}
finally {
if (page) {
await page.close();
}
}
return `OK: ` + playerInfo.data.name;
};