Miao-Yunzai/apps/gacha.ts

120 lines
3.0 KiB
TypeScript
Raw Normal View History

2024-06-14 10:44:18 +08:00
import { plugin } from 'yunzai/core'
import GachaData from '../model/gachaData.js'
import fs from 'node:fs'
import lodash from 'lodash'
export class gacha extends plugin {
constructor () {
/**
*
name: '十连',
dsc: '模拟抽卡,每天十连一次,四点更新',
*/
super({
priority: 100,
rule: [
{
reg: '^#*(10|[武器池常驻]*[十]+|抽|单)[连抽卡奖][123武器池常驻]*$',
fnc: 'gacha'
},
{
reg: '(^#*定轨|^#定轨(.*))$',
fnc: 'weaponBing'
}
]
})
}
/** #十连 */
async gacha () {
this.GachaData = await GachaData.init(this.e)
if (this.checkLimit()) return
let data = await this.GachaData.run()
/** 生成图片 */
await this.renderImg('genshin', 'html/gacha/gacha-trial', data, {
recallMsg: data.nowFive >= 1 || data.nowFour >= 4 ? false : this.GachaData.set.delMsg
})
}
/** 检查限制 */
checkLimit () {
/** 主人不限制 */
if (this.e.isMaster) return false
let { user } = this.GachaData
let { num, weaponNum } = user.today
let nowCount = num
if (this.GachaData.type == 'weapon') nowCount = weaponNum
if (this.GachaData.set.LimitSeparate == 1) {
if (nowCount < this.GachaData.set.count * 10) return false
} else {
if (num + weaponNum < this.GachaData.set.count * 10) return false
}
let msg = lodash.truncate(this.e.sender.card, { length: 8 }) + '\n'
if (user.today.star.length > 0) {
msg += '今日五星:'
if (user.today.star.length >= 4) {
msg += `${user.today.star.length}`
} else {
user.today.star.forEach(v => {
msg += `${v.name}(${v.num})\n`
})
msg = lodash.trim(msg, '\n')
}
if (user.week.num >= 2) {
msg += `\n本周${user.week.num}个五星`
}
} else {
msg += `今日已抽,累计${nowCount}抽无五星`
}
this.reply(msg, false, { recallMsg: this.GachaData.set.delMsg })
return true
}
/** #定轨 */
async weaponBing () {
let Gacha = await GachaData.init(this.e)
let { NowPool, user, msg = '' } = Gacha
if (user.weapon.type >= 2) {
user.weapon.type = 0
user.weapon.bingWeapon = ''
msg = '\n定轨已取消'
} else {
user.weapon.type++
user.weapon.bingWeapon = NowPool.weapon5[user.weapon.type - 1]
msg = []
NowPool.weapon5.forEach((v, i) => {
if (user.weapon.type - 1 == i) {
msg.push(`[√] ${NowPool.weapon5[i]}`)
} else {
msg.push(`[ ] ${NowPool.weapon5[i]}`)
}
})
msg = '定轨成功\n' + msg.join('\n')
}
/** 命定值清零 */
user.weapon.lifeNum = 0
Gacha.user = user
Gacha.saveUser()
this.reply(msg, false, { at: this.e.user_id })
}
/** 初始化创建配置文件 */
async init () {
let file = './plugins/genshin/config/gacha.set.yaml'
if (fs.existsSync(file)) return
fs.copyFileSync('./plugins/genshin/defSet/gacha/set.yaml', file)
}
}