Discord.js中Embed发送无输出且无报错问题求助
问题诊断与修复方案
核心问题分析
你的代码存在3个关键问题,导致!testcmd命令无响应:
- 缺失消息内容读取权限:Discord.js v14中,读取消息内容需要额外的
MessageContent特权意图,且必须在Discord开发者门户手动启用,同时在代码的intents数组中声明。当前代码仅添加了Guilds和GuildMessages,无法读取消息内容,无法触发命令判断逻辑。 - Embed颜色值格式错误:
setColor(FF0000)中的FF0000未加引号或前缀,会被JavaScript视为未定义变量,执行到此处会静默失败。正确格式应为带#的字符串('#FF0000')或十六进制数值(0xFF0000)。 - v14发送Embed语法错误:Discord.js v14要求发送Embed时,需将实例放入
embeds数组中,直接传递实例的写法已废弃。
修复后的完整代码
const { Client, GatewayIntentBits, EmbedBuilder } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent // 新增消息内容读取意图 ] }); client.on('ready', async () => { console.log(`${client.user.username} is ready!`); }) client.on('guildCreate', (g) => { const channel = g.channels.cache.find(channel => channel.type === 'GUILD_TEXT' && channel.permissionsFor(g.me).has('SEND_MESSAGES')); if (channel) { // 增加频道存在性判断,避免报错 channel.send("Thanks for inviting flappy dank! Please run the command !run to get started!"); } }) client.on("messageCreate", async (message) => { if (message.author.bot) return; // 过滤机器人自身消息,避免循环触发 if (message.content === '!testcmd') { try { const illla = new EmbedBuilder() .setColor('#FF0000') // 修正颜色值格式 .setTitle('Members Generator 2.0!') .setDescription('testing testing 123 123') .setTimestamp() .setFooter({ text: 'wow a footer'}); await message.channel.send({ embeds: [illla] }); // 使用v14正确的Embed发送语法 } catch (err) { console.error('发送消息出错:', err); // 添加错误捕获,方便排查问题 } } }) // 必须添加Bot登录代码,替换为你的Bot令牌 client.login('你的Bot令牌');
额外配置步骤
- 打开Discord开发者门户,进入你的Bot应用页面
- 切换到「Bot」标签页,找到「Privileged Gateway Intents」区域
- 开启「Message Content Intent」权限
- 重新邀请Bot到服务器(确保邀请链接包含
bot和applications.commands权限)
内容的提问来源于stack exchange,提问作者abcd efgh
相关产品推荐
相关产品推荐

