diff --git a/model/listener/events/input.js b/apps/events/input.js similarity index 80% rename from model/listener/events/input.js rename to apps/events/input.js index 9aada67..0f71f13 100644 --- a/model/listener/events/input.js +++ b/apps/events/input.js @@ -1,5 +1,5 @@ -import { common } from '../../index.js' -import { Config } from '../../../components/index.js' +import { common } from '../../model/index.js' +import { Config } from '../../components/index.js' Bot.on('internal.input', async (e) => { if (!Config.Notice.input) return false diff --git a/model/listener/events/message.js b/apps/events/message.js similarity index 98% rename from model/listener/events/message.js rename to apps/events/message.js index 905975b..3721e94 100644 --- a/model/listener/events/message.js +++ b/apps/events/message.js @@ -1,5 +1,5 @@ -import { common } from '../../../model/index.js' -import { Config } from '../../../components/index.js' +import { common } from '../../model/index.js' +import { Config } from '../../components/index.js' Bot.on('message', async (e) => { // 判断是否为机器人消息 diff --git a/model/listener/events/notice_friend.js b/apps/events/notice_friend.js similarity index 96% rename from model/listener/events/notice_friend.js rename to apps/events/notice_friend.js index b053a04..99a1450 100644 --- a/model/listener/events/notice_friend.js +++ b/apps/events/notice_friend.js @@ -1,5 +1,5 @@ -import { common } from '../../../model/index.js' -import { Config } from '../../../components/index.js' +import { common } from '../../model/index.js' +import { Config } from '../../components/index.js' Bot.on('notice.friend', async (e) => { let msg diff --git a/model/listener/events/notice_group.js b/apps/events/notice_group.js similarity index 98% rename from model/listener/events/notice_group.js rename to apps/events/notice_group.js index 20391f8..e78afa0 100644 --- a/model/listener/events/notice_group.js +++ b/apps/events/notice_group.js @@ -1,5 +1,5 @@ -import { common } from '../../../model/index.js' -import { Config } from '../../../components/index.js' +import { common } from '../../model/index.js' +import { Config } from '../../components/index.js' import moment from 'moment' Bot.on('notice.group', async (e) => { diff --git a/model/listener/events/request.js b/apps/events/request.js similarity index 95% rename from model/listener/events/request.js rename to apps/events/request.js index 60c5264..1ae075e 100644 --- a/model/listener/events/request.js +++ b/apps/events/request.js @@ -1,6 +1,6 @@ -import cfg from '../../../../../lib/config/config.js' -import { common } from '../../../model/index.js' -import { Config } from '../../../components/index.js' +import cfg from '../../../../lib/config/config.js' +import { common } from '../../model/index.js' +import { Config } from '../../components/index.js' const ROLE_MAP = { admin: '群管理', owner: '群主', diff --git a/apps/groupAdmin.js b/apps/groupAdmin/groupAdmin.js similarity index 98% rename from apps/groupAdmin.js rename to apps/groupAdmin/groupAdmin.js index 328bc6e..a1f7848 100644 --- a/apps/groupAdmin.js +++ b/apps/groupAdmin/groupAdmin.js @@ -1,11 +1,10 @@ import _ from 'lodash' import moment from 'moment' -import plugin from '../../../lib/plugins/plugin.js' -import { Config } from '../components/index.js' -import { common, GroupAdmin as Ga, puppeteer, QQApi, GroupBannedWords } from '../model/index.js' -import cronValidate from '../tools/cronValidate.js' -import { groupTitleMsg } from '../constants/msg.js' -import { Time_unit } from '../constants/other.js' +import { Config } from '../../components/index.js' +import { common, GroupAdmin as Ga, puppeteer, QQApi, GroupBannedWords } from '../../model/index.js' +import cronValidate from '../../tools/cronValidate.js' +import { groupTitleMsg } from '../../constants/msg.js' +import { Time_unit } from '../../constants/other.js' // API请求错误文案 const API_ERROR = '❎ 出错辣,请稍后重试' // 正则 diff --git a/apps/groupBannedWords.js b/apps/groupAdmin/groupBannedWords.js similarity index 99% rename from apps/groupBannedWords.js rename to apps/groupAdmin/groupBannedWords.js index 368acfc..01ee1fa 100644 --- a/apps/groupBannedWords.js +++ b/apps/groupAdmin/groupBannedWords.js @@ -1,4 +1,4 @@ -import { common, GroupBannedWords } from '../model/index.js' +import { common, GroupBannedWords } from '../../model/index.js' import _ from 'lodash' export class NewGroupBannedWords extends plugin { diff --git a/apps/groupVerify.js b/apps/groupAdmin/groupVerify.js similarity index 98% rename from apps/groupVerify.js rename to apps/groupAdmin/groupVerify.js index b631b3a..f8eb050 100644 --- a/apps/groupVerify.js +++ b/apps/groupAdmin/groupVerify.js @@ -1,6 +1,5 @@ -import plugin from '../../../lib/plugins/plugin.js' -import { Config } from '../components/index.js' -import { common, GroupAdmin as Ga } from '../model/index.js' +import { Config } from '../../components/index.js' +import { common, GroupAdmin as Ga } from '../../model/index.js' import _ from 'lodash' // 全局 let temp = {} diff --git a/apps/privateGroupAdmin.js b/apps/groupAdmin/privateGroupAdmin.js similarity index 91% rename from apps/privateGroupAdmin.js rename to apps/groupAdmin/privateGroupAdmin.js index 01fe3b9..dbca560 100644 --- a/apps/privateGroupAdmin.js +++ b/apps/groupAdmin/privateGroupAdmin.js @@ -1,6 +1,5 @@ -import plugin from '../../../lib/plugins/plugin.js' -import { GroupAdmin as Ga, common } from '../model/index.js' -import { Time_unit } from '../constants/other.js' +import { GroupAdmin as Ga, common } from '../../model/index.js' +import { Time_unit } from '../../constants/other.js' // 正则 const Numreg = '[一壹二两三四五六七八九十百千万亿\\d]+' const TimeUnitReg = Object.keys(Time_unit).join('|') diff --git a/components/Data.js b/components/Data.js index 3889e4d..be0c44f 100644 --- a/components/Data.js +++ b/components/Data.js @@ -1,5 +1,6 @@ import _ from 'lodash' import fs from 'fs' +import path from 'path' const _path = process.cwd() const plugin = 'yenai-plugin' @@ -220,6 +221,25 @@ let Data = { } } return false + }, + /** 读取文件夹和子文件夹指定后缀文件名 */ + readDirRecursive (directory, extension, excludeDir) { + let files = fs.readdirSync(directory) + + let jsFiles = files.filter(file => path.extname(file) === `.${extension}`) + + files.filter(file => fs.statSync(path.join(directory, file)).isDirectory()) + .forEach(subdirectory => { + if (subdirectory === excludeDir) { + return + } + + const subdirectoryPath = path.join(directory, subdirectory) + jsFiles.push(...Data.readDirRecursive(subdirectoryPath, extension, excludeDir) + .map(fileName => path.join(subdirectory, fileName))) + }) + + return jsFiles } } diff --git a/index.js b/index.js index 8e73162..030e25c 100644 --- a/index.js +++ b/index.js @@ -1,18 +1,12 @@ -import fs from 'node:fs' import Ver from './components/Version.js' import chalk from 'chalk' -const files = fs.readdirSync('./plugins/yenai-plugin/apps').filter(file => file.endsWith('.js')) - -let ret = [] +import Data from './components/Data.js' +import fs from 'fs' logger.info(chalk.rgb(253, 235, 255)('----ヾ( ̄▽ ̄)Bye~Bye~----')) -logger.info(chalk.rgb(255, 207, 247)(`椰奶插件${Ver.ver}初始化~`)) +logger.info(chalk.rgb(134, 142, 204)(`椰奶插件${Ver.ver}初始化~`)) logger.info(chalk.rgb(253, 235, 255)('-------------------------')) -files.forEach((file) => { - ret.push(import(`./apps/${file}`)) -}) - if (!global.segment) { try { global.segment = (await import('oicq')).segment @@ -21,21 +15,39 @@ if (!global.segment) { } } +// 加载监听事件 +const eventsPath = './plugins/yenai-plugin/apps/events' +const events = fs.readdirSync(eventsPath) + .filter(file => file.endsWith('.js')) +for (const File of events) { + try { + logger.debug(`[yenai-plugin] 加载监听事件:${File}`) + await import(`./apps/events/${File}`) + } catch (e) { + logger.error(`[yenai-plugin] 监听事件错误:${File}`) + logger.error(e) + } +} + +const appsPath = './plugins/yenai-plugin/apps' +const jsFiles = Data.readDirRecursive(appsPath, 'js', 'events') + +let ret = jsFiles.map(file => { + console.log(`./apps/${file}`) + return import(`./apps/${file}`) +}) + ret = await Promise.allSettled(ret) let apps = {} -for (let i in files) { - let name = files[i].replace('.js', '') +for (let i in jsFiles) { + let name = jsFiles[i].replace('.js', '') if (ret[i].status != 'fulfilled') { logger.error(`载入插件错误:${logger.red(name)}`) logger.error(ret[i].reason) continue } - // let value = ret[i].value - // for (let f in value) { - // apps[f] = value[f] - // } apps[name] = ret[i].value[Object.keys(ret[i].value)[0]] } diff --git a/model/index.js b/model/index.js index 445dfab..5efa566 100644 --- a/model/index.js +++ b/model/index.js @@ -11,10 +11,8 @@ import setu from './setu.js' import Ascii2D from './PicSearch/ascii2d.js' import SauceNAO from './PicSearch/saucenao.js' import WhatAnime from './PicSearch/whatanime.js' -import listener from './listener/loader.js' import GroupBannedWords from './GroupBannedWords.js' -// 加载监听事件 -listener.load() + // 导出模块 export const PicSearch = { Ascii2D, diff --git a/model/listener/loader.js b/model/listener/loader.js deleted file mode 100644 index d0589f0..0000000 --- a/model/listener/loader.js +++ /dev/null @@ -1,17 +0,0 @@ -import fs from 'fs' -export default new class { - async load () { - // 加载监听事件 - let eventsPath = './plugins/yenai-plugin/model/listener/events' - - const events = fs.readdirSync(eventsPath).filter(file => file.endsWith('.js')) - for (let File of events) { - try { - await import(`./events/${File}`) - } catch (e) { - logger.mark(`监听事件错误:${File}`) - logger.error(e) - } - } - } -}()