modify:指令修改配置文件会保留注释

This commit is contained in:
yeyang
2022-10-24 16:21:04 +08:00
parent 15d469ed30
commit 1be78eb573
5 changed files with 155 additions and 20 deletions

View File

@@ -4,7 +4,7 @@ import lodash from "lodash";
import Common from "../components/Common.js";
import { Config } from '../components/index.js'
let rediskey = `yenai:proxy`
export class NewConfig extends plugin {
constructor() {
super({
@@ -32,10 +32,21 @@ export class NewConfig extends plugin {
reg: '^#?椰奶(启用|禁用)全部通知$',
fnc: 'SetAll'
},
{
reg: '^#椰奶更换代理(1|2)$',
fnc: 'proxy'
}
]
})
}
//初始化
async init() {
if (!await redis.get(rediskey)) {
await redis.set(rediskey, "i.pixiv.re")
}
}
// 更改配置
async Config_manage(e) {
if (!e.isMaster) return
@@ -72,7 +83,7 @@ export class NewConfig extends plugin {
return true;
}
//修改设置
async SetAll(e) {
if (!e.isMaster) return
let yes = false;
@@ -95,6 +106,7 @@ export class NewConfig extends plugin {
this.yenaiset(e)
return true;
}
//渲染发送图片
async yenaiset(e) {
if (!e.isMaster) return
@@ -144,7 +156,26 @@ export class NewConfig extends plugin {
scale: 2.0
});
}
//更换代理
async proxy(e) {
if (/1/.test(e.msg)) {
await redis.set(rediskey, "i.pixiv.re")
.then(() => e.reply("已经切换代理为1"))
.catch(err => console.log(err))
} else if (/2/.test(e.msg)) {
await redis.set(rediskey, "proxy.pixivel.moe")
.then(() => e.reply("已经切换代理为2"))
.catch(err => console.log(err))
} else {
await redis.set(rediskey, "i.pixiv.cat")
.then(() => e.reply("已经切换代理为3"))
.catch(err => console.log(err))
}
}
}
//随机底图
const rodom = async function () {
var image = fs.readdirSync(`./plugins/yenai-plugin/resources/admin/imgs/bg`);
var list_img = [];

View File

@@ -325,7 +325,8 @@ export class sese extends plugin {
} else if (num > 6) {
size = "small"
}
let url = `${api}?r18=${r18}&num=${num}${tag}&proxy=proxy.pixivel.moe&size=${size}`;
let url = `${api}?r18=${r18}&num=${num}${tag}&proxy=${await redis.get(`yenai:proxy`)}&size=${size}`;
console.log(url);
let result = await fetch(url).then(res => res.json()).catch(err => console.log(err))
if (!result) return false;
return result.data
@@ -340,8 +341,6 @@ export class sese extends plugin {
if (fs.existsSync(this.path)) {
cfgs = await Cfg.getread(this.path)
}
//默认撤回间隔
let time = def.recall
//默认CD
let cd = def.cd
//获取当前时间

View File

@@ -1,6 +1,7 @@
import YAML from 'yaml'
import chokidar from 'chokidar'
import fs from 'node:fs'
import YamlReader from '../model/YamlReader.js'
const Path = process.cwd();
const Plugin_Name = 'yenai-plugin'
@@ -108,16 +109,8 @@ class Config {
*/
modify(name, key, value) {
let path = `${Plugin_Path}/config/config/${name}.yaml`
let config = this.Notice
config[key] = value
try {
fs.writeFileSync(path, YAML.stringify(config), 'utf8')
delete this.config[`config.${name}`]
return true;
} catch (e) {
console.log(e);
return false;
}
new YamlReader(path).set(key, value)
delete this.config[`config.${name}`]
}
}

View File

@@ -28,10 +28,11 @@ export default class Pixiv {
let caption = res.caption.replace(/<.*>/g, "").trim()
let { id: pid, title, meta_single_page, meta_pages, user, } = res
let url = []
let proxy = await redis.get(`yenai:proxy`)
if (!lodash.isEmpty(meta_single_page)) {
url.push(meta_single_page.original_image_url.replace("i.pximg.net", "proxy.pixivel.moe"))
url.push(meta_single_page.original_image_url.replace("i.pximg.net", proxy))
} else {
url = meta_pages.map(item => item.image_urls.original.replace("i.pximg.net", "proxy.pixivel.moe"));
url = meta_pages.map(item => item.image_urls.original.replace("i.pximg.net", proxy));
}
return {
pid,
@@ -83,8 +84,8 @@ export default class Pixiv {
if (title == "wx" && uresname == "wx") continue
let tags = i.tags ? lodash.truncate(i.tags.map((item) => item.name)) : ""
let url = i.imageUrls[0].large.replace("i.pximg.net", "proxy.pixivel.moe")
let proxy = await redis.get(`yenai:proxy`)
let url = i.imageUrls[0].large.replace("i.pximg.net", proxy)
list.push([
`标题:${title}\n`,
`插画ID${pid}\n`,
@@ -157,9 +158,10 @@ export default class Pixiv {
return false
}
let list = []
let proxy = await redis.get(`yenai:proxy`)
for (let i of res.trend_tags) {
let { tag, translated_name } = i
let url = i.illust.image_urls.large.replace("i.pximg.net", "proxy.pixivel.moe")
let url = i.illust.image_urls.large.replace("i.pximg.net", proxy)
list.push(
[
`Tag${tag}\n`,

110
model/YamlReader.js Normal file
View File

@@ -0,0 +1,110 @@
import fs from 'fs'
import YAML from 'yaml'
import lodash from 'lodash'
import chokidar from 'chokidar'
// import Constant from '../server/constant/Constant.js'
export default class YamlReader {
/**
* 读写yaml文件
*
* @param yamlPath yaml文件绝对路径
* @param isWatch 是否监听文件变化
*/
constructor(yamlPath, isWatch = false) {
this.yamlPath = yamlPath
this.isWatch = isWatch
this.initYaml()
}
initYaml() {
try {
// parseDocument 将会保留注释
this.document = YAML.parseDocument(fs.readFileSync(this.yamlPath, 'utf8'))
} catch (error) {
throw error
}
if (this.isWatch && !this.watcher) {
this.watcher = chokidar.watch(this.yamlPath).on('change', () => {
if (this.isSave) {
this.isSave = false
return
}
this.initYaml()
})
}
}
/**返回读取的对象 */
get jsonData() {
if (!this.document) {
return null
}
return this.document.toJSON()
}
/*检查集合是否包含key的值*/
has(keyPath) {
return this.document.hasIn(keyPath.split('.'))
}
/*返回key的值*/
get(keyPath) {
return lodash.get(this.jsonData, keyPath)
}
/*修改某个key的值*/
set(keyPath, value) {
this.document.setIn(keyPath.split('.'), value)
this.save()
}
/*删除key*/
delete(keyPath) {
this.document.deleteIn(keyPath.split('.'))
this.save()
}
/**
* 设置 document 的数据(递归式)
* @param data 要写入的数据
*/
setData(data) {
this.setDataRecursion(data, [])
this.save()
}
setDataRecursion(data, parentKeys) {
if (Array.isArray(data)) {
this.document.setIn(this.mapParentKeys(parentKeys), data)
} else if (typeof data === 'object' && data !== null) {
for (const [key, value] of Object.entries(data)) {
this.setDataRecursion(value, parentKeys.concat([key]))
}
} else {
parentKeys = this.mapParentKeys(parentKeys)
this.document.setIn(parentKeys, data)
}
}
// 将数字key转为number类型防止出现引号
mapParentKeys(parentKeys) {
return parentKeys.map((k) => {
if (k.startsWith(Constant.CONFIG_INTEGER_KEY)) {
return Number.parseInt(k.replace(Constant.CONFIG_INTEGER_KEY, ''))
}
return k
})
}
// 彻底删除某个key
deleteKey(keyPath) {
let keys = keyPath.split('.')
keys = this.mapParentKeys(keys)
this.document.deleteIn(keys)
this.save()
}
save() {
this.isSave = true
let yaml = this.document.toString()
fs.writeFileSync(this.yamlPath, yaml, 'utf8')
}
}