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

Discord.js机器人启动后无法执行命令的技术求助

Discord.js机器人命令无法执行的问题修复

核心问题排查与修复

1. 缺失消息相关权限意图(Intents)

Discord.js v14要求必须明确声明所需权限意图,当前代码仅启用Guilds,无法接收和处理消息事件。修改主文件的客户端初始化代码:

const client = new Client({ 
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages, // 允许接收服务器内消息
    GatewayIntentBits.MessageContent  // 允许读取消息内容(必须开启)
  ] 
});

同时需在Discord开发者门户的机器人页面,开启Message Content Intent权限开关。

2. 命令加载日志拼写错误

主文件中命令加载完成的日志存在拼写错误(comands→commands),修正后:

console.log(`Uploaded ${jsfile.length} commands`);

3. 命令文件逻辑与API问题

say.js:权限判断与逻辑混乱

原代码无论用户权限都会发送错误提示,且bulkDelete需要机器人具备管理消息权限,修复后:

const { EmbedBuilder } = require('discord.js');

module.exports.run = async (client, message, args) => {
  if (!message.member.permissions.has('ManageMessages')) {
    const errorEmbed = new EmbedBuilder()
      .setColor('#fc5184')
      .setTitle(`${message.author.username}, 你没有使用该命令的权限!`)
      .setAuthor({ name: message.guild.name })
      .setFooter({ text: 'Amy<3 © 2023' });
    return message.channel.send({ embeds: [errorEmbed] });
  }

  const content = args.join(' ');
  if (!content) return message.channel.send({ content: '请输入要发送的内容!' });

  try {
    await message.channel.bulkDelete(1);
    await message.channel.send({ content });
    console.log(`用户 ${message.author.username} 通过say命令发送:${content}`);
  } catch (err) {
    console.error('命令执行失败:', err);
    message.channel.send({ content: '执行命令失败,请确保我有管理消息的权限!' });
  }
};

module.exports.help = { name: "say" };

wasted.js:API失效与附件用法错误

原API已失效,更换为可用接口,同时修正头像URL参数和Embed发送方式:

const { EmbedBuilder } = require('discord.js');

module.exports.run = async (client, message, args) => {
  if (!message.mentions.users.size) {
    const avatarUrl = message.author.avatarURL({ extension: 'png', forceStatic: true });
    const imageLink = `https://api.popcat.xyz/wasted?image=${encodeURIComponent(avatarUrl)}`;
    
    const embed = new EmbedBuilder()
      .setTitle(`${message.author.username} Wasted!`)
      .setImage(imageLink)
      .setFooter({ text: 'Amy<3 © 2023' });
    return message.channel.send({ embeds: [embed] });
  }

  const embeds = message.mentions.users.map(user => {
    const avatarUrl = user.avatarURL({ extension: 'png', forceStatic: true });
    const imageLink = `https://api.popcat.xyz/wasted?image=${encodeURIComponent(avatarUrl)}`;
    
    return new EmbedBuilder()
      .setTitle(`${user.username} Wasted!`)
      .setImage(imageLink)
      .setFooter({ text: 'Amy<3 © 2023' });
  });

  message.channel.send({ embeds });
};

module.exports.help = { name: "wasted" };

hi.js与ping.js:统一Discord.js v14发送格式

将旧的发送语法改为v14要求的对象形式:

  • hi.js修改发送代码:
message.channel.send({ embeds: [exampleEmbed] });
  • ping.js修改发送代码:
message.channel.send({ content: `Ping: ${timeTaken}ms` });

4. 统一命令函数参数

确保所有命令的run函数参数数量一致,统一为:

module.exports.run = async (client, message, args) => { ... }

修复验证

  1. 重启机器人,检查控制台是否输出正确的命令数量。
  2. 在服务器发送带前缀的命令(如!hi、!ping),确认机器人正常响应。
  3. 测试!say命令时,确保机器人和执行用户均有管理消息权限。

内容的提问来源于stack exchange,提问作者Mihail Gavrilenko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:24:55