Miao-Yunzai/model/note.ts

240 lines
6.7 KiB
TypeScript

import moment from 'moment'
import lodash from 'lodash'
import base from './base.js'
import { MysInfo } from 'yunzai/mys'
// tudo
import { Character } from '#miao.models'
export default class Note extends base {
constructor(e) {
super(e)
this.model = 'dailyNote'
}
/** 生成体力图片 */
static async get(e) {
let note = new Note(e)
return await note.getData()
}
async getData() {
let device_fp = await MysInfo.get(this.e, 'getFp')
let headers = { 'x-rpc-device_fp': device_fp?.data?.device_fp }
let res = await MysInfo.get(this.e, 'dailyNote', { headers })
let resUser
if (!res || res.retcode !== 0) return false
/** 截图数据 */
let data = this.e.isSr ? this.noteSr(res) : this.noteData(res)
let screenData = this.screenData
if (this.e.isSr) {
resUser = await MysInfo.get(this.e, 'UserGame', { headers })
resUser.data?.list?.forEach(v => this.e.uid.includes(v.game_biz))
if (!resUser || resUser.retcode !== 0) return false
}
return {
name: this.e.sender.card,
quality: 80,
...screenData,
...data,
...resUser?.data?.list[0]
}
}
noteSr(res) {
let { data } = res
let nowDay = moment().date()
let nowUnix = Number(moment().format('X'))
/** 树脂 */
let resinMaxTime
if (data.stamina_recover_time > 0) {
let d = moment.duration(data.stamina_recover_time, 'seconds')
let day = Math.floor(d.asDays())
let hours = d.hours()
let minutes = d.minutes()
let seconds = d.seconds()
resinMaxTime = hours + '小时' + minutes + '分钟' + seconds + '秒'
// 精确到秒。。。。
if (day > 0) {
resinMaxTime =
day + '天' + hours + '小时' + minutes + '分钟' + seconds + '秒'
} else if (hours > 0) {
resinMaxTime = hours + '小时' + minutes + '分钟' + seconds + '秒'
} else if (minutes > 0) {
resinMaxTime = minutes + '分钟' + seconds + '秒'
} else if (seconds > 0) {
resinMaxTime = seconds + '秒'
}
if (day > 0 || hours > 0 || seconds > 0) {
let total_seconds = 3600 * hours + 60 * minutes + seconds
const now = new Date()
const dateTimes = now.getTime() + total_seconds * 1000
const date = new Date(dateTimes)
const dayDiff = date.getDate() - now.getDate()
const str = dayDiff === 0 ? '今日' : '明日'
const timeStr = `${date.getHours().toString().padStart(2, '0')}:${date
.getMinutes()
.toString()
.padStart(2, '0')}`
let recoverTimeStr = ` | [${str}]${timeStr}`
resinMaxTime += recoverTimeStr
}
}
data.bfStamina = (data.current_stamina / data.max_stamina) * 100 + '%'
/** 派遣 */
for (let item of data.expeditions) {
let d = moment.duration(item.remaining_time, 'seconds')
let day = Math.floor(d.asDays())
let hours = d.hours()
let minutes = d.minutes()
item.dateTime = [day + '天', hours + '时', minutes + '分']
.filter(v => !['0天', '0时', '0分'].includes(v))
.join('')
item.bfTime = ((72000 - item.remaining_time) / 72000) * 100 + '%'
if (item.avatars.length == 1) {
item.avatars.push('派遣头像')
}
}
// 标识属性图标~
let iconChar = lodash.sample([
'希儿',
'白露',
'艾丝妲',
'布洛妮娅',
'姬子',
'卡芙卡',
'克拉拉',
'停云',
'佩拉',
'黑塔',
'希露瓦',
'银狼'
])
let char = Character.get(iconChar, 'gs')
let week = [
'星期日',
'星期一',
'星期二',
'星期三',
'星期四',
'星期五',
'星期六'
]
let day = `${week[moment().day()]}`
return {
uid: this.e.uid,
saveId: this.e.uid,
icon: char.imgs?.face,
day,
resinMaxTime,
nowDay: moment(new Date()).format('YYYY年MM月DD日'),
...data
}
}
noteData(res) {
let { data } = res
let nowDay = moment().date()
let nowUnix = Number(moment().format('X'))
/** 树脂 */
let resinMaxTime
if (data.resin_recovery_time > 0) {
resinMaxTime = nowUnix + Number(data.resin_recovery_time)
let maxDate = moment.unix(resinMaxTime)
resinMaxTime = maxDate.format('HH:mm')
if (maxDate.date() != nowDay) {
resinMaxTime = `明天 ${resinMaxTime}`
} else {
resinMaxTime = ` ${resinMaxTime}`
}
}
/** 派遣 */
let remainedTime = ''
if (data.expeditions && data.expeditions.length >= 1) {
remainedTime = lodash.map(data.expeditions, 'remained_time')
remainedTime = lodash.min(remainedTime)
if (remainedTime > 0) {
remainedTime = nowUnix + Number(remainedTime)
let remainedDate = moment.unix(remainedTime)
remainedTime = remainedDate.format('HH:mm')
if (remainedDate.date() != nowDay) {
remainedTime = `明天 ${remainedTime}`
} else {
remainedTime = ` ${remainedTime}`
}
}
}
/** 宝钱 */
let coinTime = ''
if (data.home_coin_recovery_time > 0) {
let coinDay = Math.floor(data.home_coin_recovery_time / 3600 / 24)
let coinHour = Math.floor((data.home_coin_recovery_time / 3600) % 24)
let coinMin = Math.floor((data.home_coin_recovery_time / 60) % 60)
if (coinDay > 0) {
coinTime = `${coinDay}${coinHour}小时${coinMin}分钟`
} else {
let coinDate = moment.unix(
nowUnix + Number(data.home_coin_recovery_time)
)
if (coinDate.date() != nowDay) {
coinTime = `明天 ${coinDate.format('HH:mm')}`
} else {
coinTime = coinDate.format('HH:mm')
}
}
}
let week = [
'星期日',
'星期一',
'星期二',
'星期三',
'星期四',
'星期五',
'星期六'
]
let day = `${moment().format('MM-DD HH:mm')} ${week[moment().day()]}`
/** 参量质变仪 */
if (data?.transformer?.obtained) {
data.transformer.reached = data.transformer.recovery_time.reached
let recoveryTime = ''
if (data.transformer.recovery_time.Day > 0) {
recoveryTime += `${data.transformer.recovery_time.Day}`
}
if (data.transformer.recovery_time.Hour > 0) {
recoveryTime += `${data.transformer.recovery_time.Hour}小时`
}
if (data.transformer.recovery_time.Minute > 0) {
recoveryTime += `${data.transformer.recovery_time.Minute}分钟`
}
data.transformer.recovery_time = recoveryTime
}
return {
uid: this.e.uid,
saveId: this.e.uid,
resinMaxTime,
remainedTime,
coinTime,
day,
...data
}
}
}