Miao-Yunzai/apps/gcLog.ts

187 lines
5.0 KiB
TypeScript
Raw Normal View History

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