feat: 优化顺序
This commit is contained in:
		
							parent
							
								
									668b12e23f
								
							
						
					
					
						commit
						d4bf0cb718
					
				|  | @ -1,4 +1,4 @@ | |||
| import { execAsync, readJSON } from '../utils/index.js' | ||||
| import { execAsync, readJSON } from "./utils.js" | ||||
| 
 | ||||
| /** | ||||
|  * 校验运行 | ||||
|  |  | |||
|  | @ -1,170 +0,0 @@ | |||
| import fs, { promises } from "node:fs" | ||||
| import yaml from "yaml" | ||||
| import { BOT_NAME, CONFIG_INIT_PATH } from "./system.js" | ||||
| import { createQQ } from "./qq.js" | ||||
| import { setLogger } from "./log.js" | ||||
| import { redisInit } from "./redis.js" | ||||
| import { checkRun } from "./check.js" | ||||
| import { join } from "node:path" | ||||
| 
 | ||||
| /** | ||||
|  *  | ||||
|  */ | ||||
| async function UpdateTitle() { | ||||
|   /** | ||||
|    * 添加一些多余的标题内容 | ||||
|    */ | ||||
|   let title = BOT_NAME | ||||
| 
 | ||||
|   //
 | ||||
|   const qq = await promises.readFile(`./${CONFIG_INIT_PATH}qq.yaml`, 'utf-8').then(yaml.parse).catch(() => null) | ||||
| 
 | ||||
|   /** | ||||
|    *  | ||||
|    */ | ||||
|   if (qq) { | ||||
|     title += `@${qq.qq || ""}` | ||||
|     switch (qq.platform) { | ||||
|       case 1: { | ||||
|         title += " 安卓手机" | ||||
|         break | ||||
|       } | ||||
|       case 2: { | ||||
|         title += " aPad" | ||||
|         break | ||||
|       } | ||||
|       case 3: { | ||||
|         title += " 安卓手表" | ||||
|         break | ||||
|       } | ||||
|       case 4: { | ||||
|         title += " MacOS" | ||||
|         break | ||||
|       } | ||||
|       case 5: { | ||||
|         title += " iPad" | ||||
|         break | ||||
|       } | ||||
|       case 6: { | ||||
|         title += " Tim" | ||||
|         break | ||||
|       } | ||||
|       default: { | ||||
|         break | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * 设置标题 | ||||
|    */ | ||||
|   process.title = title | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * 初始化事件 | ||||
|  */ | ||||
| export async function checkInit() { | ||||
| 
 | ||||
|   /** | ||||
|    * 检查node_modules | ||||
|    */ | ||||
|   if (!fs.existsSync(join(process.cwd(), "./node_modules"))) { | ||||
|     console.log("未安装依赖。。。。") | ||||
|     console.log("请先运行命令:pnpm install -P 安装依赖") | ||||
|     process.exit() | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * 检查node_modules/icqq | ||||
|    */ | ||||
|   if (!fs.existsSync(join(process.cwd(), "./node_modules/icqq"))) { | ||||
|     console.log("未安装icqq。。。。") | ||||
|     console.log("请先运行命令:pnpm install -P 安装依赖") | ||||
|     process.exit() | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * 检查qq.yaml | ||||
|    */ | ||||
|   await createQQ() | ||||
| 
 | ||||
|   /** | ||||
|    * 日志设置 | ||||
|    */ | ||||
|   setLogger() | ||||
| 
 | ||||
|   /** | ||||
|    *  | ||||
|    */ | ||||
|   logger.mark(`${BOT_NAME} 启动中...`) | ||||
| 
 | ||||
|   /** | ||||
|    *  初始化客户端 | ||||
|    */ | ||||
|   await redisInit() | ||||
| 
 | ||||
|   /** | ||||
|    * 检查程序 | ||||
|    */ | ||||
|   await checkRun() | ||||
| 
 | ||||
|   /** | ||||
|    * 更新标题 | ||||
|    */ | ||||
|   await UpdateTitle() | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * 设置标题 | ||||
|  */ | ||||
| process.title = BOT_NAME | ||||
| 
 | ||||
| /** | ||||
|  * 设置时区 | ||||
|  */ | ||||
| process.env.TZ = "Asia/Shanghai" | ||||
| 
 | ||||
| /** | ||||
|  *  | ||||
|  */ | ||||
| process.on("SIGHUP", () => process.exit()) | ||||
| 
 | ||||
| /** | ||||
|  * 捕获未处理的错误 | ||||
|  */ | ||||
| process.on("uncaughtException", error => { | ||||
|   if (typeof logger == "undefined") console.log(error) | ||||
|   else logger.error(error) | ||||
| }) | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * 捕获未处理的Promise错误 | ||||
|  */ | ||||
| process.on("unhandledRejection", (error) => { | ||||
|   if (typeof logger == "undefined") console.log(error) | ||||
|   else logger.error(error) | ||||
| }) | ||||
| 
 | ||||
| /** | ||||
|  * 退出事件 | ||||
|  */ | ||||
| process.on("exit", async () => { | ||||
|   if (typeof redis != "undefined") { | ||||
|     await redis.save() | ||||
|   } | ||||
|   if (typeof logger == "undefined") { | ||||
|     console.log(`${BOT_NAME} 已停止运行`) | ||||
|   } | ||||
|   else { | ||||
|     logger.mark(logger.magenta(`${BOT_NAME} 已停止运行`)) | ||||
|   } | ||||
| }) | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * 初始化 | ||||
|  */ | ||||
| await checkInit() | ||||
|  | @ -3,14 +3,14 @@ import inquirer from 'inquirer' | |||
| import chalk from 'chalk' | ||||
| import { BOT_NAME, CONFIG_DEFAULT_PATH, CONFIG_INIT_PATH } from './system.js' | ||||
| import cfg from './config.js' | ||||
| import { sleep } from '../utils/common.js' | ||||
| import { sleep } from "./utils.js" | ||||
| 
 | ||||
| /** | ||||
|  * 创建qq配置文件 `config/bot/qq.yaml` | ||||
|  * Git Bash 运行npm命令会无法选择列表 | ||||
|  * @returns  | ||||
|  */ | ||||
| export  async function createQQ() { | ||||
| export async function createQQ() { | ||||
|   /** 跳过登录ICQQ */ | ||||
|   if (cfg.bot.skip_login) return | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| import cfg from "./config.js" | ||||
| import { execAsync, sleep } from "../utils/common.js" | ||||
| import { execAsync, sleep } from "./utils.js" | ||||
| import { createClient } from "redis" | ||||
| 
 | ||||
| /** | ||||
|  |  | |||
|  | @ -0,0 +1,42 @@ | |||
| import fs from 'node:fs' | ||||
| import { exec } from 'child_process' | ||||
| import { join } from 'path' | ||||
| 
 | ||||
| /** | ||||
|  * 休眠函数 | ||||
|  * @param ms 毫秒 | ||||
|  */ | ||||
| export function sleep(ms: number) { | ||||
|   return new Promise(resolve => setTimeout(resolve, ms)) | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * | ||||
|  * @param cmd | ||||
|  * @returns | ||||
|  */ | ||||
| export function execAsync(cmd: string): Promise<{ | ||||
|   stdout: string | ||||
|   stderr: string | ||||
| }> { | ||||
|   return new Promise((resolve, reject) => { | ||||
|     exec(cmd, (error, stdout, stderr) => { | ||||
|       if (error) reject(error) | ||||
|       resolve({ stdout, stderr }) | ||||
|     }) | ||||
|   }) | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * | ||||
|  * @param dir | ||||
|  * @returns | ||||
|  */ | ||||
| export function readJSON(dir: string) { | ||||
|   try { | ||||
|     const cfg = fs.readFileSync(join(process.cwd(), dir), 'utf-8') | ||||
|     return JSON.parse(cfg) | ||||
|   } catch { | ||||
|     return false | ||||
|   } | ||||
| } | ||||
|  | @ -1,9 +1,3 @@ | |||
| /** | ||||
|  * ********** | ||||
|  * 配置初始化 | ||||
|  * ********** | ||||
|  */ | ||||
| import '../config/main.js' | ||||
| /** | ||||
|  * ********** | ||||
|  * 配置读取工具 | ||||
|  |  | |||
|  | @ -0,0 +1,171 @@ | |||
| import fs, { promises } from 'node:fs' | ||||
| import yaml from 'yaml' | ||||
| import { join } from 'node:path' | ||||
| /** | ||||
|  * | ||||
|  */ | ||||
| import { BOT_NAME, CONFIG_INIT_PATH } from './config/system.js' | ||||
| import { createQQ } from './config/qq.js' | ||||
| import { setLogger } from './config/log.js' | ||||
| import { redisInit } from './config/redis.js' | ||||
| import { checkRun } from './config/check.js' | ||||
| 
 | ||||
| /** | ||||
|  * | ||||
|  */ | ||||
| async function UpdateTitle() { | ||||
|   /** | ||||
|    * 添加一些多余的标题内容 | ||||
|    */ | ||||
|   let title = BOT_NAME | ||||
| 
 | ||||
|   //
 | ||||
|   const qq = await promises | ||||
|     .readFile(`./${CONFIG_INIT_PATH}qq.yaml`, 'utf-8') | ||||
|     .then(yaml.parse) | ||||
|     .catch(() => null) | ||||
| 
 | ||||
|   /** | ||||
|    * | ||||
|    */ | ||||
|   if (qq) { | ||||
|     title += `@${qq.qq || ''}` | ||||
|     switch (qq.platform) { | ||||
|       case 1: { | ||||
|         title += ' 安卓手机' | ||||
|         break | ||||
|       } | ||||
|       case 2: { | ||||
|         title += ' aPad' | ||||
|         break | ||||
|       } | ||||
|       case 3: { | ||||
|         title += ' 安卓手表' | ||||
|         break | ||||
|       } | ||||
|       case 4: { | ||||
|         title += ' MacOS' | ||||
|         break | ||||
|       } | ||||
|       case 5: { | ||||
|         title += ' iPad' | ||||
|         break | ||||
|       } | ||||
|       case 6: { | ||||
|         title += ' Tim' | ||||
|         break | ||||
|       } | ||||
|       default: { | ||||
|         break | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * 设置标题 | ||||
|    */ | ||||
|   process.title = title | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * 初始化事件 | ||||
|  */ | ||||
| export async function checkInit() { | ||||
|   /** | ||||
|    * 检查node_modules | ||||
|    */ | ||||
|   if (!fs.existsSync(join(process.cwd(), './node_modules'))) { | ||||
|     console.log('未安装依赖。。。。') | ||||
|     console.log('请先运行命令:pnpm install -P 安装依赖') | ||||
|     process.exit() | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * 检查node_modules/icqq | ||||
|    */ | ||||
|   if (!fs.existsSync(join(process.cwd(), './node_modules/icqq'))) { | ||||
|     console.log('未安装icqq。。。。') | ||||
|     console.log('请先运行命令:pnpm install -P 安装依赖') | ||||
|     process.exit() | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * 检查qq.yaml | ||||
|    */ | ||||
|   await createQQ() | ||||
| 
 | ||||
|   /** | ||||
|    * 日志设置 | ||||
|    */ | ||||
|   setLogger() | ||||
| 
 | ||||
|   /** | ||||
|    * | ||||
|    */ | ||||
|   logger.mark(`${BOT_NAME} 启动中...`) | ||||
| 
 | ||||
|   /** | ||||
|    *  初始化客户端 | ||||
|    */ | ||||
|   await redisInit() | ||||
| 
 | ||||
|   /** | ||||
|    * 检查程序 | ||||
|    */ | ||||
|   await checkRun() | ||||
| 
 | ||||
|   /** | ||||
|    * 更新标题 | ||||
|    */ | ||||
|   await UpdateTitle() | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * 设置标题 | ||||
|  */ | ||||
| process.title = BOT_NAME | ||||
| 
 | ||||
| /** | ||||
|  * 设置时区 | ||||
|  */ | ||||
| process.env.TZ = 'Asia/Shanghai' | ||||
| 
 | ||||
| /** | ||||
|  * | ||||
|  */ | ||||
| process.on('SIGHUP', () => process.exit()) | ||||
| 
 | ||||
| /** | ||||
|  * 捕获未处理的错误 | ||||
|  */ | ||||
| process.on('uncaughtException', error => { | ||||
|   if (typeof logger == 'undefined') console.log(error) | ||||
|   else logger.error(error) | ||||
| }) | ||||
| 
 | ||||
| /** | ||||
|  * 捕获未处理的Promise错误 | ||||
|  */ | ||||
| process.on('unhandledRejection', error => { | ||||
|   if (typeof logger == 'undefined') console.log(error) | ||||
|   else logger.error(error) | ||||
| }) | ||||
| 
 | ||||
| /** | ||||
|  * 退出事件 | ||||
|  */ | ||||
| process.on('exit', async () => { | ||||
|   if (typeof redis != 'undefined') { | ||||
|     await redis.save() | ||||
|   } | ||||
|   if (typeof logger == 'undefined') { | ||||
|     console.log(`${BOT_NAME} 已停止运行`) | ||||
|   } else { | ||||
|     logger.mark(logger.magenta(`${BOT_NAME} 已停止运行`)) | ||||
|   } | ||||
| }) | ||||
| 
 | ||||
| /** | ||||
|  * 初始化 | ||||
|  */ | ||||
| await checkInit() | ||||
							
								
								
									
										13
									
								
								src/main.ts
								
								
								
								
							
							
						
						
									
										13
									
								
								src/main.ts
								
								
								
								
							|  | @ -1,9 +1,14 @@ | |||
| /** | ||||
|  * | ||||
|  * ********** | ||||
|  * 配置初始化 | ||||
|  * ********** | ||||
|  */ | ||||
| import './init.js' | ||||
| /** | ||||
|  * 引入模块 | ||||
|  */ | ||||
| import { plugin, segment, Client } from './core/index.js' | ||||
| import { Renderer } from './utils/index.js' | ||||
| 
 | ||||
| /** | ||||
|  * global.plugin | ||||
|  */ | ||||
|  | @ -12,12 +17,10 @@ global.plugin = plugin | |||
|  * global.segment | ||||
|  */ | ||||
| global.segment = segment | ||||
| 
 | ||||
| /** | ||||
|  * | ||||
|  * global.Renderer | ||||
|  */ | ||||
| global.Renderer = Renderer | ||||
| 
 | ||||
| /** | ||||
|  * run | ||||
|  */ | ||||
|  |  | |||
|  | @ -54,15 +54,13 @@ class RendererLoader { | |||
|           !renderer.render || | ||||
|           !lodash.isFunction(renderer.render) | ||||
|         ) { | ||||
|           console.warn( | ||||
|             '渲染后端 ' + (renderer.id || subFolder.name) + ' 不可用' | ||||
|           ) | ||||
|           logger.warn('渲染后端 ' + (renderer.id || subFolder.name) + ' 不可用') | ||||
|         } | ||||
|         this.renderers.set(renderer.id, renderer) | ||||
|         console.info(`加载渲染后端 ${renderer.id}`) | ||||
|         logger.info(`加载渲染后端 ${renderer.id}`) | ||||
|       } catch (err) { | ||||
|         console.error(`渲染后端 ${name} 加载失败`) | ||||
|         console.error(err) | ||||
|         logger.error(`渲染后端 ${name} 加载失败`) | ||||
|         logger.error(err) | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue