按Discord.js指南开发机器人遇interaction.client.commands.get()未定义错误求助
解决
interaction.client.commands.get()未定义的问题 以下是你可能遗漏的配置或步骤:
未初始化客户端的命令集合
必须在创建Client实例后,手动给它挂载一个Collection来存储命令:const { Client, Collection } = require('discord.js'); const client = new Client({ intents: [/* 你的意图列表 */] }); // 关键:初始化commands集合 client.commands = new Collection();没有这一步,
interaction.client.commands会直接是undefined。命令文件未加载到集合中
要确保你编写了命令加载逻辑,把commands文件夹里的命令文件正确添加到client.commands集合里:const fs = require('fs'); const path = require('path'); const commandsDir = path.join(__dirname, 'commands'); const commandFiles = fs.readdirSync(commandsDir).filter(file => file.endsWith('.js')); for (const file of commandFiles) { const command = require(path.join(commandsDir, file)); // 验证命令结构后添加到集合 if ('data' in command && 'execute' in command) { client.commands.set(command.data.name, command); } }如果路径写错、文件读取失败,或者没执行这段代码,集合里就没有命令数据。
代码执行顺序错误
要保证client.commands的初始化和命令加载代码,在注册interactionCreate事件之前运行。如果先加载事件再初始化集合,事件触发时集合还不存在,就会报错。命令未同步到Discord
虽然这不会导致commands本身未定义,但如果本地命令和Discord端同步的命令不匹配,get()会返回undefined。要确认你已经执行了命令同步的步骤,把本地命令推送到Discord服务器或全局。
内容的提问来源于stack exchange,提问作者laneherby
相关产品推荐
相关产品推荐

