Discord.js:commands.map 不是 ApplicationCommandManager.set 中的函数

Posted

技术标签:

【中文标题】Discord.js:commands.map 不是 ApplicationCommandManager.set 中的函数【英文标题】:Discord.js : commands.map is not a function at ApplicationCommandManager.set 【发布时间】:2022-01-08 03:18:01 【问题描述】:

我在尝试为我的机器人设置命令时遇到 TypeError。 尝试使用 commands.set 时会发生这种情况

function setCommands(): void 
  var slashCommandFiles = fs.readdirSync('./commands').filter((file: string) => (file.endsWith('.js') && !forbiddenCommands.includes(file.slice(0, -3))));
  for (const file of slashCommandFiles) 
    const command = require(`./commands/$file`);
    slashCommands.push(command.data.toJSON());
    if (client.application)
      client.application.commands.set(command.data.name, command); //happens here
    else 
      console.error(client);
      throw new Error("Unable to load the commands");
    
  

错误信息如下:

C:\Overbot\node_modules\discord.js\src\managers\ApplicationCommandManager.js:147
      data: commands.map(c => this.constructor.transformCommand(c)),
                     ^

TypeError: commands.map is not a function
    at ApplicationCommandManager.set (C:\Overbot\node_modules\discord.js\src\managers\ApplicationCommandManager.js:147:22)
    at setCommands (C:\Overbot\index.js:68:41)
    at C:\Overbot\index.js:108:17
    at step (C:\Overbot\index.js:34:23)
    at Object.next (C:\Overbot\index.js:15:53)
    at C:\Overbot\index.js:9:71
    at new Promise (<anonymous>)
    at __awaiter (C:\Overbot\index.js:5:12)
    at Client.<anonymous> (C:\Overbot\index.js:98:43)
    at Object.onceWrapper (node:events:514:26)

问题是,它绝对是一个确实存在的函数,因为我验证了代码并发现它没有问题。 我也不认为这是一个分号恶作剧,因为我已经在各处测试了分号和不分号,结果相同。

我有什么办法可以完成这项工作吗?

【问题讨论】:

【参考方案1】:

这不是您设置命令的方式。改用这个:

client.application.commands.set(slashCommands) 
//I assume slashCommands is an array of ApplicationCommandData, according to your code

【讨论】:

有效!上面的代码是我开始转换为 TypeScript 之前的代码,我很想知道是什么修改使它不再工作...... @RockRom 这可能是您在命令处理程序中设置client.commands 的方式,但client.application.commands.set() 采用不同的参数 Client.application.commands.set

以上是关于Discord.js:commands.map 不是 ApplicationCommandManager.set 中的函数的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js 不发送消息(无错误)

Discord.js 关于消息命令不起作用

Discord Bot 不播放音频 discord.js v13

Discord.js 不检查参数是不是存在

Discord.js 类型/声明扩展不起作用

Discord.js 机器人命令不起作用。怎么解决?