miao-plugin/components/profile-data/miao.js
yoimiya-kokomi 67394bf623 增加#添加刻晴图像命令,感谢 **@叶**
* 可通过命令上传添加指定角色图片,上传至 **resources/character-img/刻晴/upload**
* 请将图像与命令一同发送,后续会支持at图像及命令后发送图像
部分功能的页面文案及功能优化
2022-06-28 04:46:49 +08:00

221 lines
5.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import fetch from "node-fetch";
import lodash from "lodash";
import Character from "../models/Character.js";
import moment from "moment";
import { artiIdx, artiSetMap, attrMap } from "./miao-meta.js";
import cmeta from "./enka-char.js";
const url = "http://49.232.91.210/profile";
let Miao = {
key: "miao",
cd: 1,
async request({ e, uid, avatar = '', config }) {
let profileApi = config.miaoApi && lodash.isFunction(config.miaoApi) ? config.miaoApi : function ({ uid }) {
return `http://49.232.91.210/profile/list?uid=${uid}`
};
let api = profileApi({ uid, avatar });
let data;
let req = await fetch(api);
data = await req.json();
if (data.status !== 0) {
e.reply(data.msg || "请求失败");
return false;
}
if (!data.uidListData || data.uidListData.length === 0) {
e.reply(`请打开游戏内角色展柜的“显示详情”后等待5分钟重新获取面板`);
return false;
}
return Miao.getData(uid, data);
},
getData(uid, data) {
let ret = {
uid,
chars: {}
}
lodash.forEach({
name: "nickname",
//avatar: "profilePicture.avatarId",
lv: "level"
}, (src, key) => {
ret[key] = lodash.get(data, src, "");
})
lodash.forEach(data.uidListData, (ds) => {
let char = Miao.getAvatar(ds);
ret.chars[char.id] = char;
})
return ret;
},
getAvatar(ds) {
let char = Character.get(ds.usernameid);
let now = moment();
return {
id: ds.usernameid,
name: char ? char.name : "",
dataSource: "miao-pre",
updateTime: now.format("YYYY-MM-DD HH:mm:ss"),
lv: ds.level
};
},
async getCharData(uid, ds, saveCharData) {
if (ds.dataSource !== "miao-pre" || !ds.id) {
return ds;
}
try {
let api = `${url}/detail?uid=${uid}&avatar=${ds.id}`;
let req = await fetch(api);
let data = await req.json();
if (data.status === 0 && data.uidData) {
data = Miao.getAvatarDetail(data);
if (data) {
saveCharData(uid, data);
return data;
}
}
return ds;
} catch (err) {
console.log(err);
return ds;
}
},
getAvatarDetail(data) {
let ds = data.uidData;
let char = Character.get(ds.id);
let now = moment();
return {
id: ds.id,
name: char ? char.name : "",
dataSource: "miao",
updateTime: now.format("YYYY-MM-DD HH:mm:ss"),
lv: ds.level,
fetter: ds.fetterLevel,
attr: Miao.getAttr(data.uidDataCombatValue),
weapon: Miao.getWeapon(ds.weapon),
artis: Miao.getArtifact(data.uidDataByReliquary),
cons: ds.constellationNum,
talent: Miao.getTalent(char.id, ds.skill),
_priority: 10
};
},
getAttr(data) {
let ret = {};
lodash.forEach({
atk: "attack",
atkBase: "baseATK",
hp: "health",
hpBase: "baseHP",
def: "defense",
defBase: "baseDEF",
mastery: "elementMastery",
cRate: {
src: "critRate",
pct: true
},
cDmg: {
src: "critDamage",
pct: true
},
hInc: {
src: "heal",
pct: true
},
recharge: {
src: "recharge",
pct: true
}
}, (cfg, key) => {
if (!lodash.isObject(cfg)) {
cfg = { src: cfg };
}
let val = data[cfg.src] || 0;
if (cfg.pct) {
val = val * 100
}
ret[key] = val;
})
let maxDmg = 0, hurt = data.addHurt || {};
lodash.forEach("fire,elec,water,grass,wind,rock,ice".split(","), (key) => {
maxDmg = Math.max(hurt[key] * 100, maxDmg);
});
ret.dmgBonus = maxDmg;
ret.phyBonus = hurt.physical * 100;
return ret;
},
getWeapon(weapon) {
return {
name: weapon.name,
star: weapon.rank,
level: weapon.level,
promote: weapon.promoteLevel,
affix: (weapon.affixLevel || 0) + 1
}
},
getArtifact(data) {
let ret = {};
let get = function (d) {
if (!d) {
return [];
}
let name = d.name;
name = name.replace("FIGHT_PROP_", "");
if (!attrMap[name]) {
return [];
}
let value = d.value;
if (value && value < 1) {
value = value * 100;
}
return [attrMap[name], value];
}
lodash.forEach(data, (ds) => {
let sub = ds.appendAffix || [];
let idx = artiIdx[ds.type];
if (!idx) {
return;
}
ret[`arti${idx}`] = {
name: ds.name,
set: artiSetMap[ds.name] || "",
level: ds.level,
main: get(ds.mainAffix),
attrs: [
get(sub[0]),
get(sub[1]),
get(sub[2]),
get(sub[3])
]
}
})
return ret;
},
getTalent(charid, data = {}) {
let cm = cmeta[charid] || {};
let cn = cm.Skills || {};
let idx = 1;
let idxMap = { 0: 'a', 1: 'e', 2: 'q', 'a': 'a', 's': 'e', 'e': 'q' };
lodash.forEach(cn, (n, id) => {
let nRet = /skill_(\w)/.exec(n.toLowerCase());
idxMap[id] = nRet && nRet[1] ? idxMap[nRet[1]] : idxMap[idx];
idx++;
});
let ret = {};
lodash.forEach(data, (ds) => {
let key = idxMap[ds.id];
ret[key] = {
level_original: ds.level,
level_current: ds.level
}
})
return ret;
},
}
export default Miao;