2
0
mirror of https://github.com/ctrlcvs/xiaoyao-cvs-plugin.git synced 2024-12-23 03:20:52 +08:00
xiaoyao-cvs-plugin/model/gsCfg.js
2022-12-10 15:30:14 +08:00

205 lines
4.4 KiB
JavaScript

import YAML from 'yaml'
import fs from 'node:fs'
import {
promisify
} from 'node:util'
import lodash from 'lodash'
import {
isV3
} from '../components/Changelog.js';
const plugin = "xiaoyao-cvs-plugin"
/**
* 配置文件
* 主要用于处理 stoken以及云原神账号数据
*/
const _path = process.cwd();
class GsCfg {
constructor() {
}
/** 通用yaml读取*/
getfileYaml(path, name) {
this.cpCfg('config', 'config')
return YAML.parse(
fs.readFileSync(path + name + ".yaml", 'utf8')
)
}
cpCfg (app, name) {
if (!fs.existsSync(`./plugins/${plugin}/config`)) {
fs.mkdirSync(`./plugins/${plugin}/config`)
}
let set = `./plugins/${plugin}/config/${name}.yaml`
if (!fs.existsSync(set)) {
fs.copyFileSync(`./plugins/${plugin}/defSet/${app}/${name}.yaml`, set)
}
}
async getMasterQQ(){
let qq;
if(isV3){
let config=(await import(`file://${_path}/lib/config/config.js`)).default
qq=config.masterQQ[0]
}else{
qq=BotConfig.masterQQ[0]
}
return qq
}
/** 读取用户绑定的ck */
async getBingCk() {
let ck = {}
let ckQQ = {}
let dir = './data/MysCookie/'
let files = fs.readdirSync(dir).filter(file => file.endsWith('.yaml'))
const readFile = promisify(fs.readFile)
let promises = []
files.forEach((v) => promises.push(readFile(`${dir}${v}`, 'utf8')))
const res = await Promise.all(promises)
res.forEach((v) => {
let tmp = YAML.parse(v)
lodash.forEach(tmp, (v, i) => {
ck[String(i)] = v
if (v.isMain && !ckQQ[String(v.qq)]) {
ckQQ[String(v.qq)] = v
}
})
})
return {
ck,
ckQQ
}
}
/** 读取所有用户绑定的ck */
async getBingAllCk () {
let ck = {}
let ckQQ = {}
let qqCk={}
let dir = './data/MysCookie/'
let files = fs.readdirSync(dir).filter(file => file.endsWith('.yaml'))
const readFile = promisify(fs.readFile)
let promises = []
files.forEach((v) => promises.push(readFile(`${dir}${v}`, 'utf8')))
const res = await Promise.all(promises)
res.forEach((v) => {
let tmp = YAML.parse(v)
let qq
lodash.forEach(tmp, (item, uid) => {
qq = item.qq
ck[String(uid)] = item
if(!qqCk[String(item.qq)]) qqCk[String(item.qq)]=[]
qqCk[String(item.qq)].push(item)
if (item.isMain && !ckQQ[String(item.qq)]) {
ckQQ[String(item.qq)] = item
}
})
if (qq && !ckQQ[String(qq)]) {
ckQQ[String(qq)] = Object.values(tmp)[0]
}
})
return { ck, ckQQ,qqCk }
}
async getUserStoken(userId){
try {
let ck=YAML.parse(
fs.readFileSync(`plugins/${plugin}/data/yaml/${userId}.yaml`, 'utf8')
)
return ck||{}
}catch (ex) {
return {}
}
}
/** 读取所有用户绑定的stoken */
async getBingStoken() {
let ck = []
let ckQQ = {}
let dir = `plugins/${plugin}/data/yaml/`
let files = fs.readdirSync(dir).filter(file => file.endsWith('.yaml'))
const readFile = promisify(fs.readFile)
let promises = []
files.forEach((v) => promises.push(readFile(`${dir}${v}`, 'utf8')))
const res = await Promise.all(promises)
res.forEach((v, index) => {
let tmp = YAML.parse(v)
ck.push(tmp)
})
return ck
}
getBingCkSingle(userId) {
let file = `./data/MysCookie/${userId}.yaml`
try {
let ck = fs.readFileSync(file, 'utf-8')
ck = YAML.parse(ck)
return ck
} catch (error) {
return {}
}
}
getBingCookie(userId) {
let file = `./data/MysCookie/${userId}.yaml`
try {
let ck = fs.readFileSync(file, 'utf-8')
ck = YAML.parse(ck)
for (let item in ck) {
let login_ticket;
if (!ck[item].isMain) {
continue;
}
login_ticket = ck[item]?.login_ticket
ck = ck[item].ck
return {
ck,
item,
login_ticket
};
}
} catch (error) {
return {}
}
}
saveBingStoken(userId, data) {
let file = `./plugins/${plugin}/data/yaml/${userId}.yaml`
if (lodash.isEmpty(data)) {
fs.existsSync(file) && fs.unlinkSync(file)
} else {
fs.exists(file, (exists) => {
if (!exists) {
fs.writeFileSync(file, "", 'utf8')
}
let ck = fs.readFileSync(file, 'utf-8')
let yaml = YAML.stringify(data)
ck = YAML.parse(ck)
if (ck?.uid||!ck) {
fs.writeFileSync(file, yaml, 'utf8')
} else {
if(!ck[Object.keys(data)[0]]){
ck = YAML.stringify(ck)
fs.writeFileSync(file, yaml + ck, 'utf8')
}else{
ck[Object.keys(data)[0]] = data[Object.keys(data)[0]]
fs.writeFileSync(file,YAML.stringify(ck), 'utf8')
}
}
})
}
}
}
export default new GsCfg()