Miao-Yunzai/apps/gacha.ts

123 lines
3.1 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}
}