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

如何修复discord.js handler中命令列表重复输出的问题

问题原因

你代码中的双层读取逻辑存在错误:外层readdirSync("./commands/")会遍历commands目录下的所有条目(包括子目录、js文件),内层又重复读取整个commands目录下的所有js文件,外层遍历多少次,所有命令就会被重复添加到表格多少次,最终就会出现10条命令重复展示10次的问题。


修复方案

根据你的命令存放结构二选一即可:

方案1:命令全部直接存放在commands根目录(无子目录分类)

直接删除外层多余的目录遍历即可,修复后代码如下:

const { readdirSync } = require("fs");
const ascii = require("ascii-table");

let table = new ascii("Commands");
table.setHeading("Command", "Load status");

module.exports = (client) => {
  // 直接读取commands根目录下的js文件
  const commands = readdirSync(`./commands/`).filter(file => file.endsWith(".js"));
  for (let file of commands) {
    let pull = require(`../commands/${file}`);
    if (pull.name) {
      client.commands.set(pull.name, pull);
      table.addRow(file, '✅');
    } else {
      table.addRow(file, `❌  -> missing a help.name, or help.name is not a string.`);
      continue;
    }
    if (pull.aliases && Array.isArray(pull.aliases)) pull.aliases.forEach(alias => client.aliases.set(alias, pull.name));
  }
  // 打印表格
  console.log(table.toString());
}

方案2:命令按子目录分类存放(如commands/管理、commands/娱乐等子目录)

修正内层读取路径为对应子目录即可,修复后代码如下:

const { readdirSync } = require("fs");
const ascii = require("ascii-table");

let table = new ascii("Commands");
table.setHeading("Command", "Load status");

module.exports = (client) => {
  readdirSync("./commands/").forEach(dir => {
    // 内层读取对应子目录下的js文件
    const commands = readdirSync(`./commands/${dir}/`).filter(file => file.endsWith(".js"));
    for (let file of commands) {
      let pull = require(`../commands/${dir}/${file}`);
      if (pull.name) {
        client.commands.set(pull.name, pull);
        table.addRow(`${dir}/${file}`, '✅');
      } else {
        table.addRow(`${dir}/${file}`, `❌  -> missing a help.name, or help.name is not a string.`);
        continue;
      }
      if (pull.aliases && Array.isArray(pull.aliases)) pull.aliases.forEach(alias => client.aliases.set(alias, pull.name));
    }
  });
  // 打印表格
  console.log(table.toString());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:06:03