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 中的函数的主要内容,如果未能解决你的问题,请参考以下文章