187 lines
5.0 KiB
TypeScript
187 lines
5.0 KiB
TypeScript
import { plugin } from 'yunzai/core'
|
|
import fs from 'node:fs'
|
|
import GachaLog from '../model/gachaLog.js'
|
|
import ExportLog from '../model/exportLog.js'
|
|
import LogCount from '../model/logCount.js'
|
|
const _path = process.cwd() + '/plugins/genshin'
|
|
export class gcLog extends plugin {
|
|
constructor() {
|
|
/**
|
|
*
|
|
name: "抽卡记录",
|
|
dsc: "抽卡记录数据统计",
|
|
*/
|
|
super({
|
|
priority: 300,
|
|
rule: [
|
|
{
|
|
reg: '(.*)authkey=(.*)',
|
|
fnc: 'logUrl'
|
|
},
|
|
{
|
|
reg: '^#json文件导入记录$',
|
|
fnc: 'logJson'
|
|
},
|
|
{
|
|
reg: '^#?(原神|星铁)?(全部)?(抽卡|抽奖|角色|武器|集录|常驻|up|新手|光锥|全部)池*(记录|祈愿|分析)$',
|
|
fnc: 'getLog'
|
|
},
|
|
{
|
|
reg: '^#?(原神|星铁)?(强制)?导出记录(json)?$',
|
|
fnc: 'exportLog'
|
|
},
|
|
{
|
|
reg: '^#?(记录帮助|抽卡帮助)$',
|
|
fnc: 'help'
|
|
},
|
|
{
|
|
reg: '^#?(安卓|苹果|电脑|pc|ios)帮助$',
|
|
fnc: 'helpPort'
|
|
},
|
|
{
|
|
reg: '^#?(原神|星铁)?(抽卡|抽奖|角色|武器|集录|常驻|up|新手|光锥)池*统计$',
|
|
fnc: 'logCount'
|
|
}
|
|
]
|
|
})
|
|
|
|
this.androidUrl = 'https://docs.qq.com/doc/DUWpYaXlvSklmVXlX'
|
|
Object.defineProperty(this, 'button', {
|
|
get() {
|
|
this.prefix = this.e?.isSr ? '*' : '#'
|
|
return segment.button(
|
|
[
|
|
{ text: '角色记录', callback: `${this.prefix}角色记录` },
|
|
{ text: '角色统计', callback: `${this.prefix}角色统计` }
|
|
],
|
|
[
|
|
{ text: '武器记录', callback: `${this.prefix}武器记录` },
|
|
{ text: '武器统计', callback: `${this.prefix}武器统计` }
|
|
],
|
|
[
|
|
{ text: '集录记录', callback: `${this.prefix}集录记录` },
|
|
{ text: '集录统计', callback: `${this.prefix}集录统计` }
|
|
],
|
|
[
|
|
{ text: '常驻记录', callback: `${this.prefix}常驻记录` },
|
|
{ text: '常驻统计', callback: `${this.prefix}常驻统计` }
|
|
]
|
|
)
|
|
}
|
|
})
|
|
}
|
|
|
|
async init() {
|
|
let file = [
|
|
'./data/gachaJson',
|
|
'./data/srJson',
|
|
'./temp/html/StarRail',
|
|
'./temp/uigf'
|
|
]
|
|
for (let i of file) {
|
|
if (!fs.existsSync(i)) {
|
|
fs.mkdirSync(i)
|
|
}
|
|
}
|
|
}
|
|
|
|
accept() {
|
|
if (this.e.file) {
|
|
let name = this.e.file?.name
|
|
if (/(.*)([1-9]|18)[0-9]{8}(.*).json/gi.test(name)) {
|
|
this.e.msg = '#json文件导入记录'
|
|
return true
|
|
}
|
|
}
|
|
if (this.e.msg && /^#?(角色|武器)统计$/g.test(this.e.msg)) {
|
|
this.e.msg = this.e.msg.replace('统计', '池统计')
|
|
return true
|
|
}
|
|
}
|
|
|
|
/** 抽卡记录链接 */
|
|
async logUrl() {
|
|
let data = await new GachaLog(this.e).logUrl()
|
|
if (!data) return
|
|
|
|
await this.renderImg('genshin', `html/gacha/gacha-log`, data)
|
|
|
|
if (this.e.isGroup) this.e.reply('已收到链接,请撤回', false, { at: true })
|
|
}
|
|
|
|
/** #抽卡记录 */
|
|
async getLog() {
|
|
this.e.isAll = !!this.e.msg.includes('全部')
|
|
let data = await new GachaLog(this.e).getLogData()
|
|
if (!data) return
|
|
let name = `html/gacha/gacha-log`
|
|
if (this.e.isAll) {
|
|
name = `html/gacha/gacha-all-log`
|
|
}
|
|
this.reply([
|
|
await this.renderImg('genshin', name, data, { retType: 'base64' }),
|
|
this.button
|
|
])
|
|
}
|
|
|
|
/** 导出记录 */
|
|
exportLog() {
|
|
if (this.e.isGroup && !this.e.msg.includes('强制')) {
|
|
return this.reply(
|
|
'建议私聊导出,若你确认要在此导出,请发送【#强制导出记录】',
|
|
false,
|
|
{ at: true }
|
|
)
|
|
}
|
|
|
|
return new ExportLog(this.e).exportJson()
|
|
}
|
|
|
|
async logJson() {
|
|
if (!this.e.file) return this.e.reply('请发送Json文件')
|
|
|
|
await new ExportLog(this.e).logJson()
|
|
|
|
if (this.e.isGroup) this.e.reply('已收到文件,请撤回', false, { at: true })
|
|
}
|
|
|
|
help() {
|
|
this.e.reply([
|
|
segment.image(`file://${_path}/resources/logHelp/记录帮助.png`),
|
|
segment.button([
|
|
{ text: '电脑', callback: '#电脑帮助' },
|
|
{ text: '安卓', callback: '#安卓帮助' },
|
|
{ text: '苹果', callback: '#苹果帮助' }
|
|
])
|
|
])
|
|
}
|
|
|
|
helpPort() {
|
|
let msg = this.e.msg.replace(/#|帮助/g, '')
|
|
|
|
if (['电脑', 'pc'].includes(msg)) {
|
|
this.e.reply(
|
|
segment.image(`file://${_path}/resources/logHelp/记录帮助-电脑.png`)
|
|
)
|
|
} else if (['安卓'].includes(msg)) {
|
|
this.e.reply(`安卓抽卡记录获取教程:${this.androidUrl}`)
|
|
} else if (['苹果', 'ios'].includes(msg)) {
|
|
this.e.reply(
|
|
segment.image(`file://${_path}/resources/logHelp/记录帮助-苹果.png`)
|
|
)
|
|
}
|
|
}
|
|
|
|
async logCount() {
|
|
let data = await new LogCount(this.e).count()
|
|
if (!data) return
|
|
|
|
this.reply([
|
|
await this.renderImg('genshin', `html/gacha/log-count`, data, {
|
|
retType: 'base64'
|
|
}),
|
|
this.button
|
|
])
|
|
}
|
|
}
|