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) => { ... }
修复验证
- 重启机器人,检查控制台是否输出正确的命令数量。
- 在服务器发送带前缀的命令(如
!hi、!ping),确认机器人正常响应。 - 测试
!say命令时,确保机器人和执行用户均有管理消息权限。
内容的提问来源于stack exchange,提问作者Mihail Gavrilenko
相关产品推荐
相关产品推荐

