2022-04-04 21:36:44 +00:00
|
|
|
/*
|
|
|
|
* 胡桃数据库的统计
|
|
|
|
*
|
|
|
|
* */
|
|
|
|
import { HutaoApi, Character } from "../components/models.js";
|
2022-04-09 21:33:21 +00:00
|
|
|
import { Cfg } from "../components/index.js";
|
2022-04-04 21:36:44 +00:00
|
|
|
import lodash from "lodash";
|
|
|
|
import { segment } from "oicq";
|
|
|
|
|
|
|
|
export async function consStat(e, { render }) {
|
2022-04-09 21:33:21 +00:00
|
|
|
if (Cfg.isDisable(e, "wiki.abyss")) {
|
|
|
|
return;
|
|
|
|
}
|
2022-04-04 21:36:44 +00:00
|
|
|
|
|
|
|
let consData = await HutaoApi.getCons();
|
|
|
|
if (!consData) {
|
|
|
|
e.reply("暂时无法查询");
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2022-04-09 21:33:21 +00:00
|
|
|
|
|
|
|
|
2022-04-04 21:36:44 +00:00
|
|
|
let msg = e.msg;
|
|
|
|
|
|
|
|
let mode = /持有/.test(msg) ? "char" : "cons";
|
|
|
|
|
|
|
|
let conNum = -1;
|
|
|
|
if (mode === "cons") {
|
|
|
|
lodash.forEach([/0|零/, /1|一/, /2|二/, /3|三/, /4|四/, /5|五/, /6|六|满/], (reg, idx) => {
|
|
|
|
if (reg.test(msg)) {
|
|
|
|
conNum = idx;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!consData && !consData.data) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
let ret = [];
|
|
|
|
|
|
|
|
lodash.forEach(consData.data, (ds) => {
|
|
|
|
let char = Character.get(ds.avatar);
|
|
|
|
|
|
|
|
let data = {
|
|
|
|
name: char.name || ds.avatar,
|
|
|
|
star: char.star || 3,
|
|
|
|
hold: ds.holdingRate
|
|
|
|
};
|
|
|
|
|
|
|
|
if (mode === "char") {
|
|
|
|
data.cons = lodash.map(ds.rate, (c) => {
|
|
|
|
c.value = c.value * ds.holdingRate;
|
|
|
|
return c;
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
data.cons = ds.rate
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ret.push(data);
|
|
|
|
});
|
|
|
|
|
|
|
|
if (conNum > -1) {
|
|
|
|
ret = lodash.sortBy(ret, [`cons[${conNum}].value`]);
|
|
|
|
ret.reverse();
|
|
|
|
} else {
|
|
|
|
ret = lodash.sortBy(ret, ['hold']);
|
|
|
|
}
|
|
|
|
|
|
|
|
let base64 = await render("stat", "character", {
|
|
|
|
chars: ret,
|
|
|
|
abbr: Character.getAbbr(),
|
|
|
|
mode: mode,
|
|
|
|
conNum,
|
|
|
|
lastUpdate: consData.lastUpdate,
|
|
|
|
pct: function (num) {
|
|
|
|
return (num * 100).toFixed(2);
|
2022-04-09 21:33:21 +00:00
|
|
|
},
|
2022-04-27 18:49:24 +00:00
|
|
|
cfgScale: Cfg.scale(1.5)
|
|
|
|
});
|
2022-04-04 21:36:44 +00:00
|
|
|
if (base64) {
|
|
|
|
e.reply(segment.image(`base64://${base64}`));
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
export async function abyssPct(e, { render }) {
|
2022-04-09 21:33:21 +00:00
|
|
|
|
|
|
|
if (Cfg.isDisable(e, "wiki.abyss")) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2022-04-04 21:36:44 +00:00
|
|
|
let abyssData = await HutaoApi.getAbyssPct();
|
|
|
|
if (!abyssData) {
|
|
|
|
e.reply("暂时无法查询");
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
let ret = [], chooseFloor = -1, msg = e.msg;
|
|
|
|
|
|
|
|
const floorName = {
|
|
|
|
"12": "十二层",
|
|
|
|
"11": "十一层",
|
|
|
|
"10": "十层",
|
|
|
|
"9": "九层"
|
|
|
|
};
|
|
|
|
|
|
|
|
// 匹配深渊楼层信息
|
|
|
|
lodash.forEach(floorName, (cn, num) => {
|
|
|
|
let reg = new RegExp(`${cn}|${num}`);
|
|
|
|
if (reg.test(msg)) {
|
|
|
|
chooseFloor = num;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
console.log('floor', chooseFloor);
|
|
|
|
|
|
|
|
|
|
|
|
lodash.forEach(abyssData.data, (floorData) => {
|
|
|
|
let floor = {
|
|
|
|
floor: floorData.floor,
|
|
|
|
|
|
|
|
};
|
|
|
|
let avatars = [];
|
|
|
|
lodash.forEach(floorData.avatarUsage, (ds) => {
|
|
|
|
let char = Character.get(ds.id);
|
|
|
|
if (char) {
|
|
|
|
avatars.push({
|
|
|
|
name: char.name,
|
|
|
|
star: char.star,
|
2022-04-09 21:33:21 +00:00
|
|
|
value: ds.value * 8
|
2022-04-04 21:36:44 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
avatars = lodash.sortBy(avatars, "value", ["asc"]);
|
|
|
|
avatars.reverse();
|
|
|
|
if (chooseFloor === -1) {
|
|
|
|
avatars = avatars.slice(0, 14);
|
|
|
|
}
|
|
|
|
|
|
|
|
ret.push({
|
|
|
|
floor: floorData.floor,
|
|
|
|
avatars
|
|
|
|
});
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
let base64 = await render("stat", "abyss-pct", {
|
|
|
|
abyss: ret,
|
|
|
|
floorName,
|
|
|
|
chooseFloor,
|
|
|
|
lastUpdate: abyssData.lastUpdate,
|
|
|
|
pct: function (num) {
|
|
|
|
return (num * 100).toFixed(2);
|
2022-04-09 21:33:21 +00:00
|
|
|
},
|
2022-04-27 18:49:24 +00:00
|
|
|
cfgScale: Cfg.scale(1.5)
|
|
|
|
});
|
2022-04-04 21:36:44 +00:00
|
|
|
if (base64) {
|
|
|
|
e.reply(segment.image(`base64://${base64}`));
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|