diff --git a/README.md b/README.md index 7350297..96500b5 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ > [!tip] > 说明 +> > 插件依靠社区维护,发起者随缘更新,但是ZZZure组织成员会对PR进行合并,你可以在PR页面@协助者进行合并。 # 安装 diff --git a/apps/gachalog.js b/apps/gachalog.js index 56a4779..362410b 100644 --- a/apps/gachalog.js +++ b/apps/gachalog.js @@ -166,7 +166,7 @@ export class GachaLog extends ZZZPlugin { ); } await this.reply( - await common.makeForwardMsg(this.e, msg, '抽卡记录更新成功') + await common.makeForwardMsg(this.e, msg.join('\n'), '抽卡记录更新成功') ); return false; } diff --git a/lib/download.js b/lib/download.js index ea736f6..a99ebc4 100644 --- a/lib/download.js +++ b/lib/download.js @@ -1,6 +1,11 @@ import path from 'path'; import fs from 'fs'; -import { ZZZ_SQUARE_AVATAR, ZZZ_SQUARE_BANGBOO } from './mysapi/api.js'; +import { + ZZZ_SQUARE_AVATAR, + ZZZ_SQUARE_BANGBOO, + NEW_ZZZ_SQUARE_BANGBOO, + NEW_ZZZ_SQUARE_AVATAR, +} from './mysapi/api.js'; import { imageResourcesPath } from './path.js'; import { char, equip, weapon } from './convert.js'; import { getResourceRemotePath } from './assets.js'; @@ -46,6 +51,23 @@ export const downloadFile = async (url, savePath) => { } }; +/** + * 查看文件是否存在,如果存在则返回路径,否则下载文件 + * @param {string} url 下载地址 + * @param {string} savePath 保存路径 + * @returns {Promise} 保存路径 + */ +export const checkFile = async (url, savePath) => { + if (fs.existsSync(savePath)) { + const stats = fs.statSync(savePath); + if (stats.size > 0) { + return savePath; + } + } + const download = await downloadFile(url, savePath); + return download; +}; + /** * 获取角色头像(方形) * @param {string | number} charID @@ -54,16 +76,13 @@ export const downloadFile = async (url, savePath) => { export const getSquareAvatar = async charID => { const filename = `role_square_avatar_${charID}.png`; const avatarPath = path.join(ZZZ_SQUARE_AVATAR_PATH, filename); - if (fs.existsSync(avatarPath)) { - const stats = fs.statSync(avatarPath); - if (stats.size > 0) { - return avatarPath; - } + let url = `${ZZZ_SQUARE_AVATAR}/${filename}`; + let result = await checkFile(url, avatarPath); + if (!result) { + url = `${NEW_ZZZ_SQUARE_AVATAR}/${filename}`; + result = await checkFile(url, avatarPath); } - const url = `${ZZZ_SQUARE_AVATAR}/${filename}`; - const savePath = avatarPath; - const download = await downloadFile(url, savePath); - return download; + return result; }; /** @@ -77,16 +96,9 @@ export const getSmallSquareAvatar = async charID => { if (!sprite) return null; const filename = `IconRoleGeneral${sprite}.png`; const avatarPath = path.join(ZZZ_SMALL_SQUARE_AVATAR_PATH, filename); - if (fs.existsSync(avatarPath)) { - const stats = fs.statSync(avatarPath); - if (stats.size > 0) { - return avatarPath; - } - } const url = await getResourceRemotePath('role_general', filename); - const savePath = avatarPath; - const download = await downloadFile(url, savePath); - return download; + const result = await checkFile(url, avatarPath); + return result; }; /** @@ -97,16 +109,13 @@ export const getSmallSquareAvatar = async charID => { export const getSquareBangboo = async bangbooId => { const filename = `bangboo_rectangle_avatar_${bangbooId}.png`; const bangbooPath = path.join(ZZZ_SQUARE_BANGBOO_PATH, filename); - if (fs.existsSync(bangbooPath)) { - const stats = fs.statSync(bangbooPath); - if (stats.size > 0) { - return bangbooPath; - } + let url = `${ZZZ_SQUARE_BANGBOO}/${filename}`; + let result = await checkFile(url, bangbooPath); + if (!result) { + url = `${NEW_ZZZ_SQUARE_BANGBOO}/${filename}`; + result = await checkFile(url, bangbooPath); } - const url = `${ZZZ_SQUARE_BANGBOO}/${filename}`; - const savePath = bangbooPath; - const download = await downloadFile(url, savePath); - return download; + return result; }; /** @@ -116,18 +125,17 @@ export const getSquareBangboo = async bangbooId => { */ export const getWeaponImage = async id => { const name = weapon.IDToWeaponFileName(id); - const filename = `${name}.png`; + let filename = `${name}_High.png`; const weaponPath = path.join(ZZZ_WEAPON_PATH, filename); - if (fs.existsSync(weaponPath)) { - const stats = fs.statSync(weaponPath); - if (stats.size > 0) { - return weaponPath; - } - } const url = await getResourceRemotePath('weapon', filename); - const savePath = weaponPath; - const download = await downloadFile(url, savePath); - return download; + let result = await checkFile(url, weaponPath); + if (!result) { + filename = `${name}.png`; + const weaponPath = path.join(ZZZ_WEAPON_PATH, filename); + const url = await getResourceRemotePath('weapon', filename); + result = await checkFile(url, weaponPath); + } + return result; }; /** @@ -140,16 +148,9 @@ export const getRoleImage = async id => { if (!sprite) return null; const filename = `IconRole${sprite}.png`; const rolePath = path.join(ZZZ_ROLE_PATH, filename); - if (fs.existsSync(rolePath)) { - const stats = fs.statSync(rolePath); - if (stats.size > 0) { - return rolePath; - } - } const url = await getResourceRemotePath('role', filename); - const savePath = rolePath; - const download = await downloadFile(url, savePath); - return download; + const result = await checkFile(url, rolePath); + return result; }; /** @@ -162,16 +163,9 @@ export const getRoleCircleImage = async id => { if (!sprite) return null; const filename = `IconRoleCircle${sprite}.png`; const roleCirclePath = path.join(ZZZ_ROLE_CIRCLE_PATH, filename); - if (fs.existsSync(roleCirclePath)) { - const stats = fs.statSync(roleCirclePath); - if (stats.size > 0) { - return roleCirclePath; - } - } const url = await getResourceRemotePath('role_circle', filename); - const savePath = roleCirclePath; - const download = await downloadFile(url, savePath); - return download; + const result = await checkFile(url, roleCirclePath); + return result; }; /** @@ -183,16 +177,9 @@ export const getSuitImage = async suitId => { const suitName = equip.equipIdToSprite(suitId); const filename = `${suitName}.png`; const suitPath = path.join(ZZZ_SUIT_PATH, filename); - if (fs.existsSync(suitPath)) { - const stats = fs.statSync(suitPath); - if (stats.size > 0) { - return suitPath; - } - } const url = await getResourceRemotePath('suit', filename); - const savePath = suitPath; - const download = await downloadFile(url, savePath); - return download; + const result = await checkFile(url, suitPath); + return result; }; /** @@ -204,14 +191,7 @@ export const getSuit3DImage = async suitId => { const suitName = equip.equipIdToSprite(suitId); const filename = `${suitName}_3d.png`; const suitPath = path.join(ZZZ_SUIT_3D_PATH, filename); - if (fs.existsSync(suitPath)) { - const stats = fs.statSync(suitPath); - if (stats.size > 0) { - return suitPath; - } - } const url = await getResourceRemotePath('suit_3d', filename); - const savePath = suitPath; - const download = await downloadFile(url, savePath); - return download; + const result = await checkFile(url, suitPath); + return result; }; diff --git a/lib/mysapi/api.js b/lib/mysapi/api.js index 840b748..37f6ed2 100644 --- a/lib/mysapi/api.js +++ b/lib/mysapi/api.js @@ -15,6 +15,9 @@ export const ZZZ_API = `${NEW_URL}/event/game_record_zzz/api/zzz`, export const ZZZ_RES = 'https://act-webstatic.mihoyo.com/game_record/zzz', ZZZ_SQUARE_AVATAR = `${ZZZ_RES}/role_square_avatar`, ZZZ_SQUARE_BANGBOO = `${ZZZ_RES}/bangboo_rectangle_avatar`; +export const NEW_ZZZ_RES = 'https://act-webstatic.mihoyo.com/game_record/nap', + NEW_ZZZ_SQUARE_AVATAR = `${NEW_ZZZ_RES}/role_square_avatar`, + NEW_ZZZ_SQUARE_BANGBOO = `${NEW_ZZZ_RES}/bangboo_rectangle_avatar`; export const PUBLIC_API = 'https://public-operation-nap.mihoyo.com', PUBILC_GACHA_LOG_API = `${PUBLIC_API}/common/gacha_record/api`, diff --git a/resources/map/PartnerId2Data.json b/resources/map/PartnerId2Data.json index e6ccb28..7006c5e 100644 --- a/resources/map/PartnerId2Data.json +++ b/resources/map/PartnerId2Data.json @@ -1,63 +1,21 @@ { - "1011": { - "sprite_id": "01", - "name": "安比", - "full_name": "安比·德玛拉", - "en_name": "Anby" - }, - "1021": { - "sprite_id": "11", - "name": "猫又", - "full_name": "猫宫 又奈", - "en_name": "Nekomata" - }, - "1031": { - "sprite_id": "12", - "name": "妮可", - "full_name": "妮可·德玛拉", - "en_name": "Nicole" - }, - "1041": { - "sprite_id": "05", - "name": "「11号」", - "full_name": "「11号」", - "en_name": "Soldier 11" - }, "1061": { "sprite_id": "09", "name": "可琳", "full_name": "可琳·威克斯", "en_name": "Corin" }, - "1081": { - "sprite_id": "10", - "name": "比利", - "full_name": "比利·奇德", - "en_name": "Billy" + "1251": { + "sprite_id": "29", + "name": "青衣", + "full_name": "青衣", + "en_name": "QingYi" }, - "1091": { - "sprite_id": "10", - "name": "雅", - "full_name": "星见 雅", - "en_name": "Miyabi" - }, - "1101": { - "sprite_id": "14", - "name": "珂蕾妲", - "full_name": "珂蕾妲·贝洛伯格", - "en_name": "Koleda" - }, - "1111": { - "sprite_id": "15", - "name": "安东", - "full_name": "安东·伊万诺夫", - "en_name": "Anton" - }, - "1121": { - "sprite_id": "16", - "name": "本", - "full_name": "本·比格", - "en_name": "Ben" + "1261": { + "sprite_id": "24", + "name": "简", + "full_name": "简·杜", + "en_name": "Jane" }, "1131": { "sprite_id": "17", @@ -65,23 +23,17 @@ "full_name": "苍角", "en_name": "Soukaku" }, - "1141": { - "sprite_id": "18", - "name": "莱卡恩", - "full_name": "冯·莱卡恩", - "en_name": "Lycaon" + "1201": { + "sprite_id": "", + "name": "悠真", + "full_name": "悠真", + "en_name": "Harumasa" }, - "1151": { - "sprite_id": "27", - "name": "露西", - "full_name": "露西亚娜·德·蒙特夫", - "en_name": "Lucy" - }, - "1161": { - "sprite_id": "27", - "name": "莱特", - "full_name": "莱特", - "en_name": "Lighter" + "1081": { + "sprite_id": "10", + "name": "比利", + "full_name": "比利·奇德", + "en_name": "Billy" }, "1181": { "sprite_id": "20", @@ -89,29 +41,47 @@ "full_name": "格莉丝·霍华德", "en_name": "Grace" }, - "1191": { - "sprite_id": "21", - "name": "艾莲", - "full_name": "艾莲·乔", - "en_name": "Ellen" + "2011": { + "sprite_id": "", + "name": "哲", + "full_name": "哲", + "en_name": "Wise" }, - "1201": { - "sprite_id": "21", - "name": "悠真", - "full_name": "浅羽 悠真", - "en_name": "Harumasa" + "1011": { + "sprite_id": "01", + "name": "安比", + "full_name": "安比·德玛拉", + "en_name": "Anby" }, - "1211": { - "sprite_id": "22", - "name": "丽娜", - "full_name": "亚历山德丽娜·莎芭丝缇安", - "en_name": "Rina" + "1071": { + "sprite_id": "", + "name": "凯撒", + "full_name": "凯撒", + "en_name": "Caesar" }, - "1221": { - "sprite_id": "22", - "name": "柳", - "full_name": "月城 柳", - "en_name": "Yanagi" + "2021": { + "sprite_id": "", + "name": "铃", + "full_name": "铃", + "en_name": "Belle" + }, + "1031": { + "sprite_id": "12", + "name": "妮可", + "full_name": "妮可·德玛拉", + "en_name": "Nicole" + }, + "1281": { + "sprite_id": "28", + "name": "派派", + "full_name": "派派", + "en_name": "Piper" + }, + "1021": { + "sprite_id": "11", + "name": "猫又", + "full_name": "猫宫又奈", + "en_name": "Nekomata" }, "1241": { "sprite_id": "23", @@ -119,34 +89,82 @@ "full_name": "朱鸢", "en_name": "Zhu Yuan" }, - "1251": { - "sprite_id": "23", - "name": "青衣", - "full_name": "青衣", - "en_name": "QingYi" + "1141": { + "sprite_id": "18", + "name": "莱卡恩", + "full_name": "冯·莱卡恩", + "en_name": "Lycaon" + }, + "1161": { + "sprite_id": "", + "name": "莱特", + "full_name": "莱特", + "en_name": "Lighter" + }, + "1111": { + "sprite_id": "15", + "name": "安东", + "full_name": "安东·伊万诺夫", + "en_name": "Anton" + }, + "1041": { + "sprite_id": "05", + "name": "「11号」", + "full_name": "「11号」", + "en_name": "Soldier 11" + }, + "1091": { + "sprite_id": "", + "name": "雅", + "full_name": "雅", + "en_name": "Miyabi" + }, + "1121": { + "sprite_id": "16", + "name": "本", + "full_name": "本·比格", + "en_name": "Ben" + }, + "1211": { + "sprite_id": "22", + "name": "丽娜", + "full_name": "亚历山德丽娜·莎芭丝缇安", + "en_name": "Rina" + }, + "1151": { + "sprite_id": "27", + "name": "露西", + "full_name": "露西", + "en_name": "Lucy" + }, + "1101": { + "sprite_id": "14", + "name": "珂蕾妲", + "full_name": "珂蕾妲·贝洛伯格", + "en_name": "Koleda" + }, + "1221": { + "sprite_id": "", + "name": "柳", + "full_name": "柳", + "en_name": "Yanagi" }, "1271": { - "sprite_id": "23", + "sprite_id": "30", "name": "赛斯", "full_name": "赛斯·洛威尔", "en_name": "Seth" }, - "1281": { - "sprite_id": "28", - "name": "派派", - "full_name": "派派·韦尔", - "en_name": "Piper" + "1171": { + "sprite_id": "", + "name": "柏妮思", + "full_name": "柏妮思", + "en_name": "Burnice" }, - "2011": { - "sprite_id": "28", - "name": "哲", - "full_name": "哲", - "en_name": "Wise" - }, - "2021": { - "sprite_id": "28", - "name": "铃", - "full_name": "铃", - "en_name": "Belle" + "1191": { + "sprite_id": "21", + "name": "艾莲", + "full_name": "艾莲·乔", + "en_name": "Ellen" } } diff --git a/resources/map/WeaponId2Sprite.json b/resources/map/WeaponId2Sprite.json index 58ef7a4..8821a04 100644 --- a/resources/map/WeaponId2Sprite.json +++ b/resources/map/WeaponId2Sprite.json @@ -1,47 +1,51 @@ { - "12001": "Weapon_B_Common_01", - "12002": "Weapon_B_Common_02", - "12003": "Weapon_B_Common_03", - "12004": "Weapon_B_Common_04", - "12005": "Weapon_B_Common_05", - "12006": "Weapon_B_Common_06", - "12007": "Weapon_B_Common_07", - "12008": "Weapon_B_Common_08", + "13108": "Weapon_A_1081", + "14104": "Weapon_S_1041", "12009": "Weapon_B_Common_09", - "12010": "Weapon_B_Common_10", - "12011": "Weapon_B_Common_11", - "12012": "Weapon_B_Common_12", - "12013": "Weapon_B_Common_13", - "12014": "Weapon_B_Common_14", - "13001": "Weapon_A_Common_01", + "13103": "Weapon_A_1031", "13002": "Weapon_A_Common_02", - "13003": "Weapon_A_Common_03", - "13004": "Weapon_A_Common_04", - "13005": "Weapon_A_Common_05", - "13006": "Weapon_A_Common_06", - "13007": "Weapon_A_Common_07", + "13113": "Weapon_A_1131", + "12003": "Weapon_B_Common_03", + "12002": "Weapon_B_Common_02", "13008": "Weapon_A_Common_08", - "13009": "Weapon_A_Common_09", + "14001": "Weapon_S_Common_01", + "13003": "Weapon_A_Common_03", "13010": "Weapon_A_Common_10", "13011": "Weapon_A_Common_11", - "13101": "Weapon_A_1011", - "13103": "Weapon_A_1031", - "13106": "Weapon_A_1061", - "13108": "Weapon_A_1081", - "13111": "Weapon_A_1111", - "13112": "Weapon_A_1121", - "13113": "Weapon_A_1131", - "13115": "Weapon_A_1151", - "13128": "Weapon_A_1281", - "14001": "Weapon_S_Common_01", - "14002": "Weapon_S_Common_02", - "14003": "Weapon_S_Common_03", "14102": "Weapon_S_1021", - "14104": "Weapon_S_1041", - "14110": "Weapon_S_1101", "14114": "Weapon_S_1141", "14118": "Weapon_S_1181", + "12011": "Weapon_B_Common_11", + "13007": "Weapon_A_Common_07", + "12005": "Weapon_B_Common_05", + "13112": "Weapon_A_1121", + "12007": "Weapon_B_Common_07", "14119": "Weapon_S_1191", + "14124": "Weapon_S_1241", + "13101": "Weapon_A_1011", + "14110": "Weapon_S_1101", + "12013": "Weapon_B_Common_13", + "12006": "Weapon_B_Common_06", + "13004": "Weapon_A_Common_04", + "12014": "Weapon_B_Common_14", + "13005": "Weapon_A_Common_05", + "13127": "Weapon_A_1271", + "13111": "Weapon_A_1111", "14121": "Weapon_S_1211", - "14124": "Weapon_S_1241" + "12010": "Weapon_B_Common_10", + "13115": "Weapon_A_1151", + "13009": "Weapon_A_Common_09", + "13013": "Weapon_A_Common_13", + "12004": "Weapon_B_Common_04", + "14126": "Weapon_S_1261", + "12008": "Weapon_B_Common_08", + "12001": "Weapon_B_Common_01", + "13106": "Weapon_A_1061", + "14002": "Weapon_S_Common_02", + "14125": "Weapon_S_1251", + "13001": "Weapon_A_Common_01", + "13006": "Weapon_A_Common_06", + "12012": "Weapon_B_Common_12", + "14003": "Weapon_S_Common_03", + "13128": "Weapon_A_1281" }