refactor: 调整加载顺序
This commit is contained in:
parent
187f23cdea
commit
2f1b7f987b
|
@ -10,7 +10,7 @@ const child1 = spawn(
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
const child2 = spawn(
|
const child2 = spawn(
|
||||||
'node --no-warnings=ExperimentalWarning --loader ts-node/esm image/main.ts',
|
'node --no-warnings=ExperimentalWarning --loader ts-node/esm src/server.ts',
|
||||||
argvs.split(' '),
|
argvs.split(' '),
|
||||||
{
|
{
|
||||||
shell: true,
|
shell: true,
|
130
image/main.ts
130
image/main.ts
|
@ -1,130 +0,0 @@
|
||||||
import '../src/init/require.js'
|
|
||||||
import '../src/init/config.js'
|
|
||||||
import '../src/init/logger.js'
|
|
||||||
import '../src/init/redis.js'
|
|
||||||
import Koa from 'koa'
|
|
||||||
import KoaStatic from 'koa-static'
|
|
||||||
import Router from 'koa-router'
|
|
||||||
import { Component } from 'yunzai/utils'
|
|
||||||
import { Dirent, readdirSync } from 'fs'
|
|
||||||
import { join } from 'path'
|
|
||||||
import mount from 'koa-mount'
|
|
||||||
|
|
||||||
const Com = new Component()
|
|
||||||
const app = new Koa()
|
|
||||||
const router = new Router()
|
|
||||||
const Port = 8080
|
|
||||||
const PATH = process.cwd().replace(/\\/g, '\\\\')
|
|
||||||
|
|
||||||
const Dynamic = async (Router: Dirent) => {
|
|
||||||
const modulePath = `file://${join(Router.parentPath, Router.name)}?update=${Date.now()}`
|
|
||||||
return (await import(modulePath))?.default
|
|
||||||
}
|
|
||||||
|
|
||||||
// 得到plugins目录
|
|
||||||
const flies = readdirSync(join(process.cwd(), 'plugins'), {
|
|
||||||
withFileTypes: true
|
|
||||||
})
|
|
||||||
.filter(flie => !flie.isFile())
|
|
||||||
.map(flie => {
|
|
||||||
const dir = flie?.path ?? flie?.parentPath
|
|
||||||
flie.parentPath = dir
|
|
||||||
return flie
|
|
||||||
}) // 增加兼容性
|
|
||||||
|
|
||||||
//
|
|
||||||
const Routers = []
|
|
||||||
|
|
||||||
// 解析路由
|
|
||||||
for (const flie of flies) {
|
|
||||||
const plugins = readdirSync(join(flie?.parentPath, flie.name), {
|
|
||||||
withFileTypes: true
|
|
||||||
})
|
|
||||||
.filter(
|
|
||||||
flie => flie.isFile() && /^(routes.jsx|routes.tsx)$/.test(flie.name)
|
|
||||||
)
|
|
||||||
.map(flie => {
|
|
||||||
const dir = flie?.path ?? flie?.parentPath
|
|
||||||
flie.parentPath = dir
|
|
||||||
return flie
|
|
||||||
}) // 增加兼容性
|
|
||||||
|
|
||||||
//
|
|
||||||
for (const plugin of plugins) {
|
|
||||||
const routes = await Dynamic(plugin)
|
|
||||||
// 不存在
|
|
||||||
if (!routes) continue
|
|
||||||
// 不是数组
|
|
||||||
if (!Array.isArray(routes)) continue
|
|
||||||
//
|
|
||||||
for (const item of routes) {
|
|
||||||
const url = `/${flie.name}${item.url}`
|
|
||||||
console.log(`http://127.0.0.1:${Port}${url}`)
|
|
||||||
Routers.push({
|
|
||||||
parentPath: plugin.parentPath,
|
|
||||||
name: plugin.name,
|
|
||||||
uri: url,
|
|
||||||
url: item.url
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 辅助函数:替换路径
|
|
||||||
const replacePaths = htmlContent => {
|
|
||||||
// 置换成 /file请求
|
|
||||||
htmlContent = htmlContent.replace(new RegExp(PATH, 'g'), '/file')
|
|
||||||
// 正则表达式匹配 src、href 和 url 中的路径
|
|
||||||
const regex = /(src|href|url)\s*=\s*["']([^"']*\\[^"']*)["']/g
|
|
||||||
const cssUrlRegex = /url\(["']?([^"'\)\\]*\\[^"'\)]*)["']?\)/g
|
|
||||||
htmlContent = htmlContent.replace(regex, (_, p1, p2) => {
|
|
||||||
const correctedPath = p2.replace(/\\/g, '/')
|
|
||||||
return `${p1}="${correctedPath}"`
|
|
||||||
})
|
|
||||||
return htmlContent.replace(cssUrlRegex, (_, p1) => {
|
|
||||||
const correctedPath = p1.replace(/\\/g, '/')
|
|
||||||
return `url(${correctedPath})`
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const Router of Routers) {
|
|
||||||
router.get(Router.uri, async ctx => {
|
|
||||||
// 动态加载
|
|
||||||
const routes = await Dynamic(Router)
|
|
||||||
// 不存在
|
|
||||||
if (!routes) return
|
|
||||||
// 不是数组
|
|
||||||
if (!Array.isArray(routes)) return
|
|
||||||
// 查找
|
|
||||||
const item = routes.find(i => i.url == Router.url)
|
|
||||||
// 丢失了
|
|
||||||
if (!item) return
|
|
||||||
/**
|
|
||||||
* 渲染html
|
|
||||||
*/
|
|
||||||
const options = item?.options ?? {}
|
|
||||||
const HTML = Com.create(item.element, {
|
|
||||||
...options,
|
|
||||||
file_create: false
|
|
||||||
})
|
|
||||||
// 置换为file请求
|
|
||||||
ctx.body = replacePaths(HTML)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
app.use(mount('/file', KoaStatic(PATH)))
|
|
||||||
|
|
||||||
// routes
|
|
||||||
app.use(router.routes())
|
|
||||||
|
|
||||||
// listen 8000
|
|
||||||
app.listen(Port, () => {
|
|
||||||
console.log('______________')
|
|
||||||
console.log('Server is running on port ' + Port)
|
|
||||||
console.log('______________')
|
|
||||||
console.log('自行调整默认浏览器尺寸 800 X 1280 100%')
|
|
||||||
console.log('如果需要运行时重新计算className')
|
|
||||||
console.log('请确保一直打开此程序')
|
|
||||||
console.log('______________')
|
|
||||||
})
|
|
17
index.js
17
index.js
|
@ -1,19 +1,7 @@
|
||||||
import { execSync, spawn } from 'child_process'
|
import { execSync, spawn } from 'child_process'
|
||||||
const argv = [...process.argv].splice(2)
|
const argv = [...process.argv].splice(2)
|
||||||
const argvs = argv.join(' ').replace(/(\S+\.js|\S+\.ts)/g, '')
|
const argvs = argv.join(' ').replace(/(\S+\.js|\S+\.ts)/g, '')
|
||||||
|
|
||||||
/**
|
|
||||||
* **********
|
|
||||||
* 生成css文件
|
|
||||||
* **********
|
|
||||||
*/
|
|
||||||
execSync('tailwindcss -i ./src/input.css -o ./public/output.css')
|
execSync('tailwindcss -i ./src/input.css -o ./public/output.css')
|
||||||
|
|
||||||
/**
|
|
||||||
* ***************
|
|
||||||
* 启动内部运行脚本
|
|
||||||
* ***************
|
|
||||||
*/
|
|
||||||
const child = spawn(
|
const child = spawn(
|
||||||
'node --no-warnings=ExperimentalWarning --loader ts-node/esm src/main.ts',
|
'node --no-warnings=ExperimentalWarning --loader ts-node/esm src/main.ts',
|
||||||
argvs.split(' '),
|
argvs.split(' '),
|
||||||
|
@ -22,11 +10,6 @@ const child = spawn(
|
||||||
stdio: 'inherit'
|
stdio: 'inherit'
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
/**
|
|
||||||
* *************
|
|
||||||
* exit
|
|
||||||
* *************
|
|
||||||
*/
|
|
||||||
process.on('SIGINT', () => {
|
process.on('SIGINT', () => {
|
||||||
if (child.pid) process.kill(child.pid)
|
if (child.pid) process.kill(child.pid)
|
||||||
if (process.pid) process.exit()
|
if (process.pid) process.exit()
|
||||||
|
|
10
package.json
10
package.json
|
@ -16,7 +16,7 @@
|
||||||
"logs": "pm2 logs",
|
"logs": "pm2 logs",
|
||||||
"monit": "pm2 monit",
|
"monit": "pm2 monit",
|
||||||
"pm2": "pm2",
|
"pm2": "pm2",
|
||||||
"image": "node image/index.js",
|
"image": "node image.js",
|
||||||
"css": "tailwindcss -i ./src/input.css -o ./public/output.css",
|
"css": "tailwindcss -i ./src/input.css -o ./public/output.css",
|
||||||
"format": "prettier --write .",
|
"format": "prettier --write .",
|
||||||
"prepare": "husky"
|
"prepare": "husky"
|
||||||
|
@ -98,8 +98,14 @@
|
||||||
"./core": {
|
"./core": {
|
||||||
"import": "./src/core/index.js"
|
"import": "./src/core/index.js"
|
||||||
},
|
},
|
||||||
|
"./init": {
|
||||||
|
"import": "./src/init/index.js"
|
||||||
|
},
|
||||||
|
"./image": {
|
||||||
|
"import": "./src/image/index.js"
|
||||||
|
},
|
||||||
"./image/types": {
|
"./image/types": {
|
||||||
"import": "./image/types.js"
|
"import": "./src/image/types.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"imports": {
|
"imports": {
|
||||||
|
|
|
@ -48,18 +48,22 @@ export class Client extends IcqqClient {
|
||||||
/**
|
/**
|
||||||
* 跳过登录
|
* 跳过登录
|
||||||
*/
|
*/
|
||||||
if (cfg.bot.skip_login) return await this.skip_login(bot)
|
if (cfg.bot.skip_login) {
|
||||||
|
return await this.skip_login(bot)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 正常的登录
|
* 正常的登录
|
||||||
*/
|
*/
|
||||||
await bot.login(cfg.qq, cfg.pwd)
|
await bot.login(cfg.qq, cfg.pwd)
|
||||||
|
|
||||||
bot[bot.uin] = bot
|
bot[bot.uin] = bot
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 全局变量 bot
|
* 全局变量 bot
|
||||||
*/
|
*/
|
||||||
global.Bot = bot
|
global.Bot = bot
|
||||||
|
|
||||||
return bot
|
return bot
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,29 +73,39 @@ export class Client extends IcqqClient {
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
static async skip_login(bot) {
|
static async skip_login(bot) {
|
||||||
|
//
|
||||||
bot.uin = 88888
|
bot.uin = 88888
|
||||||
|
//
|
||||||
bot[bot.uin] = bot
|
bot[bot.uin] = bot
|
||||||
/**
|
/**
|
||||||
* 全局变量 bot
|
* 全局变量 bot
|
||||||
*/
|
*/
|
||||||
global.Bot = bot
|
global.Bot = bot
|
||||||
/**
|
|
||||||
* 加载插件
|
|
||||||
*/
|
|
||||||
await PluginsLoader.load()
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
return
|
return bot
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载插件
|
||||||
|
* @param bot
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
static async PluginsLoader() {
|
||||||
|
await PluginsLoader.load()
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 内置Redis
|
* 不推荐使用,可能放弃
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
export const Redis = global.redis
|
export const Redis = global.redis
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 机器人客户端
|
* 机器人客户端
|
||||||
*/
|
*/
|
||||||
export const Bot = global.Bot as typeof Client.prototype
|
export const Bot = global.Bot
|
||||||
|
|
|
@ -1,2 +1,7 @@
|
||||||
|
import { segment } from 'icqq'
|
||||||
|
/**
|
||||||
|
* global.segment
|
||||||
|
*/
|
||||||
|
global.segment = segment
|
||||||
export { segment } from 'icqq'
|
export { segment } from 'icqq'
|
||||||
export { segment as Segment } from 'icqq'
|
export { segment as Segment } from 'icqq'
|
||||||
|
|
|
@ -163,7 +163,7 @@ class PluginsLoader {
|
||||||
logger.error(decodeURI(i.reason))
|
logger.error(decodeURI(i.reason))
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error)
|
logger.error(error)
|
||||||
if (packageErr && error.stack.includes('Cannot find package')) {
|
if (packageErr && error.stack.includes('Cannot find package')) {
|
||||||
packageErr.push({ error, file })
|
packageErr.push({ error, file })
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
import { Common } from '../../miao.js'
|
import { Common } from '../../mys/miao.js'
|
||||||
import { EventType } from './types.js'
|
import { EventType } from './types.js'
|
||||||
|
|
||||||
import { type EventMap } from 'icqq'
|
import { type EventMap } from 'icqq'
|
||||||
|
@ -265,4 +265,9 @@ export class Plugin {
|
||||||
/**
|
/**
|
||||||
* @deprecated 已废弃
|
* @deprecated 已废弃
|
||||||
*/
|
*/
|
||||||
export const plugin = Plugin
|
export const plugin = Plugin
|
||||||
|
|
||||||
|
/**
|
||||||
|
* global.plugin
|
||||||
|
*/
|
||||||
|
global.plugin = plugin
|
|
@ -11,7 +11,7 @@ import puppeteer from '../../utils/puppeteer/puppeteer.js'
|
||||||
import * as common from '../../utils/common.js'
|
import * as common from '../../utils/common.js'
|
||||||
import cfg from '../../config/config.js'
|
import cfg from '../../config/config.js'
|
||||||
import Handler from './handler.js'
|
import Handler from './handler.js'
|
||||||
import { Version } from '../../miao.js'
|
import { Version } from '../../mys/miao.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated 已废弃
|
* @deprecated 已废弃
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Sequelize, DataTypes, Model } from 'sequelize'
|
import { Sequelize, DataTypes, Model } from 'sequelize'
|
||||||
import { Data } from '../miao.js'
|
import { Data } from '../mys/miao.js'
|
||||||
|
|
||||||
Data.createDir('/data/db', 'root')
|
Data.createDir('/data/db', 'root')
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,129 @@
|
||||||
|
import '../init/index'
|
||||||
|
import Koa from 'koa'
|
||||||
|
import KoaStatic from 'koa-static'
|
||||||
|
import Router from 'koa-router'
|
||||||
|
import { Dirent, readdirSync } from 'fs'
|
||||||
|
import { join } from 'path'
|
||||||
|
import mount from 'koa-mount'
|
||||||
|
import { Component } from '../utils/index.js'
|
||||||
|
export * from './types.js'
|
||||||
|
export async function createServer() {
|
||||||
|
//
|
||||||
|
const Com = new Component()
|
||||||
|
const app = new Koa()
|
||||||
|
const router = new Router()
|
||||||
|
const Port = 8080
|
||||||
|
const PATH = process.cwd().replace(/\\/g, '\\\\')
|
||||||
|
const Dynamic = async (Router: Dirent) => {
|
||||||
|
const modulePath = `file://${join(Router.parentPath, Router.name)}?update=${Date.now()}`
|
||||||
|
return (await import(modulePath))?.default
|
||||||
|
}
|
||||||
|
|
||||||
|
// 得到plugins目录
|
||||||
|
const flies = readdirSync(join(process.cwd(), 'plugins'), {
|
||||||
|
withFileTypes: true
|
||||||
|
})
|
||||||
|
.filter(flie => !flie.isFile())
|
||||||
|
.map(flie => {
|
||||||
|
const dir = flie?.path ?? flie?.parentPath
|
||||||
|
flie.parentPath = dir
|
||||||
|
return flie
|
||||||
|
}) // 增加兼容性
|
||||||
|
|
||||||
|
//
|
||||||
|
const Routers = []
|
||||||
|
|
||||||
|
// 解析路由
|
||||||
|
for (const flie of flies) {
|
||||||
|
const plugins = readdirSync(join(flie?.parentPath, flie.name), {
|
||||||
|
withFileTypes: true
|
||||||
|
})
|
||||||
|
.filter(
|
||||||
|
flie => flie.isFile() && /^(routes.jsx|routes.tsx)$/.test(flie.name)
|
||||||
|
)
|
||||||
|
.map(flie => {
|
||||||
|
const dir = flie?.path ?? flie?.parentPath
|
||||||
|
flie.parentPath = dir
|
||||||
|
return flie
|
||||||
|
}) // 增加兼容性
|
||||||
|
|
||||||
|
//
|
||||||
|
for (const plugin of plugins) {
|
||||||
|
const routes = await Dynamic(plugin)
|
||||||
|
// 不存在
|
||||||
|
if (!routes) continue
|
||||||
|
// 不是数组
|
||||||
|
if (!Array.isArray(routes)) continue
|
||||||
|
//
|
||||||
|
for (const item of routes) {
|
||||||
|
const url = `/${flie.name}${item.url}`
|
||||||
|
console.log(`http://127.0.0.1:${Port}${url}`)
|
||||||
|
Routers.push({
|
||||||
|
parentPath: plugin.parentPath,
|
||||||
|
name: plugin.name,
|
||||||
|
uri: url,
|
||||||
|
url: item.url
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 辅助函数:替换路径
|
||||||
|
const replacePaths = htmlContent => {
|
||||||
|
// 置换成 /file请求
|
||||||
|
htmlContent = htmlContent.replace(new RegExp(PATH, 'g'), '/file')
|
||||||
|
// 正则表达式匹配 src、href 和 url 中的路径
|
||||||
|
const regex = /(src|href|url)\s*=\s*["']([^"']*\\[^"']*)["']/g
|
||||||
|
const cssUrlRegex = /url\(["']?([^"'\)\\]*\\[^"'\)]*)["']?\)/g
|
||||||
|
htmlContent = htmlContent.replace(regex, (_, p1, p2) => {
|
||||||
|
const correctedPath = p2.replace(/\\/g, '/')
|
||||||
|
return `${p1}="${correctedPath}"`
|
||||||
|
})
|
||||||
|
return htmlContent.replace(cssUrlRegex, (_, p1) => {
|
||||||
|
const correctedPath = p1.replace(/\\/g, '/')
|
||||||
|
return `url(${correctedPath})`
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const Router of Routers) {
|
||||||
|
router.get(Router.uri, async ctx => {
|
||||||
|
// 动态加载
|
||||||
|
const routes = await Dynamic(Router)
|
||||||
|
// 不存在
|
||||||
|
if (!routes) return
|
||||||
|
// 不是数组
|
||||||
|
if (!Array.isArray(routes)) return
|
||||||
|
// 查找
|
||||||
|
const item = routes.find(i => i.url == Router.url)
|
||||||
|
// 丢失了
|
||||||
|
if (!item) return
|
||||||
|
/**
|
||||||
|
* 渲染html
|
||||||
|
*/
|
||||||
|
const options = item?.options ?? {}
|
||||||
|
const HTML = Com.create(item.element, {
|
||||||
|
...options,
|
||||||
|
file_create: false
|
||||||
|
})
|
||||||
|
// 置换为file请求
|
||||||
|
ctx.body = replacePaths(HTML)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
app.use(mount('/file', KoaStatic(PATH)))
|
||||||
|
|
||||||
|
// routes
|
||||||
|
app.use(router.routes())
|
||||||
|
|
||||||
|
// listen 8000
|
||||||
|
app.listen(Port, () => {
|
||||||
|
console.log('______________')
|
||||||
|
console.log('Server is running on port ' + Port)
|
||||||
|
console.log('______________')
|
||||||
|
console.log('自行调整默认浏览器尺寸 800 X 1280 100%')
|
||||||
|
console.log('如果需要运行时重新计算className')
|
||||||
|
console.log('请确保一直打开此程序')
|
||||||
|
console.log('______________')
|
||||||
|
})
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
import { type ComponentCreateOpsionType } from 'yunzai/utils'
|
import { ComponentCreateOpsionType } from '../utils/component'
|
||||||
export type RouterType = {
|
export type RouterType = {
|
||||||
url: string
|
url: string
|
||||||
element: React.ReactNode
|
element: React.ReactNode
|
|
@ -1,6 +0,0 @@
|
||||||
import './init/require.js'
|
|
||||||
import './init/config.js'
|
|
||||||
import './init/logger.js'
|
|
||||||
import './init/redis.js'
|
|
||||||
import './init/process.js'
|
|
||||||
import './init/run.js'
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
import './require.js'
|
||||||
|
import './config.js'
|
||||||
|
import './logger.js'
|
||||||
|
import './redis.js'
|
||||||
|
import './process.js'
|
||||||
|
import './run.js'
|
|
@ -44,6 +44,8 @@ async function redisInit() {
|
||||||
})
|
})
|
||||||
/** 全局变量 redis */
|
/** 全局变量 redis */
|
||||||
global.redis = client as any
|
global.redis = client as any
|
||||||
|
|
||||||
|
//
|
||||||
logger.info('Redis 连接成功')
|
logger.info('Redis 连接成功')
|
||||||
return client
|
return client
|
||||||
}
|
}
|
||||||
|
|
27
src/main.ts
27
src/main.ts
|
@ -1,19 +1,6 @@
|
||||||
import './init.js'
|
import 'yunzai/init'
|
||||||
import { plugin, segment, Client } from './core/index.js'
|
import { Client, Bot as bot } from 'yunzai/core'
|
||||||
import { Renderer } from './utils/index.js'
|
import { createQQ } from './qq.js'
|
||||||
import { createQQ } from './config/qq.js'
|
|
||||||
/**
|
|
||||||
* global.plugin
|
|
||||||
*/
|
|
||||||
global.plugin = plugin
|
|
||||||
/**
|
|
||||||
* global.segment
|
|
||||||
*/
|
|
||||||
global.segment = segment
|
|
||||||
/**
|
|
||||||
* global.Renderer
|
|
||||||
*/
|
|
||||||
global.Renderer = Renderer
|
|
||||||
/**
|
/**
|
||||||
* 确保所有微任务做好准备后
|
* 确保所有微任务做好准备后
|
||||||
* 再进行宏任务
|
* 再进行宏任务
|
||||||
|
@ -24,4 +11,12 @@ setTimeout(async () => {
|
||||||
* run
|
* run
|
||||||
*/
|
*/
|
||||||
await Client.run()
|
await Client.run()
|
||||||
|
|
||||||
|
console.log('bot', bot)
|
||||||
|
console.log('Bot', Bot)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loader
|
||||||
|
*/
|
||||||
|
await Client.PluginsLoader()
|
||||||
}, 0)
|
}, 0)
|
||||||
|
|
|
@ -13,7 +13,7 @@ import NoteUser from './NoteUser.js'
|
||||||
import MysApi from './mysApi.js'
|
import MysApi from './mysApi.js'
|
||||||
import MysUtil from './MysUtil.js'
|
import MysUtil from './MysUtil.js'
|
||||||
import { MysUserDB } from '../db/index.js'
|
import { MysUserDB } from '../db/index.js'
|
||||||
import { Data } from '../miao.js'
|
import { Data } from './miao.js'
|
||||||
|
|
||||||
const tables = {
|
const tables = {
|
||||||
// ltuid-uid 查询表
|
// ltuid-uid 查询表
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { Data } from '../miao.js'
|
import { Data } from './miao.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
|
@ -3,7 +3,7 @@ import lodash from 'lodash'
|
||||||
import MysUser from './MysUser.js'
|
import MysUser from './MysUser.js'
|
||||||
import MysUtil from './MysUtil.js'
|
import MysUtil from './MysUtil.js'
|
||||||
import { UserDB } from '../db/index.js'
|
import { UserDB } from '../db/index.js'
|
||||||
import { Data } from '../miao.js'
|
import { Data } from './miao.js'
|
||||||
/**
|
/**
|
||||||
* *******************
|
* *******************
|
||||||
* Bot实际User用户类
|
* Bot实际User用户类
|
||||||
|
|
|
@ -4,7 +4,7 @@ import fs from 'node:fs'
|
||||||
import lodash from 'lodash'
|
import lodash from 'lodash'
|
||||||
import MysInfo from './mysInfo.js'
|
import MysInfo from './mysInfo.js'
|
||||||
import NoteUser from './NoteUser.js'
|
import NoteUser from './NoteUser.js'
|
||||||
import { Character, Weapon } from '../miao.js'
|
import { Character, Weapon } from './miao.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ***********
|
* ***********
|
||||||
|
@ -350,7 +350,7 @@ class GsCfg {
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
getWeaponDataByWeaponHash(_) {
|
getWeaponDataByWeaponHash(_) {
|
||||||
console.log('gsCfg.getWeaponDataByWeaponHash() 已废弃')
|
logger.info('gsCfg.getWeaponDataByWeaponHash() 已废弃')
|
||||||
return {}
|
return {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -360,7 +360,7 @@ class GsCfg {
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
getAllAbbr() {
|
getAllAbbr() {
|
||||||
console.log('gsCfg.getAllAbbr() 已废弃')
|
logger.info('gsCfg.getAllAbbr() 已废弃')
|
||||||
return {}
|
return {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -371,7 +371,7 @@ class GsCfg {
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
getBingCkSingle(_) {
|
getBingCkSingle(_) {
|
||||||
console.log('gsCfg.getBingCkSingle() 已废弃')
|
logger.info('gsCfg.getBingCkSingle() 已废弃')
|
||||||
return {}
|
return {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -382,7 +382,7 @@ class GsCfg {
|
||||||
* @param data
|
* @param data
|
||||||
*/
|
*/
|
||||||
saveBingCk(_, __) {
|
saveBingCk(_, __) {
|
||||||
console.log('gsCfg.saveBingCk() 已废弃')
|
logger.info('gsCfg.saveBingCk() 已废弃')
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -392,7 +392,7 @@ class GsCfg {
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
getElementByRoleName(_) {
|
getElementByRoleName(_) {
|
||||||
console.log('gsCfg.getElementByRoleName() 已废弃')
|
logger.info('gsCfg.getElementByRoleName() 已废弃')
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -404,7 +404,7 @@ class GsCfg {
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
getSkillDataByskillId(_, __) {
|
getSkillDataByskillId(_, __) {
|
||||||
console.log('gsCfg.getSkillDataByskillId() 已废弃')
|
logger.info('gsCfg.getSkillDataByskillId() 已废弃')
|
||||||
return {}
|
return {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -415,7 +415,7 @@ class GsCfg {
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
fightPropIdToName(_) {
|
fightPropIdToName(_) {
|
||||||
console.log('gsCfg.fightPropIdToName() 已废弃')
|
logger.info('gsCfg.fightPropIdToName() 已废弃')
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -426,7 +426,7 @@ class GsCfg {
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
getRoleTalentByTalentId(_) {
|
getRoleTalentByTalentId(_) {
|
||||||
console.log('gsCfg.getRoleTalentByTalentId 已废弃')
|
logger.info('gsCfg.getRoleTalentByTalentId 已废弃')
|
||||||
return {}
|
return {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -435,7 +435,7 @@ class GsCfg {
|
||||||
* @deprecated 已废弃
|
* @deprecated 已废弃
|
||||||
*/
|
*/
|
||||||
getAbbr() {
|
getAbbr() {
|
||||||
console.log('gsCfg.getAbbr() 已经废弃')
|
logger.info('gsCfg.getAbbr() 已经废弃')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,34 +1,36 @@
|
||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import inquirer from 'inquirer'
|
import inquirer from 'inquirer'
|
||||||
import chalk from 'chalk'
|
import chalk from 'chalk'
|
||||||
import { BOT_NAME, CONFIG_DEFAULT_PATH, CONFIG_INIT_PATH } from './system.js'
|
import {
|
||||||
import cfg from './config.js'
|
BOT_NAME,
|
||||||
import { sleep } from "./utils.js"
|
CONFIG_DEFAULT_PATH,
|
||||||
|
CONFIG_INIT_PATH,
|
||||||
|
ConfigController as cfg
|
||||||
|
} from 'yunzai/config'
|
||||||
|
import { sleep } from 'yunzai/utils'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建qq配置文件 `config/bot/qq.yaml`
|
* 创建qq配置文件 `config/bot/qq.yaml`
|
||||||
* Git Bash 运行npm命令会无法选择列表
|
* Git Bash 运行npm命令会无法选择列表
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export async function createQQ() {
|
export async function createQQ() {
|
||||||
/** 跳过登录ICQQ */
|
/** 跳过登录ICQQ */
|
||||||
if (cfg.bot.skip_login) return
|
if (cfg.bot.skip_login) return
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
if (cfg.qq && !process.argv.includes('login')) {
|
if (cfg.qq && !process.argv.includes('login')) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
console.log(`欢迎使用${chalk.green(`${BOT_NAME} v` + cfg.package.version)}\n请按提示输入完成QQ配置`)
|
logger.info(
|
||||||
|
`欢迎使用${chalk.green(`${BOT_NAME} v` + cfg.package.version)}\n请按提示输入完成QQ配置`
|
||||||
|
)
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
const propmtList = [
|
const propmtList = [
|
||||||
{
|
{
|
||||||
|
@ -51,22 +53,28 @@ export async function createQQ() {
|
||||||
name: 'platform',
|
name: 'platform',
|
||||||
default: '6',
|
default: '6',
|
||||||
choices: ['Tim', 'iPad', '安卓手机', '安卓手表', 'MacOS', 'aPad'],
|
choices: ['Tim', 'iPad', '安卓手机', '安卓手表', 'MacOS', 'aPad'],
|
||||||
filter: (val) => {
|
filter: val => {
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case 'Tim': return 6
|
case 'Tim':
|
||||||
case 'iPad': return 5
|
return 6
|
||||||
case 'MacOS': return 4
|
case 'iPad':
|
||||||
case '安卓手机': return 1
|
return 5
|
||||||
case '安卓手表': return 3
|
case 'MacOS':
|
||||||
case 'aPad': return 2
|
return 4
|
||||||
default: return 6
|
case '安卓手机':
|
||||||
|
return 1
|
||||||
|
case '安卓手表':
|
||||||
|
return 3
|
||||||
|
case 'aPad':
|
||||||
|
return 2
|
||||||
|
default:
|
||||||
|
return 6
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
if (!process.argv.includes('login')) {
|
if (!process.argv.includes('login')) {
|
||||||
propmtList.push({
|
propmtList.push({
|
||||||
|
@ -75,59 +83,49 @@ export async function createQQ() {
|
||||||
name: 'masterQQ'
|
name: 'masterQQ'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
propmtList.push({
|
propmtList.push({
|
||||||
type: 'input',
|
type: 'input',
|
||||||
message: '请输入签名API地址(可留空):',
|
message: '请输入签名API地址(可留空):',
|
||||||
name: 'signAPI'
|
name: 'signAPI'
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
const ret = await inquirer.prompt(propmtList)
|
const ret = await inquirer.prompt(propmtList)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
const file = `./${CONFIG_INIT_PATH}`
|
const file = `./${CONFIG_INIT_PATH}`
|
||||||
|
|
||||||
const fileDef = `./${CONFIG_DEFAULT_PATH}`
|
const fileDef = `./${CONFIG_DEFAULT_PATH}`
|
||||||
|
|
||||||
let qq = fs.readFileSync(`${fileDef}qq.yaml`, 'utf8')
|
let qq = fs.readFileSync(`${fileDef}qq.yaml`, 'utf8')
|
||||||
|
|
||||||
qq = qq.replace(/qq:/g, 'qq: ' + ret.QQ)
|
qq = qq.replace(/qq:/g, 'qq: ' + ret.QQ)
|
||||||
qq = qq.replace(/pwd:/g, `pwd: '${ret.pwd}'`)
|
qq = qq.replace(/pwd:/g, `pwd: '${ret.pwd}'`)
|
||||||
qq = qq.replace(/platform: [1-6]/g, 'platform: ' + Number(ret.platform))
|
qq = qq.replace(/platform: [1-6]/g, 'platform: ' + Number(ret.platform))
|
||||||
fs.writeFileSync(`${file}qq.yaml`, qq, 'utf8')
|
fs.writeFileSync(`${file}qq.yaml`, qq, 'utf8')
|
||||||
|
|
||||||
let bot = fs.readFileSync(`${fileDef}bot.yaml`, 'utf8')
|
let bot = fs.readFileSync(`${fileDef}bot.yaml`, 'utf8')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
if (ret.masterQQ) {
|
if (ret.masterQQ) {
|
||||||
let other = fs.readFileSync(`${fileDef}other.yaml`, 'utf8')
|
let other = fs.readFileSync(`${fileDef}other.yaml`, 'utf8')
|
||||||
other = other.replace(/masterQQ:/g, `masterQQ:\n - ${ret.masterQQ}`)
|
other = other.replace(/masterQQ:/g, `masterQQ:\n - ${ret.masterQQ}`)
|
||||||
fs.writeFileSync(`${file}other.yaml`, other, 'utf8')
|
fs.writeFileSync(`${file}other.yaml`, other, 'utf8')
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
if (ret.signAPI) {
|
if (ret.signAPI) {
|
||||||
bot = bot.replace(/sign_api_addr:/g, `sign_api_addr: ${ret.signAPI}`)
|
bot = bot.replace(/sign_api_addr:/g, `sign_api_addr: ${ret.signAPI}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.writeFileSync(`${file}bot.yaml`, bot, 'utf8')
|
fs.writeFileSync(`${file}bot.yaml`, bot, 'utf8')
|
||||||
|
logger.info(
|
||||||
console.log(`\nQQ配置完成,正在登录\n后续修改账号可以运行命令: ${chalk.green('npm run login')}\n`)
|
`\nQQ配置完成,正在登录\n后续修改账号可以运行命令: ${chalk.green('npm run login')}\n`
|
||||||
|
)
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
await sleep(2000)
|
await sleep(2000)
|
||||||
}
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
import { createServer } from 'yunzai/image'
|
||||||
|
await createServer()
|
|
@ -65,11 +65,11 @@ export class Puppeteer {
|
||||||
try {
|
try {
|
||||||
this.browser = await puppeteer.launch(this.#launch)
|
this.browser = await puppeteer.launch(this.#launch)
|
||||||
this.#isBrowser = true
|
this.#isBrowser = true
|
||||||
console.info('[puppeteer] open success')
|
logger.info('[puppeteer] open success')
|
||||||
return true
|
return true
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
this.#isBrowser = false
|
this.#isBrowser = false
|
||||||
console.error('[puppeteer] err', err)
|
logger.error('[puppeteer] err', err)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,12 +96,12 @@ export class Puppeteer {
|
||||||
* 重置次数
|
* 重置次数
|
||||||
*/
|
*/
|
||||||
this.#pic = 0
|
this.#pic = 0
|
||||||
console.info('[puppeteer] close')
|
logger.info('[puppeteer] close')
|
||||||
this.#isBrowser = false
|
this.#isBrowser = false
|
||||||
this.browser?.close().catch(err => {
|
this.browser?.close().catch(err => {
|
||||||
console.error('[puppeteer] close', err)
|
logger.error('[puppeteer] close', err)
|
||||||
})
|
})
|
||||||
console.info('[puppeteer] reopen')
|
logger.info('[puppeteer] reopen')
|
||||||
if (!(await this.start())) return false
|
if (!(await this.start())) return false
|
||||||
this.#pic++
|
this.#pic++
|
||||||
}
|
}
|
||||||
|
@ -121,7 +121,7 @@ export class Puppeteer {
|
||||||
if (!(await this.isStart())) return false
|
if (!(await this.isStart())) return false
|
||||||
try {
|
try {
|
||||||
const page = await this.browser?.newPage().catch(err => {
|
const page = await this.browser?.newPage().catch(err => {
|
||||||
console.error(err)
|
logger.error(err)
|
||||||
})
|
})
|
||||||
if (!page) return false
|
if (!page) return false
|
||||||
await page.goto(`file://${htmlPath}`, {
|
await page.goto(`file://${htmlPath}`, {
|
||||||
|
@ -129,7 +129,7 @@ export class Puppeteer {
|
||||||
})
|
})
|
||||||
const body = await page.$(Options?.tab ?? 'body')
|
const body = await page.$(Options?.tab ?? 'body')
|
||||||
if (!body) return false
|
if (!body) return false
|
||||||
console.info('[puppeteer] success')
|
logger.info('[puppeteer] success')
|
||||||
const buff: string | false | Buffer = await body
|
const buff: string | false | Buffer = await body
|
||||||
.screenshot(
|
.screenshot(
|
||||||
Options?.SOptions ?? {
|
Options?.SOptions ?? {
|
||||||
|
@ -137,19 +137,19 @@ export class Puppeteer {
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
console.error('[puppeteer]', 'screenshot', err)
|
logger.error('[puppeteer]', 'screenshot', err)
|
||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
await page.close().catch(err => {
|
await page.close().catch(err => {
|
||||||
console.error('[puppeteer]', 'page close', err)
|
logger.error('[puppeteer]', 'page close', err)
|
||||||
})
|
})
|
||||||
if (!buff) {
|
if (!buff) {
|
||||||
console.error('[puppeteer]', htmlPath)
|
logger.error('[puppeteer]', htmlPath)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return buff
|
return buff
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('[puppeteer] newPage', err)
|
logger.error('[puppeteer] newPage', err)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,3 +87,8 @@ export default class Renderer {
|
||||||
this.watcher[tplFile] = watcher
|
this.watcher[tplFile] = watcher
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* global.Renderer
|
||||||
|
*/
|
||||||
|
global.Renderer = Renderer
|
||||||
|
|
|
@ -34,12 +34,15 @@
|
||||||
//
|
//
|
||||||
"paths": {
|
"paths": {
|
||||||
// 内部核心模块导出
|
// 内部核心模块导出
|
||||||
"yunzai/image/types": ["./image/types.js"],
|
|
||||||
"yunzai/config": ["./src/config/index.js"],
|
"yunzai/config": ["./src/config/index.js"],
|
||||||
"yunzai/db": ["./src/db/index.js"],
|
"yunzai/db": ["./src/db/index.js"],
|
||||||
"yunzai/mys": ["./src/mys/index.js"],
|
"yunzai/mys": ["./src/mys/index.js"],
|
||||||
"yunzai/utils": ["./src/utils/index.js"],
|
"yunzai/utils": ["./src/utils/index.js"],
|
||||||
|
"yunzai/init": ["./src/init/index.js"],
|
||||||
"yunzai/core": ["./src/core/index.js"],
|
"yunzai/core": ["./src/core/index.js"],
|
||||||
|
// 图片开发
|
||||||
|
"yunzai/image/types": ["./src/image/types.js"],
|
||||||
|
"yunzai/image": ["./src/image/index.js"],
|
||||||
// 外部模块 待移除
|
// 外部模块 待移除
|
||||||
"#miao": ["./plugins/miao-plugin/components/index.js"],
|
"#miao": ["./plugins/miao-plugin/components/index.js"],
|
||||||
"#miao.models": ["./plugins/miao-plugin/models/index.js"]
|
"#miao.models": ["./plugins/miao-plugin/models/index.js"]
|
||||||
|
@ -50,5 +53,5 @@
|
||||||
"transpileOnly": true,
|
"transpileOnly": true,
|
||||||
"experimentalSpecifierResolution": "node"
|
"experimentalSpecifierResolution": "node"
|
||||||
},
|
},
|
||||||
"include": ["src", "image", "lib", "renderers", "plugins"]
|
"include": ["src", "plugins", "lib", "renderers"]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue