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

升级至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
  }
}

额外检查项

  1. 确认config.json中已配置token,并在index.js中正确导入:
const { PREFIX, token } = require("./config.json");
  1. 确保机器人在服务器中拥有读取消息、发送消息、嵌入链接等必要权限
  2. 检查所有命令文件的导出结构是否正确,必须包含name和execute属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:54:54