UNPKG

koishi-plugin-tmp-bot

Version:

欧洲卡车模拟2 TMP查询插件,不会部署的可以直接使用此机器人->QQ:3523283907

101 lines (100 loc) 3.9 kB
const dayjs = require('dayjs'); const guildBind = require('../../database/guildBind'); const truckyAppApi = require('../../api/truckyAppApi'); const evmOpenApi = require('../../api/evmOpenApi'); const baiduTranslate = require('../../util/baiduTranslate'); const { resolve } = require("path"); const common = require("../../util/common"); const { segment } = require("koishi"); /** * 用户组 */ const userGroup = { 'Player': '玩家', 'Retired Legend': '退役', 'Game Developer': '游戏开发者', 'Retired Team Member': '退休团队成员', 'Add-On Team': '附加组件团队', 'Game Moderator': '游戏管理员' }; /** * 查询玩家信息 */ module.exports = async (ctx, cfg, session, 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) { return '查询玩家信息失败,请重试'; } // 查询线上信息 let playerMapInfo = await truckyAppApi.online(ctx.http, tmpId); // 拼接数据 let data = {}; data.tmpId = playerInfo.data.tmpId; data.name = playerInfo.data.name; data.steamId = playerInfo.data.steamId; data.registerDate = dayjs(playerInfo.data.registerTime).format('YYYY年MM月DD日'); data.avatarUrl = playerInfo.data.avatarUrl; data.groupColor = playerInfo.data.groupColor; data.groupName = (userGroup[playerInfo.data.groupName] || playerInfo.data.groupName); data.isJoinVtc = playerInfo.data.isJoinVtc; data.vtcName = playerInfo.data.vtcName; data.vtcRole = playerInfo.data.vtcRole; data.isSponsor = playerInfo.data.isSponsor; data.sponsorAmount = playerInfo.data.sponsorAmount; data.sponsorCumulativeAmount = playerInfo.data.sponsorCumulativeAmount; data.sponsorHide = playerInfo.data.sponsorHide; data.isOnline = false; if (playerMapInfo && !playerMapInfo.error) { data.isOnline = playerMapInfo.data.online; if (data.isOnline) { data.onlineServerName = playerMapInfo.data.serverDetails.name; data.onlineCountry = await baiduTranslate(ctx, cfg, playerMapInfo.data.location.poi.country); data.onlineCity = await baiduTranslate(ctx, cfg, playerMapInfo.data.location.poi.realName); data.onlineX = playerMapInfo.data.x; data.onlineY = playerMapInfo.data.y; data.onlineMapType = playerMapInfo.data.serverDetails.id === 50 ? 'promods' : 'ets'; } } data.isBan = playerInfo.data.isBan; data.banUntil = playerInfo.data.banUntil; data.banReason = playerInfo.data.banReason; data.banReasonZh = playerInfo.data.banReasonZh; data.banCount = playerInfo.data.banCount; data.banHide = playerInfo.data.banHide; let page; try { page = await ctx.puppeteer.page(); await page.setViewport({ width: 1000, height: 1000 }); await page.goto(`file:///${resolve(__dirname, '../../resource/query.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 { return '渲染异常,请重试'; } finally { if (page) { await page.close(); } } };