如何将Discord Bot命令文件中的extractDeets函数导出至index.js且不影响命令
解决Discord机器人复用
extractDeets函数的方案 下面给你两种可行的方案,都不会破坏原有命令的功能:
方案一:在原命令文件中同时导出命令和函数
如果不想移动函数,直接在scrumPrompt.js里调整导出结构就行:
- 修改
./commands/scrumPrompt.js的导出逻辑:
// ./commands/scrumPrompt.js function extractDeets(input) { // 你的解析逻辑代码 } // 把原来的命令对象单独存起来 const scrumCommand = { name: 'scrum', execute(message, args) { // 命令内部照常调用extractDeets,完全不受影响 const deets = extractDeets(args.join(' ')); // ...其他原有命令逻辑 } }; // 同时导出命令对象和extractDeets函数 module.exports = { command: scrumCommand, extractDeets };
- 调整
index.js里的命令导入循环,兼容新的导出格式:
// index.js 中的命令导入部分 const fs = require('fs'); const path = require('path'); const commandsPath = path.join(__dirname, 'commands'); const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js')); for (const file of commandFiles) { const filePath = path.join(commandsPath, file); const imported = require(filePath); // 优先处理带command属性的导出,兼容其他未修改的命令文件 if (imported.command) { bot.commands.set(imported.command.name, imported.command); } else if (imported.name && imported.execute) { // 保留原有逻辑,处理只导出命令对象的文件 bot.commands.set(imported.name, imported); } }
- 在
index.js里需要用extractDeets的地方,直接导入:
// index.js 中导入函数 const { extractDeets } = require('./commands/scrumPrompt.js'); // 正常使用函数 const parsedData = extractDeets('需要解析的文本');
方案二:把extractDeets抽离到单独工具文件(更推荐)
这种方式更符合模块化规范,避免命令文件职责混乱,也不用改命令导入逻辑:
- 创建
./utils/extractDeets.js文件,把函数移进去:
// ./utils/extractDeets.js function extractDeets(input) { // 你的解析逻辑代码 } module.exports = extractDeets;
- 修改
scrumPrompt.js,从工具文件导入函数:
// ./commands/scrumPrompt.js const extractDeets = require('../utils/extractDeets.js'); module.exports = { name: 'scrum', execute(message, args) { const deets = extractDeets(args.join(' ')); // ...原有命令逻辑保持不变 } };
- 在
index.js里直接导入使用:
// index.js const extractDeets = require('./utils/extractDeets.js'); // 调用函数 const result = extractDeets('测试输入文本');
这种方案不需要改动index.js里的命令导入循环,完全兼容原有功能,以后其他文件要复用这个函数也更方便。
内容的提问来源于stack exchange,提问作者Lazlo
相关产品推荐
相关产品推荐

