mirror of
https://github.com/yoimiya-kokomi/miao-plugin.git
synced 2024-12-01 11:12:03 +00:00
132 lines
3.2 KiB
JavaScript
132 lines
3.2 KiB
JavaScript
|
import moment from 'moment'
|
|||
|
import lodash from 'lodash'
|
|||
|
import { Player, Material, Weapon, MysApi } from '#miao.models'
|
|||
|
import { Common } from '#miao'
|
|||
|
|
|||
|
const TodayMaterial = {
|
|||
|
|
|||
|
async render (e) {
|
|||
|
let now = moment(new Date())
|
|||
|
if (now.hour() < 4) {
|
|||
|
now = now.add(-1, 'days')
|
|||
|
}
|
|||
|
let week = now.weekday()
|
|||
|
if (week === 6) {
|
|||
|
e.reply('今天周日,全部素材都可以刷哦~')
|
|||
|
return false
|
|||
|
}
|
|||
|
week = week % 3 + 1
|
|||
|
let data = await TodayMaterial.getData(e, week)
|
|||
|
|
|||
|
let uid = e.uid
|
|||
|
|
|||
|
if (!data) {
|
|||
|
e._isReplyed || e.reply(`查询失败,暂未获得#${uid}角色数据,请绑定CK或 #更新面板`)
|
|||
|
return true
|
|||
|
}
|
|||
|
|
|||
|
return await Common.render('wiki/today-material', {
|
|||
|
uid,
|
|||
|
data
|
|||
|
}, { e, scale: 1.1 })
|
|||
|
},
|
|||
|
|
|||
|
async getData (e, week) {
|
|||
|
let mys = await MysApi.init(e)
|
|||
|
if (!mys || !mys.uid) return false
|
|||
|
|
|||
|
let player = Player.create(e)
|
|||
|
// 刷新数据
|
|||
|
await player.refresh({
|
|||
|
detail: 1,
|
|||
|
talent: 1
|
|||
|
})
|
|||
|
|
|||
|
let citys = {}
|
|||
|
let count = 0
|
|||
|
// 添加素材方法
|
|||
|
let addMaterial = (name, data, sortFn = (d) => d.id) => {
|
|||
|
let mat = Material.get(name)
|
|||
|
if (!mat || mat.week * 1 !== week) {
|
|||
|
return true
|
|||
|
}
|
|||
|
let { city, cid, type } = mat
|
|||
|
|
|||
|
// 如果没有城市数据,则创建
|
|||
|
if (!citys[cid]) {
|
|||
|
citys[cid] = {
|
|||
|
city,
|
|||
|
week: mat.week,
|
|||
|
talent: {},
|
|||
|
weapon: {}
|
|||
|
}
|
|||
|
}
|
|||
|
let curr = citys[cid][type]
|
|||
|
// 如果没有材料信息,则补充
|
|||
|
if (!curr?.material) {
|
|||
|
let mData = mat.getData('name,city,source,icon')
|
|||
|
let tmp = []
|
|||
|
lodash.forEach(mat.items, (n) => {
|
|||
|
let starMat = Material.get(n)
|
|||
|
tmp.push(starMat.icon)
|
|||
|
})
|
|||
|
mData.icons = tmp.reverse()
|
|||
|
curr.material = mData
|
|||
|
curr.data = []
|
|||
|
}
|
|||
|
|
|||
|
// 获取排序字段
|
|||
|
let sortArr = sortFn(data)
|
|||
|
let sort = 0
|
|||
|
for (let i = 0; i <= 3; i++) {
|
|||
|
sort += sortArr[i] * 10 ** (6 - 2 * i)
|
|||
|
}
|
|||
|
// 如果已经满,则排序靠后
|
|||
|
if (data.isMax) {
|
|||
|
sort = sort - 10 ** 8
|
|||
|
}
|
|||
|
data.sort = sort
|
|||
|
|
|||
|
// done
|
|||
|
curr.data.push(data)
|
|||
|
}
|
|||
|
|
|||
|
player.forEachAvatar((avatar) => {
|
|||
|
count++
|
|||
|
let { char, weapon, talent } = avatar
|
|||
|
|
|||
|
// 添加天赋素材
|
|||
|
addMaterial(char?.materials?.talent, {
|
|||
|
...char.getData('id,name,face,star'),
|
|||
|
...avatar.getData('level,cons'),
|
|||
|
talent,
|
|||
|
isMax: avatar.isMaxTalent
|
|||
|
}, (d) => [d.level, d.star, d.cons, d.id - 10000000])
|
|||
|
|
|||
|
// 添加武器素材
|
|||
|
let wData = Weapon.get(weapon.name)
|
|||
|
addMaterial(wData?.materials?.weapon, {
|
|||
|
...wData.getData('id,abbr,icon,star'),
|
|||
|
level: weapon.level,
|
|||
|
affix: weapon.affix,
|
|||
|
face: char.side,
|
|||
|
isMax: weapon.promote >= wData.maxPromote
|
|||
|
}, (d) => [d.level, d.star, d.affix, d.id / 100])
|
|||
|
})
|
|||
|
|
|||
|
if (count === 0) {
|
|||
|
return false
|
|||
|
}
|
|||
|
|
|||
|
let ret = []
|
|||
|
lodash.forEach(citys, (ds) => {
|
|||
|
ds.talent.data = lodash.orderBy(ds.talent?.data, ['sort']).reverse()
|
|||
|
ds.weapon.data = lodash.orderBy(ds.weapon?.data, ['sort']).reverse()
|
|||
|
ret.unshift(ds)
|
|||
|
})
|
|||
|
return ret
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
export default TodayMaterial
|