mirror of
https://github.com/yoimiya-kokomi/miao-plugin.git
synced 2024-11-16 04:35:42 +00:00
初步去除V2/V3兼容逻辑,开始使用e.runtime进行适配
This commit is contained in:
parent
75e63b0894
commit
9f75804405
@ -1,7 +1,7 @@
|
|||||||
// #老婆
|
// #老婆
|
||||||
import lodash from 'lodash'
|
import lodash from 'lodash'
|
||||||
import { Common } from '../../components/index.js'
|
import { Common } from '../../components/index.js'
|
||||||
import { Character, MysApi } from '../../models/index.js'
|
import { Character, MysApi, AvatarList } from '../../models/index.js'
|
||||||
import { getAvatarList, renderAvatar } from './AvatarCard.js'
|
import { getAvatarList, renderAvatar } from './AvatarCard.js'
|
||||||
|
|
||||||
const relationMap = {
|
const relationMap = {
|
||||||
|
@ -26,7 +26,7 @@ try {
|
|||||||
logs = fs.readFileSync(_logPath, 'utf8') || ''
|
logs = fs.readFileSync(_logPath, 'utf8') || ''
|
||||||
logs = logs.split('\n')
|
logs = logs.split('\n')
|
||||||
|
|
||||||
let temp = {};
|
let temp = {}
|
||||||
let lastLine = {}
|
let lastLine = {}
|
||||||
lodash.forEach(logs, (line) => {
|
lodash.forEach(logs, (line) => {
|
||||||
if (versionCount <= -1) {
|
if (versionCount <= -1) {
|
||||||
@ -83,6 +83,9 @@ let Version = {
|
|||||||
},
|
},
|
||||||
get changelogs () {
|
get changelogs () {
|
||||||
return changelogs
|
return changelogs
|
||||||
|
},
|
||||||
|
runtime () {
|
||||||
|
console.log(`未能找到e.runtime,请升级至最新版${isV3 ? 'V3' : 'V2'}-Yunzai以使用miao-plugin`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,13 +1,11 @@
|
|||||||
import { Data, Version } from '../index.js'
|
import { Version } from '../index.js'
|
||||||
import Cfg from '../Cfg.js'
|
import Cfg from '../Cfg.js'
|
||||||
import fs from 'fs'
|
|
||||||
import { puppeteer } from '../../adapter/index.js'
|
|
||||||
|
|
||||||
const plugin = 'miao-plugin'
|
export default async function (path, params, cfg) {
|
||||||
const _path = process.cwd()
|
let { e } = cfg
|
||||||
|
if (!e.runtime) {
|
||||||
// 尝试性接入,待稳定后替换
|
console.log('未找到e.runtime,请升级至最新版Yunzai')
|
||||||
let runtimeRender = async function (e, path, params, cfg) {
|
}
|
||||||
return e.runtime.render('miao-plugin', path, params, {
|
return e.runtime.render('miao-plugin', path, params, {
|
||||||
retType: cfg.retMsgId ? 'msgId' : 'default',
|
retType: cfg.retMsgId ? 'msgId' : 'default',
|
||||||
beforeRender ({ data }) {
|
beforeRender ({ data }) {
|
||||||
@ -28,50 +26,3 @@ let runtimeRender = async function (e, path, params, cfg) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function (path, params, cfg) {
|
|
||||||
let { e } = cfg
|
|
||||||
if (e.runtime) {
|
|
||||||
return runtimeRender(e, path, params, cfg)
|
|
||||||
}
|
|
||||||
let [app, tpl] = path.split('/')
|
|
||||||
let layoutPath = process.cwd() + '/plugins/miao-plugin/resources/common/layout/'
|
|
||||||
let resPath = `../../../../../plugins/${plugin}/resources/`
|
|
||||||
Data.createDir(`data/html/${plugin}/${app}/${tpl}`, 'root')
|
|
||||||
let data = {
|
|
||||||
...params,
|
|
||||||
_plugin: plugin,
|
|
||||||
saveId: params.saveId || params.save_id || tpl,
|
|
||||||
tplFile: `./plugins/${plugin}/resources/${app}/${tpl}.html`,
|
|
||||||
pluResPath: resPath,
|
|
||||||
_res_path: resPath,
|
|
||||||
_layout_path: layoutPath,
|
|
||||||
_tpl_path: process.cwd() + '/plugins/miao-plugin/resources/common/tpl/',
|
|
||||||
defaultLayout: layoutPath + 'default.html',
|
|
||||||
elemLayout: layoutPath + 'elem.html',
|
|
||||||
pageGotoParams: {
|
|
||||||
waitUntil: 'networkidle0'
|
|
||||||
},
|
|
||||||
sys: {
|
|
||||||
scale: Cfg.scale(cfg.scale || 1),
|
|
||||||
copyright: `Created By Yunzai-Bot<span class="version">${Version.yunzai}</span> & Miao-Plugin<span class="version">${Version.version}</span>`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (process.argv.includes('web-debug')) {
|
|
||||||
// debug下保存当前页面的渲染数据,方便模板编写与调试
|
|
||||||
// 由于只用于调试,开发者只关注自己当时开发的文件即可,暂不考虑app及plugin的命名冲突
|
|
||||||
let saveDir = _path + '/data/ViewData/'
|
|
||||||
if (!fs.existsSync(saveDir)) {
|
|
||||||
fs.mkdirSync(saveDir)
|
|
||||||
}
|
|
||||||
let file = saveDir + tpl + '.json'
|
|
||||||
data._app = app
|
|
||||||
fs.writeFileSync(file, JSON.stringify(data))
|
|
||||||
}
|
|
||||||
let base64 = await puppeteer.screenshot(`miao-plugin/${app}/${tpl}`, data)
|
|
||||||
let ret = true
|
|
||||||
if (base64) {
|
|
||||||
ret = await e.reply(base64)
|
|
||||||
}
|
|
||||||
return cfg.retMsgId ? ret : true
|
|
||||||
}
|
|
||||||
|
@ -113,7 +113,7 @@ export const cfgSchema = {
|
|||||||
title: '面板计算属性',
|
title: '面板计算属性',
|
||||||
key: '计算',
|
key: '计算',
|
||||||
def: false,
|
def: false,
|
||||||
desc: '实验特性:#雷神面板 使用面板计算属性取代展柜属性'
|
desc: '#雷神面板 使用面板计算属性取代展柜属性。功能实验中,开启后可能会有角色面板数据错误,请慎重开启'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
18
index.js
18
index.js
@ -1,4 +1,5 @@
|
|||||||
import { Data, Version } from './components/index.js'
|
import { Data, Version } from './components/index.js'
|
||||||
|
import fs from 'fs'
|
||||||
|
|
||||||
export * from './apps/index.js'
|
export * from './apps/index.js'
|
||||||
|
|
||||||
@ -13,11 +14,9 @@ setTimeout(async function () {
|
|||||||
let msgStr = await redis.get('miao:restart-msg')
|
let msgStr = await redis.get('miao:restart-msg')
|
||||||
let relpyPrivate = async function () {
|
let relpyPrivate = async function () {
|
||||||
}
|
}
|
||||||
if (!Version.isV3) {
|
let common = await Data.importModule(Version.isV3 ? 'lib/common/common.js' : 'lib/common.js', 'root')
|
||||||
let common = await Data.importModule('lib/common.js')
|
if (common && common.default && common.default.relpyPrivate) {
|
||||||
if (common && common.default && common.default.relpyPrivate) {
|
relpyPrivate = common.default.relpyPrivate
|
||||||
relpyPrivate = common.default.relpyPrivate
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (msgStr) {
|
if (msgStr) {
|
||||||
let msg = JSON.parse(msgStr)
|
let msg = JSON.parse(msgStr)
|
||||||
@ -26,4 +25,13 @@ setTimeout(async function () {
|
|||||||
let msgs = [`当前喵喵版本: ${Version.version}`, '您可使用 #喵喵版本 命令查看更新信息']
|
let msgs = [`当前喵喵版本: ${Version.version}`, '您可使用 #喵喵版本 命令查看更新信息']
|
||||||
await relpyPrivate(msg.qq, msgs.join('\n'))
|
await relpyPrivate(msg.qq, msgs.join('\n'))
|
||||||
}
|
}
|
||||||
|
if (!fs.existsSync(process.cwd() + (Version.isV3 ? '/lib/plugins/runtime.js' : '/lib/adapter/runtime.js'))) {
|
||||||
|
let msg = '警告:未检测到runtime,miao-plugin可能无法正常工作。请升级至最新版Yunzai以使用miao-plugin'
|
||||||
|
if (!await redis.get('miao:runtime-warning')) {
|
||||||
|
await relpyPrivate(msg.qq, msg)
|
||||||
|
await redis.set('miao:runtime-warning', 'true', { EX: 3600 * 24 })
|
||||||
|
} else {
|
||||||
|
console.log(msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
}, 1000)
|
}, 1000)
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import { User } from './index.js'
|
import { User } from './index.js'
|
||||||
import YzMysInfo from './mys-lib/YzMysInfo.js'
|
import { Version } from '../components/index.js'
|
||||||
import YzMysApi from './mys-lib/YzMysApi.js'
|
|
||||||
|
|
||||||
export default class MysApi {
|
export default class MysApi {
|
||||||
constructor (e, uid, mysInfo) {
|
constructor (e, uid, mysInfo) {
|
||||||
@ -14,16 +13,16 @@ export default class MysApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static async init (e, cfg = 'all') {
|
static async init (e, cfg = 'all') {
|
||||||
|
if (!e.runtime) {
|
||||||
|
Version.runtime()
|
||||||
|
return false
|
||||||
|
}
|
||||||
if (typeof (cfg) === 'string') {
|
if (typeof (cfg) === 'string') {
|
||||||
cfg = { auth: cfg }
|
cfg = { auth: cfg }
|
||||||
}
|
}
|
||||||
let { auth = 'all' } = cfg
|
let { auth = 'all' } = cfg
|
||||||
let mys = false
|
let mys = false
|
||||||
if (e.runtime) {
|
mys = await e.runtime.getMysInfo(auth)
|
||||||
mys = await e.runtime.getMysInfo(auth)
|
|
||||||
} else {
|
|
||||||
mys = await YzMysInfo.init(e, auth === 'cookie' ? 'detail' : 'roleIndex')
|
|
||||||
}
|
|
||||||
if (!mys) {
|
if (!mys) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -33,10 +32,14 @@ export default class MysApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static async initUser (e, cfg = 'all') {
|
static async initUser (e, cfg = 'all') {
|
||||||
|
if (!e.runtime) {
|
||||||
|
Version.runtime()
|
||||||
|
return false
|
||||||
|
}
|
||||||
if (typeof (cfg) === 'string') {
|
if (typeof (cfg) === 'string') {
|
||||||
cfg = { auth: cfg }
|
cfg = { auth: cfg }
|
||||||
}
|
}
|
||||||
let uid = await YzMysInfo.getUid(e)
|
let uid = e.runtime?.uid
|
||||||
if (uid) {
|
if (uid) {
|
||||||
return new User({ id: e.user_id, uid: uid })
|
return new User({ id: e.user_id, uid: uid })
|
||||||
}
|
}
|
||||||
@ -63,11 +66,11 @@ export default class MysApi {
|
|||||||
return new User({ id: this.e.user_id, uid: this.uid })
|
return new User({ id: this.e.user_id, uid: this.uid })
|
||||||
}
|
}
|
||||||
|
|
||||||
getMysApi (e) {
|
async getMysApi (e, targetType = 'all', option = {}) {
|
||||||
if (this.mys) {
|
if (this.mys) {
|
||||||
return this.mys
|
return this.mys
|
||||||
}
|
}
|
||||||
this.mys = new YzMysApi(this.uid, this.ck, { log: false, e })
|
this.mys = await e.runtime.getMysApi(targetType, option)
|
||||||
return this.mys
|
return this.mys
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +79,7 @@ export default class MysApi {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
let e = this.e
|
let e = this.e
|
||||||
let mys = this.getMysApi(e)
|
let mys = await this.getMysApi(e, api, { log: false })
|
||||||
// 暂时先在plugin侧阻止错误,防止刷屏
|
// 暂时先在plugin侧阻止错误,防止刷屏
|
||||||
e._original_reply = e._original_reply || e.reply
|
e._original_reply = e._original_reply || e.reply
|
||||||
e._reqCount = e._reqCount || 0
|
e._reqCount = e._reqCount || 0
|
||||||
|
@ -1,38 +0,0 @@
|
|||||||
import { Data } from '../../components/index.js'
|
|
||||||
|
|
||||||
let YzMysApi = false
|
|
||||||
|
|
||||||
async function init () {
|
|
||||||
let mys = await Data.importModule('plugins/genshin/model/mys/mysApi.js', 'root')
|
|
||||||
if (mys && mys.default) {
|
|
||||||
YzMysApi = mys.default
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
await init()
|
|
||||||
if (!YzMysApi) {
|
|
||||||
// v2兼容处理
|
|
||||||
YzMysApi = class {
|
|
||||||
constructor (uid, ck, { e }) {
|
|
||||||
this.e = e
|
|
||||||
}
|
|
||||||
|
|
||||||
async getData (api, data) {
|
|
||||||
this.mysApi = this.mysApi || await this.e.getMysApi({
|
|
||||||
auth: 'all',
|
|
||||||
targetType: 'all',
|
|
||||||
cookieType: 'all'
|
|
||||||
})
|
|
||||||
if (!this.mysApi) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
let ret = await this.mysApi.getData(api, data)
|
|
||||||
if (ret) {
|
|
||||||
return { data: ret }
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
export default YzMysApi
|
|
@ -1,66 +0,0 @@
|
|||||||
import { Data } from '../../components/index.js'
|
|
||||||
|
|
||||||
let YzMysInfo = false
|
|
||||||
let MysUser = false
|
|
||||||
|
|
||||||
async function init () {
|
|
||||||
let mys = await Data.importModule('plugins/genshin/model/mys/mysInfo.js', 'root')
|
|
||||||
if (mys && mys.default) {
|
|
||||||
YzMysInfo = mys.default
|
|
||||||
} else {
|
|
||||||
let module = await Data.importModule('lib/components/models/MysUser.js', 'root')
|
|
||||||
if (module && module.default) {
|
|
||||||
MysUser = module.default
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
await init()
|
|
||||||
|
|
||||||
if (!YzMysInfo) {
|
|
||||||
// v2 MysInfo
|
|
||||||
YzMysInfo = class {
|
|
||||||
constructor (e, uid, cookieUser) {
|
|
||||||
if (e) {
|
|
||||||
this.e = e
|
|
||||||
this.userId = String(e.user_id)
|
|
||||||
}
|
|
||||||
this.uid = uid
|
|
||||||
this.ckInfo = {
|
|
||||||
ck: cookieUser.cookie,
|
|
||||||
uid: cookieUser.uid
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static async init (e, api) {
|
|
||||||
let MysApi = await e.getMysApi({
|
|
||||||
auth: 'all',
|
|
||||||
targetType: 'all',
|
|
||||||
cookieType: api === 'detail' ? 'self:' : 'all'
|
|
||||||
}) // V2兼容
|
|
||||||
let { selfUser, targetUser, cookieUser } = MysApi
|
|
||||||
let mys = new YzMysInfo(e, targetUser.uid || selfUser.uid, cookieUser)
|
|
||||||
mys._MysApi = MysApi
|
|
||||||
return mys
|
|
||||||
}
|
|
||||||
|
|
||||||
// 检查当前UID是否有CK绑定
|
|
||||||
static async checkUidBing (uid) {
|
|
||||||
let user = await MysUser.get(uid)
|
|
||||||
return user.cookie
|
|
||||||
}
|
|
||||||
|
|
||||||
static async getUid (e) {
|
|
||||||
let user = await e.checkAuth({
|
|
||||||
auth: 'all'
|
|
||||||
})
|
|
||||||
if (!user || !user.getMysUser) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
let mysUser = await user.getMysUser()
|
|
||||||
return mysUser ? mysUser.uid : false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default YzMysInfo
|
|
@ -256,6 +256,9 @@ body {
|
|||||||
background-image: url(../common/bg/bg-pyro.jpg);
|
background-image: url(../common/bg/bg-pyro.jpg);
|
||||||
}
|
}
|
||||||
.data-info {
|
.data-info {
|
||||||
|
position: absolute;
|
||||||
|
bottom: -10px;
|
||||||
|
right: 15px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
color: rgba(255, 255, 255, 0.85);
|
color: rgba(255, 255, 255, 0.85);
|
||||||
text-align: right;
|
text-align: right;
|
||||||
|
@ -40,14 +40,6 @@
|
|||||||
<li><i class="i-re"></i>元素充能<strong>{{attr.recharge}}</strong></li>
|
<li><i class="i-re"></i>元素充能<strong>{{attr.recharge}}</strong></li>
|
||||||
<li><i class="i-dmg"></i>伤害加成<strong>{{attr.dmg}}</strong></li>
|
<li><i class="i-dmg"></i>伤害加成<strong>{{attr.dmg}}</strong></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="data-info">
|
|
||||||
{{if data.dataSource}}
|
|
||||||
<span>{{if data._attrCalc}}[ 面板属性计算:开启 ] ·{{/if}} 数据源:{{ {miao:"喵喵Api",enka:"Enka.Network",input:"手工录入"}[data.dataSource]||data.dataSource }}</span>
|
|
||||||
{{/if}}
|
|
||||||
{{if data.updateTime}}
|
|
||||||
<span class="time">{{data.updateTime}}</span>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="char-cons">
|
<div class="char-cons">
|
||||||
@ -61,6 +53,15 @@
|
|||||||
</div>
|
</div>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="data-info">
|
||||||
|
{{if data.dataSource}}
|
||||||
|
<span>{{if data._attrCalc}}[面板计算:开启] ·{{/if}} 数据源:{{ {miao:"喵喵Api",enka:"Enka.Network",input:"手工录入"}[data.dataSource]||data.dataSource }}</span>
|
||||||
|
{{/if}}
|
||||||
|
{{if data.updateTime}}
|
||||||
|
<span class="time">{{data.updateTime}}</span>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{if mode === "profile" && dataSource !== "input2"}}
|
{{if mode === "profile" && dataSource !== "input2"}}
|
||||||
|
@ -310,6 +310,9 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.data-info {
|
.data-info {
|
||||||
|
position: absolute;
|
||||||
|
bottom: -10px;
|
||||||
|
right: 15px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
color: rgba(255, 255, 255, .85);
|
color: rgba(255, 255, 255, .85);
|
||||||
text-align: right;
|
text-align: right;
|
||||||
|
Loading…
Reference in New Issue
Block a user