升级至discord.js v14后机器人无命令响应问题求助
Discord.js v14 机器人不响应命令的修复方案
直接原因:未触发命令执行逻辑
你的index.js中,messageCreate事件处理流程里,找到匹配的命令后没有调用命令的execute方法,导致命令永远不会被执行。
在冷却判断代码块的末尾,添加命令执行逻辑:
// 更新冷却时间戳 timestamps.set(message.author.id, now); setTimeout(() => timestamps.delete(message.author.id), cooldownAmount); // 执行目标命令 try { command.execute(message, args); } catch (err) { console.error(err); message.reply('执行命令时出现错误'); }
适配v14的API变更
discord.js v14废弃了v12的hasPermission()方法,需要使用新的权限判断API,同时发送Embed的语法也有调整。以你的kick命令为例,修改如下:
const { MessageEmbed, PermissionsBitField } = require("discord.js"); module.exports = { name: "kick", description: "kicks a member", execute: async (message , args) => { // 替换原权限判断逻辑 if (!message.member.permissions.has(PermissionsBitField.Flags.KickMembers)) { return message.channel.send("权限不足"); } let member = message.mentions.members.first() if(!member) return message.reply("请提及服务器内的有效成员"); if(!member.kickable) return message.reply("我无法踢出该用户!对方角色是否比我高?我是否拥有踢人权限?"); let reason = args.slice(1).join(' '); if(!reason) reason = "无理由"; await member.kick(reason) .catch(error => message.reply(`抱歉${message.author},我无法执行踢出操作:${error}`)); let kickembed = new MessageEmbed() .setTitle(`✅ ${member.user.tag} 已被踢出`) .setFooter(`操作人:${message.author.tag}`) .setColor('77B255') .setTimestamp(); message.channel.send({ embeds: [kickembed] }); // v14要求用embeds数组传递Embed } }
额外检查项
- 确认
config.json中已配置token,并在index.js中正确导入:
const { PREFIX, token } = require("./config.json");
- 确保机器人在服务器中拥有读取消息、发送消息、嵌入链接等必要权限
- 检查所有命令文件的导出结构是否正确,必须包含
name和execute属性
内容的提问来源于stack exchange,提问作者peter 23
相关产品推荐
相关产品推荐

