From 80b39c9864e19b3a8bc99c271a1ea6c071d740d9 Mon Sep 17 00:00:00 2001 From: UCPr <2032385471@qq.com> Date: Wed, 2 Jul 2025 02:17:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=A7=92=E8=89=B2=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E6=8F=90=E7=A4=BA=E4=BF=A1=E6=81=AF#135?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/damage.js | 6 ++++-- apps/panel.js | 18 ++++++++++++------ lib/avatar.js | 8 ++++---- model/Enka/enkaApi.js | 17 +++++++++++++++-- 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/apps/damage.js b/apps/damage.js index 6e40d98..6e1f043 100644 --- a/apps/damage.js +++ b/apps/damage.js @@ -30,8 +30,10 @@ export class Damage extends ZZZPlugin { if (!match) return false const name = match[4] const data = getPanelOrigin(uid, name) - if (!data) { - return this.reply(`未找到角色${name}的面板信息,请先刷新面板`) + if (data === false) { + return this.reply(`角色${name}不存在,请确保角色名称/别称存在`) + } else if (data === null) { + return this.reply(`暂无角色${name}面板数据,请先%更新面板`) } const parsedData = formatPanelData(data) const calc = avatar_calc(parsedData) diff --git a/apps/panel.js b/apps/panel.js index e106c6f..7f6113f 100644 --- a/apps/panel.js +++ b/apps/panel.js @@ -67,15 +67,20 @@ export class Panel extends ZZZPlugin { let result if (isEnka) { const data = await refreshPanelFromEnka(uid) - await redis.set(`ZZZ:PANEL:${uid}:LASTTIME`, Date.now()); + .catch(err => err) + if (data instanceof Error) { + logger.warn(`Enka服务调用失败:`, data) + return this.reply(`Enka服务调用失败:${data.message}`) + } + await redis.set(`ZZZ:PANEL:${uid}:LASTTIME`, Date.now()) if (typeof data === 'object') { const { playerInfo, panelList } = data if (!panelList.length) { - return this.reply('面板列表为空,请确保已在游戏中展示了对应角色'); + return this.reply('面板列表为空,请确保已于游戏中展示角色') } result = await mergePanel(uid, panelList) await this.getPlayerInfo(playerInfo) - } else if (typeof data === 'number'){ + } else if (typeof data === 'number') { return this.reply(`Enka服务调用失败,状态码:${data}${data === 424 ? '\n版本更新后,须等待一段时间才可正常使用enka服务' : ''}`); } } else { @@ -144,9 +149,10 @@ export class Panel extends ZZZPlugin { if (!match) return false; const name = match[4]; const data = getPanelOrigin(uid, name); - if (!data) { - await this.reply(`未找到角色${name}的面板信息,请确保角色名称/别称存在且已更新面板`); - return; + if (data === false) { + return this.reply(`角色${name}不存在,请确保角色名称/别称存在`); + } else if (data === null) { + return this.reply(`暂无角色${name}面板数据,请先%更新面板`); } let handler = this.e.runtime.handler || {}; diff --git a/lib/avatar.js b/lib/avatar.js index 715a221..3ea10c2 100644 --- a/lib/avatar.js +++ b/lib/avatar.js @@ -144,12 +144,12 @@ export const getPanelListOrigin = uid => { * 获取某个角色的面板数据 * @param {string} uid * @param {string} name - * @returns {ZZZAvatarInfo | null} + * @returns {ZZZAvatarInfo | null | false} */ export const getPanel = (uid, name) => { // 通过名称(包括别名)获取角色 ID const id = char.aliasToID(name); - if (!id) return null; + if (!id) return false; const _data = getPanelData(uid); // 获取所有面板数据 const data = _data.map(item => new ZZZAvatarInfo(item)); @@ -163,11 +163,11 @@ export const getPanel = (uid, name) => { * 获取某个角色的面板数据(原始数据) * @param {string} uid * @param {string} name - * @returns {ZZZAvatarInfo | null} + * @returns {ZZZAvatarInfo | null | false} */ export const getPanelOrigin = (uid, name) => { const id = char.aliasToID(name); - if (!id) return null; + if (!id) return false; const data = getPanelData(uid); // 通过 ID 获取角色数据 const result = data.find(item => item.id === id); diff --git a/model/Enka/enkaApi.js b/model/Enka/enkaApi.js index 1ce23f3..73c83f1 100644 --- a/model/Enka/enkaApi.js +++ b/model/Enka/enkaApi.js @@ -60,10 +60,23 @@ export async function refreshPanelFromEnka(uid) { logger.warn('Enka更新面板失败:获取面板数据失败') return res.status } - if (!panelList.length) - console.log('面板列表为空') return { playerInfo: parsePlayerInfo(data.PlayerInfo.SocialDetail), panelList: Enka2Mys(panelList) } } + +// import fs from 'fs' +// const uid = 11070609 +// const res = await fetch(`${EnkaApi}${uid}`, { +// method: 'GET', +// headers: { +// 'User-Agent': 'ZZZ-Plugin/UCPr', +// } +// }) +// if (!res.ok) { +// console.log(`Enka更新面板失败:${res.status} ${res.statusText}`) +// } +// const data = await res.json() +// console.log(data) +// fs.writeFileSync('enkaPanel1.json', JSON.stringify(data, null, 2))