228 lines
5.3 KiB
JavaScript
228 lines
5.3 KiB
JavaScript
import moment from 'moment'
|
||
import lodash from 'lodash'
|
||
import base from './base.js'
|
||
import MysInfo from './mys/mysInfo.js'
|
||
import { Character } from '#miao.models'
|
||
|
||
export default class Abyss extends base {
|
||
constructor (e) {
|
||
super(e)
|
||
this.model = 'abyss'
|
||
}
|
||
|
||
async getAbyss () {
|
||
let scheduleType = 1
|
||
if (this.e.msg.includes('上期') || this.e.msg.includes('往期')) {
|
||
scheduleType = 2
|
||
}
|
||
|
||
let ApiData = {
|
||
index: '',
|
||
spiralAbyss: { schedule_type: scheduleType }
|
||
}
|
||
|
||
/** 同步请求 */
|
||
this.e.apiSync = true
|
||
|
||
let res = await MysInfo.get(this.e, ApiData, '')
|
||
|
||
if (!res || res[0].retcode !== 0 || res[1].retcode !== 0) return false
|
||
|
||
let abyssData = res[1].data
|
||
|
||
if (abyssData?.total_battle_times <= 0) {
|
||
await this.e.reply(`uid${this.e.uid},暂无挑战数据。`)
|
||
return false
|
||
}
|
||
if (!abyssData.damage_rank || abyssData.damage_rank.length <= 0) {
|
||
await this.e.reply(`uid${this.e.uid},数据还没更新,请稍后再试`)
|
||
return false
|
||
}
|
||
|
||
/** 截图数据 */
|
||
let data = {
|
||
name: this.e.sender.card,
|
||
quality: 80,
|
||
...this.screenData,
|
||
...this.abyssData(abyssData)
|
||
}
|
||
|
||
return data
|
||
}
|
||
|
||
abyssData (data) {
|
||
let startTime = moment.unix(data.start_time)
|
||
let time = Number(startTime.month()) + 1
|
||
if (startTime.date() >= 15) {
|
||
time = time + '月下'
|
||
} else {
|
||
time = time + '月上'
|
||
}
|
||
|
||
let totalStar = 0
|
||
let star = []
|
||
for (let val of data.floors) {
|
||
if (val.index < 9) {
|
||
continue
|
||
}
|
||
totalStar += val.star
|
||
star.push(val.star)
|
||
}
|
||
totalStar = totalStar + '(' + star.join('-') + ')'
|
||
|
||
let dataName = ['damage', 'take_damage', 'defeat', 'normal_skill', 'energy_skill']
|
||
let rankData = []
|
||
|
||
for (let val of dataName) {
|
||
if (lodash.isEmpty(data[`${val}_rank`]) || data[`${val}_rank`].length <= 0) {
|
||
data[`${val}_rank`] = [
|
||
{
|
||
value: 0,
|
||
avatar_id: 10000007
|
||
}
|
||
]
|
||
}
|
||
|
||
let char = Character.get(data[`${val}_rank`][0].avatar_id)
|
||
|
||
rankData[val] = {
|
||
num: data[`${val}_rank`][0].value,
|
||
name: char.abbr,
|
||
icon: char.side,
|
||
}
|
||
|
||
if (rankData[val].num > 1000) {
|
||
rankData[val].num = (rankData[val].num / 10000).toFixed(1)
|
||
rankData[val].num += ' w'
|
||
}
|
||
}
|
||
|
||
for (let i in data.reveal_rank) {
|
||
let char = Character.get(data.reveal_rank[i].avatar_id)
|
||
data.reveal_rank[i].name = char.abbr
|
||
data.reveal_rank[i].icon = char.face
|
||
}
|
||
|
||
return {
|
||
saveId: this.e.uid,
|
||
uid: this.e.uid,
|
||
time,
|
||
max_floor: data.max_floor,
|
||
total_star: totalStar,
|
||
list: data.reveal_rank,
|
||
total_battle_times: data.total_battle_times,
|
||
...rankData
|
||
}
|
||
}
|
||
|
||
/** 深渊十二层 */
|
||
async getAbyssFloor () {
|
||
this.model = 'abyssFloor'
|
||
let scheduleType = 1
|
||
if (this.e.msg.includes('上期') || this.e.msg.includes('往期')) {
|
||
scheduleType = 2
|
||
}
|
||
let ApiData = {
|
||
index: '',
|
||
spiralAbyss: { schedule_type: scheduleType }
|
||
}
|
||
|
||
/** 同步请求 */
|
||
this.e.sync = true
|
||
|
||
let res = await MysInfo.get(this.e, ApiData)
|
||
|
||
if (!res || res[0].retcode !== 0 || res[1].retcode !== 0) return false
|
||
|
||
let resIndex = res[0].data
|
||
let resAbyss = res[1].data
|
||
let uid = this.e.uid
|
||
let floorIndex = this.getFloor()
|
||
|
||
if (!floorIndex) {
|
||
await this.e.reply('深渊层数错误')
|
||
return false
|
||
}
|
||
|
||
if (lodash.isEmpty(resAbyss.floors)) {
|
||
await this.e.reply(`uid:${uid},暂无第${floorIndex}层数据`)
|
||
return false
|
||
}
|
||
|
||
let floors = lodash.keyBy(resAbyss.floors, 'index')
|
||
|
||
if (lodash.isEmpty(floors[floorIndex])) {
|
||
await this.e.reply(`uid:${uid},暂无第${floorIndex}层数据`)
|
||
return false
|
||
}
|
||
|
||
return {
|
||
saveId: uid,
|
||
uid,
|
||
floorIndex,
|
||
...this.screenData,
|
||
...this.abyssFloorData(floors[floorIndex], resIndex)
|
||
}
|
||
}
|
||
|
||
getFloor () {
|
||
let reg = /^#*[上期]*(深渊|深境|深境螺旋)[上期]*[第]*(9|10|11|12|九|十|十一|十二)层[ |0-9]*$/
|
||
let floorIndex = this.e.msg.match(reg)
|
||
|
||
if (!floorIndex) {
|
||
return false
|
||
}
|
||
floorIndex = floorIndex[2]
|
||
|
||
switch (floorIndex) {
|
||
case '9':
|
||
case '九':
|
||
floorIndex = 9
|
||
break
|
||
case '10':
|
||
case '十':
|
||
floorIndex = 10
|
||
break
|
||
case '11':
|
||
case '十一':
|
||
floorIndex = 11
|
||
break
|
||
case '12':
|
||
case '十二':
|
||
floorIndex = 12
|
||
break
|
||
default:
|
||
floorIndex = ''
|
||
break
|
||
}
|
||
|
||
return floorIndex
|
||
}
|
||
|
||
abyssFloorData (floor, index) {
|
||
let roleArr = lodash.keyBy(index.avatars, 'id')
|
||
let list = []
|
||
for (let val of floor.levels) {
|
||
if (!val.battles || val.battles.length < 2) {
|
||
continue
|
||
}
|
||
val.time = moment.unix(val.battles[0].timestamp).format('YYYY-MM-DD HH:mm:ss')
|
||
|
||
for (let i in val.battles) {
|
||
for (let j in val.battles[i].avatars) {
|
||
let char = Character.get(val.battles[i].avatars[j].id)
|
||
val.battles[i].avatars[j].name = char.abbr
|
||
val.battles[i].avatars[j].icon = char.face
|
||
val.battles[i].avatars[j].life = roleArr[val.battles[i].avatars[j].id].actived_constellation_num
|
||
}
|
||
}
|
||
list.push(val)
|
||
}
|
||
|
||
return {
|
||
floor,
|
||
list
|
||
}
|
||
}
|
||
}
|