Miao-Yunzai/plugins/genshin/apps/gcLog.js

204 lines
5.6 KiB
JavaScript
Raw 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 '../../../lib/plugins/plugin.js'
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 () {
super({
name: '抽卡记录',
dsc: '抽卡记录数据统计',
event: 'message',
priority: 300,
rule: [
{
reg: '(.*)authkey=(.*)',
fnc: 'logUrl'
},
{
reg: '^#txt日志文件导入记录$',
fnc: 'logFile'
},
{
reg: '^#xlsx文件导入记录$',
fnc: 'logXlsx'
},
{
reg: '^#json文件导入记录$',
fnc: 'logJson'
},
{
reg: '^#*(原神|星铁)?(全部)?(抽卡|抽奖|角色|武器|常驻|up|新手|光锥|全部)池*(记录|祈愿|分析)$',
fnc: 'getLog'
},
{
reg: '^#*(原神|星铁)?导出记录(excel|xlsx|json)*$',
fnc: 'exportLog'
},
{
reg: '^#*(记录帮助|抽卡帮助)$',
fnc: 'help'
},
{
reg: '^#*(安卓|苹果|电脑|pc|ios)帮助$',
fnc: 'helpPort'
},
{
reg: '^#*(原神|星铁)?(抽卡|抽奖|角色|武器|常驻|up|新手|光锥)池*统计$',
fnc: 'logCount'
}
]
})
this.androidUrl = 'https://docs.qq.com/doc/DUWpYaXlvSklmVXlX'
}
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 && this.e.isPrivate) {
let name = this.e.file?.name
if (name.includes('txt')) {
this.e.msg = '#txt日志文件导入记录'
if (name.includes('output')) return true
}
if (/(.*)[1-9][0-9]{8}(.*).xlsx$/ig.test(name)) {
this.e.msg = '#xlsx文件导入记录'
return true
}
if (/(.*)[1-9][0-9]{8}(.*).json/ig.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 () {
if (!this.e.isPrivate) {
this.e.reply('请私聊发送链接', false, { at: true })
return true
}
let data = await new GachaLog(this.e).logUrl()
if (!data) return
await this.renderImg('genshin', `html/gacha/gacha-log`, data)
}
/** 发送output_log.txt日志文件 */
async logFile () {
if (!this.e.isPrivate) {
await this.e.reply('请私聊发送日志文件', false, { at: true })
return true
}
if (!this.e.file || !this.e.file.name.includes('txt')) {
await this.e.reply('请发送日志文件')
} else {
await this.e.reply('3.0版本后,日志文件已不能获取抽取记录链接\n请用安卓方式获取')
return true
}
let data = await new GachaLog(this.e).logFile()
if (!data) return false
if (typeof data != 'object') return
await this.renderImg('genshin', `html/gacha/gacha-log`, data)
}
/** #抽卡记录 */
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`
}
await this.renderImg('genshin', name, data)
}
/** 导出记录 */
async exportLog () {
if (this.e.isGroup) {
await this.reply('请私聊导出', false, { at: true })
return
}
let exportLog = new ExportLog(this.e)
if (this.e.msg.includes('json')) {
return await exportLog.exportJson()
} else {
await this.e.reply('如需要将此记录导入到其他平台请导出json格式文件')
return await exportLog.exportXlsx()
}
}
async logXlsx () {
if (!this.e.isPrivate) {
await this.e.reply('请私聊发送日志文件', false, { at: true })
return true
}
if (!this.e.file) {
await this.e.reply('请发送xlsx文件')
return true
}
await this.e.reply('如果是星铁记录请在【原始数据】工作表复制【gacha_type】列粘贴并把此标题重命名为【srgf_gacha_type】否则可能无法正确识别')
await new ExportLog(this.e).logXlsx()
}
async logJson () {
if (!this.e.isPrivate) {
await this.e.reply('请私聊发送Json文件', false, { at: true })
return true
}
if (!this.e.file) {
await this.e.reply('请发送Json文件')
return true
}
await new ExportLog(this.e).logJson()
}
async help () {
await this.e.reply(segment.image(`file://${_path}/resources/logHelp/记录帮助.png`))
}
async helpPort () {
let msg = this.e.msg.replace(/#|帮助/g, '')
if (['电脑', 'pc'].includes(msg)) {
await this.e.reply(segment.image(`file://${_path}/resources/logHelp/记录帮助-电脑.png`))
} else if (['安卓'].includes(msg)) {
await this.e.reply(`安卓抽卡记录获取教程:${this.androidUrl}`)
} else if (['苹果', 'ios'].includes(msg)) {
await this.e.reply(segment.image(`file://${_path}/resources/logHelp/记录帮助-苹果.png`))
}
}
async logCount () {
let data = await new LogCount(this.e).count()
if (!data) return
this.renderImg('genshin', `html/gacha/log-count`, data)
}
}