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