You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Discord Bot命令文件中的extractDeets函数导出至index.js且不影响命令

解决Discord机器人复用extractDeets函数的方案

下面给你两种可行的方案,都不会破坏原有命令的功能:

方案一:在原命令文件中同时导出命令和函数

如果不想移动函数,直接在scrumPrompt.js里调整导出结构就行:

  1. 修改./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
};
  1. 调整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);
  }
}
  1. 在index.js里需要用extractDeets的地方,直接导入:
// index.js 中导入函数
const { extractDeets } = require('./commands/scrumPrompt.js');

// 正常使用函数
const parsedData = extractDeets('需要解析的文本');

方案二:把extractDeets抽离到单独工具文件(更推荐)

这种方式更符合模块化规范,避免命令文件职责混乱,也不用改命令导入逻辑:

  1. 创建./utils/extractDeets.js文件,把函数移进去:
// ./utils/extractDeets.js
function extractDeets(input) {
  // 你的解析逻辑代码
}

module.exports = extractDeets;
  1. 修改scrumPrompt.js,从工具文件导入函数:
// ./commands/scrumPrompt.js
const extractDeets = require('../utils/extractDeets.js');

module.exports = {
  name: 'scrum',
  execute(message, args) {
    const deets = extractDeets(args.join(' '));
    // ...原有命令逻辑保持不变
  }
};
  1. 在index.js里直接导入使用:
// index.js
const extractDeets = require('./utils/extractDeets.js');

// 调用函数
const result = extractDeets('测试输入文本');

这种方案不需要改动index.js里的命令导入循环,完全兼容原有功能,以后其他文件要复用这个函数也更方便。

内容的提问来源于stack exchange,提问作者Lazlo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:20:29