根据文件路径计算miao-plugin路径及yunzai路径,规避在外部import,非yunzai根目录执行脚本时,使用process.cwd()查找文件有可能错误的问题

This commit is contained in:
Kokomi 2024-05-22 02:05:37 +08:00
parent 3d1e602337
commit 0109f9ad2a
20 changed files with 65 additions and 42 deletions

View File

@ -2,9 +2,10 @@ import fs from 'node:fs'
import lodash from 'lodash'
import { exec } from 'child_process'
import { Cfg, Common, Data, Version, App } from '#miao'
import makemsg from "../../../lib/common/common.js"
import { execSync } from "child_process";
import makemsg from '../../../lib/common/common.js'
import { execSync } from 'child_process'
import fetch from 'node-fetch'
import { miaoPath } from '#miao.path'
let keys = lodash.map(Cfg.getCfgSchemaMap(), (i) => i.key)
let app = App.init({
@ -45,8 +46,7 @@ app.reg({
export default app
const _path = process.cwd()
const resPath = `${_path}/plugins/miao-plugin/resources/`
const resPath = `${miaoPath}/resources/`
const plusPath = `${resPath}/miao-res-plus/`
const checkAuth = async function (e) {
@ -155,7 +155,7 @@ async function updateMiaoPlugin(e) {
} else {
e.reply('正在执行更新操作,请稍等')
}
exec(command, { cwd: `${_path}/plugins/miao-plugin/` }, function (error, stdout, stderr) {
exec(command, { cwd: miaoPath }, function (error, stdout, stderr) {
if (/(Already up[ -]to[ -]date|已经是最新的)/.test(stdout)) {
e.reply('目前已经是最新版喵喵了~')
return true

View File

@ -2,6 +2,7 @@ import { Button, Character, MysApi, Player } from '#miao.models'
import { Cfg, Common, Meta } from '#miao'
import lodash from 'lodash'
import moment from 'moment'
import { miaoPath } from '#miao.path'
let Avatar = {
render (e) {
@ -46,7 +47,7 @@ let Avatar = {
return true
}
if (renderType === 'photo') {
e.reply(segment.image(`file://${process.cwd()}/plugins/miao-plugin/resources/${bg.img}`))
e.reply(segment.image(`file://${miaoPath}/resources/${bg.img}`))
return true
}
let uid = e.uid || (e.targetUser && e.targetUser.uid)
@ -88,7 +89,7 @@ let Avatar = {
custom,
isRelease,
data
}, { e, scale, retType: "base64" }), new Button(e).profile(char, uid)])
}, { e, scale, retType: 'base64' }), new Button(e).profile(char, uid)])
if (msgRes) {
// 如果消息发送成功就将message_id和图片路径存起来3小时过期
const message_id = [e.message_id]

View File

@ -6,8 +6,9 @@ import fetch from 'node-fetch'
import lodash from 'lodash'
import { Cfg, Data } from '#miao'
import { Character } from '#miao.models'
import { miaoPath } from '#miao.path'
const resPath = process.cwd() + '/plugins/miao-plugin/resources/'
const resPath = miaoPath + '/resources/'
let regex = /^#?\s*(?:喵喵)?(?:上传|添加)(.+)(?:照片|写真|图片|图像)\s*$/
let profileRegex = /^#?\s*(?:喵喵)?(?:上传|添加)(.+)(?:面板图)\s*$/
let isProfile = false

View File

@ -2,9 +2,9 @@ import { Cfg, Common, Data, Version } from '#miao'
import fs from 'node:fs'
import lodash from 'lodash'
import HelpTheme from './HelpTheme.js'
import { miaoPath } from '#miao.path'
const _path = process.cwd()
const helpPath = `${_path}/plugins/miao-plugin/resources/help`
const helpPath = `${miaoPath}/resources/help`
const Help = {
async render (e) {

View File

@ -1,8 +1,8 @@
/*
* 面板公共方法及处理
* */
import { Version } from '#miao'
import { Button, Character, MysApi, Player } from '#miao.models'
import { miaoPath } from '#miao.path'
/*
* 获取面板查询的 目标uid
@ -72,6 +72,6 @@ export async function getProfileRefresh (e, avatar) {
* 面板帮助
* */
export async function profileHelp (e) {
e.reply(segment.image(`file://${process.cwd()}/plugins/miao-plugin/resources/character/imgs/help.jpg`))
e.reply(segment.image(`file://${miaoPath}/resources/character/imgs/help.jpg`))
return true
}

View File

@ -1,5 +1,6 @@
import { Cfg } from '#miao'
import { MysApi } from '#miao.models'
import { miaoPath } from '#miao.path'
/** 获取角色卡片的原图 */
export async function getOriginalPicture (e) {
@ -48,12 +49,12 @@ export async function getOriginalPicture (e) {
}
}
if (imgPath && imgPath.img) {
e.reply(segment.image(`file://${process.cwd()}/plugins/miao-plugin/resources/${decodeURIComponent(imgPath.img)}`), false, { recallMsg: 30 })
e.reply(segment.image(`file://${miaoPath}/resources/${decodeURIComponent(imgPath.img)}`), false, { recallMsg: 30 })
}
return true
}
// 对at错图像的增加嘲讽...
e.reply(segment.image(`file://${process.cwd()}/plugins/miao-plugin/resources/common/face/what.jpg`))
e.reply(segment.image(`file://${miaoPath}/resources/common/face/what.jpg`))
return false
}
e.reply('消息太过久远了,俺也忘了原图是啥了,下次早点来吧~')

View File

@ -4,6 +4,7 @@ import CharWikiData from './CharWikiData.js'
import CharMaterial from './CharMaterial.js'
import { Cfg, Common } from '#miao'
import { Character } from '#miao.models'
import { miaoPath } from '#miao.path'
const wikiReg = /^(?:#|喵喵)?(?:星铁)?(.*)(天赋|技能|行迹|命座|命之座|星魂|资料|图鉴|照片|写真|图片|图像)$/
@ -53,7 +54,7 @@ const CharWiki = {
if (mode === 'pic') {
let img = char.getCardImg(Cfg.get('charPicSe', false), false)
if (img && img.img) {
e.reply(segment.image(`file://${process.cwd()}/plugins/miao-plugin/resources/${img.img}`))
e.reply(segment.image(`file://${miaoPath}/resources/${img.img}`))
} else {
e.reply('暂无图片')
}

View File

@ -2,9 +2,9 @@ import fs from 'node:fs'
import lodash from 'lodash'
import cfgData from './cfg/CfgData.js'
import { Version } from '#miao'
import { miaoPath } from '#miao.path'
const _path = process.cwd()
const _cfgPath = `${_path}/plugins/miao-plugin/components/`
const _cfgPath = `${miaoPath}/components/`
let cfg = {}
let miaoCfg = {}

View File

@ -1,8 +1,9 @@
import lodash from 'lodash'
import fs from 'node:fs'
import util from 'node:util'
import { rootPath } from '#miao.path'
const _path = process.cwd()
const _path = rootPath
const getRoot = (root = '') => {
if (!root) {
root = `${_path}/`

View File

@ -2,6 +2,7 @@ import { cfgSchema } from '../../config/system/cfg_system.js'
import lodash from 'lodash'
import { Data } from '../index.js'
import fs from 'node:fs'
import { miaoPath } from '#miao.path'
let cfgData = {
saveCfg (cfg) {
@ -21,7 +22,7 @@ let cfgData = {
}
})
})
fs.writeFileSync(`${process.cwd()}/plugins/miao-plugin/config/cfg.js`, ret.join('\n'), 'utf8')
fs.writeFileSync(`${miaoPath}/config/cfg.js`, ret.join('\n'), 'utf8')
},
async getCfg () {

View File

@ -1,4 +1,5 @@
import { Version, Cfg } from '#miao'
import { miaoPath } from '#miao.path'
const Render = {
async render (path, params, cfg) {
@ -17,13 +18,13 @@ const Render = {
}
}
let resPath = data.pluResPath
const layoutPath = process.cwd() + '/plugins/miao-plugin/resources/common/layout/'
const layoutPath = miaoPath + '/resources/common/layout/'
return {
_miao_path: resPath,
...data,
_res_path: resPath,
_layout_path: layoutPath,
_tpl_path: process.cwd() + '/plugins/miao-plugin/resources/common/tpl/',
_tpl_path: miaoPath + '/resources/common/tpl/',
defaultLayout: layoutPath + 'default.html',
elemLayout: layoutPath + 'elem.html',
sys: {

View File

@ -6,6 +6,7 @@ import DmgBuffs from './dmg/DmgBuffs.js'
import DmgAttr from './dmg/DmgAttr.js'
import DmgCalc from './dmg/DmgCalc.js'
import { MiaoError, Meta, Common } from '#miao'
import { miaoPath } from '#miao.path'
export default class ProfileDmg extends Base {
constructor (profile = {}, game = 'gs') {
@ -20,14 +21,13 @@ export default class ProfileDmg extends Base {
}
static dmgRulePath (name, game = 'gs') {
const _path = process.cwd()
let dmgFile = [
{ file: 'calc_user', name: '自定义伤害' },
{ file: 'calc_auto', name: '组团伤害', test: () => Common.cfg('teamCalc') },
{ file: 'calc', name: '喵喵' }
]
for (let ds of dmgFile) {
let path = `${_path}/plugins/miao-plugin/resources/meta-${game}/character/${name}/${ds.file}.js`
let path = `${miaoPath}/resources/meta-${game}/character/${name}/${ds.file}.js`
if (ds.test && !ds.test()) {
continue
}

View File

@ -1,8 +1,9 @@
import { Data } from '#miao'
import lodash from 'lodash'
import fs from 'node:fs'
import { miaoPath } from '#miao.path'
const charPath = process.cwd() + '/plugins/miao-plugin/resources/meta-gs/character'
const charPath = `${miaoPath}/resources/meta-gs/character`
let cfgMap = {
char: {},
async init () {

View File

@ -4,9 +4,9 @@
import fs from 'node:fs'
import lodash from 'lodash'
import sizeOf from 'image-size'
import { Cfg } from '#miao'
import { miaoPath } from '#miao.path'
const rPath = `${process.cwd()}/plugins/miao-plugin/resources`
const rPath = `${miaoPath}/resources`
const CharImg = {
// 获取角色的插画

View File

@ -14,13 +14,14 @@ import Weapon from './Weapon.js'
import User from './User.js'
import MysApi from './MysApi.js'
import Button from './Button.js'
import { rootPath } from '#miao.path'
for (let game of ['gs', 'sr']) {
for (let type of ['artifact', 'character', 'material', 'weapon']) {
let file = `./plugins/miao-plugin/resources/meta-${game}/${type}/index.js`
if (fs.existsSync(file)) {
try {
await import(`file://${process.cwd()}/${file}`)
await import(`file://${rootPath}/${file}`)
} catch (e) {
console.log(e)
}

View File

@ -15,6 +15,7 @@
},
"imports": {
"#miao": "./components/index.js",
"#miao.models": "./models/index.js"
"#miao.models": "./models/index.js",
"#miao.path": "./tools/path.js"
}
}

View File

@ -377,8 +377,4 @@
</div>
</div>
{{if game === 'sr' && data.dataSource === '喵喵Api'}}
<div class="copyright ad">关注微信公众号“星铁工具箱”获得更多信息</div>
{{/if}}
{{/block}}

View File

@ -1,6 +1,7 @@
import { Data, Version } from '#miao'
import fs from 'node:fs'
import Trans from './trans.js'
import { rootPath } from '#miao.path'
let relpyPrivate = async function () {
}
@ -33,7 +34,7 @@ const Index = {
if (!Version.isV3 && !Version.isAlemonjs) {
console.log('警告miao-plugin需要V3 Yunzai请升级至最新版Miao-Yunzai以使用miao-plugin')
}
if (!fs.existsSync(process.cwd() + '/lib/plugins/runtime.js')) {
if (!fs.existsSync(rootPath + '/lib/plugins/runtime.js')) {
let msg = '警告未检测到runtimemiao-plugin可能无法正常工作。请升级至最新版Miao-Yunzai以使用miao-plugin'
if (!await redis.get('miao:runtime-warning')) {
await relpyPrivate(msg.qq, msg)

15
tools/path.js Normal file
View File

@ -0,0 +1,15 @@
/**
* 根据文件路径计算miao-plugin路径及yunzai路径
* 规避在外部import在非yunzai根目录执行时使用process.cwd()查找文件有可能错误的问题
*/
import * as path from 'path'
import { fileURLToPath } from 'url'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
// miao-plugin根路径
const miaoPath = path.join(__dirname, '..')
// yunzai根路径
const rootPath = path.join(miaoPath, '..', '..')
export { miaoPath, rootPath }

View File

@ -2,6 +2,7 @@ import express from 'express'
import template from 'express-art-template'
import fs from 'node:fs'
import lodash from 'lodash'
import { rootPath } from '#miao.path'
/*
* npm run app web-debug开启Bot后
@ -15,7 +16,7 @@ import lodash from 'lodash'
let app = express()
let _path = process.cwd()
let _path = rootPath
app.engine('html', template)
app.set('views', _path + '/resources/')