
本文详解如何使用 discord.js v14 正确实现:当机器人被邀请加入新服务器时,自动在首个可用文本频道中发送格式化 embed 消息,并指出常见兼容性错误及修复方法。
在 discord.js v14 中,许多核心 API 已发生重大变更,若沿用 v13 或更早版本的写法(如 MessageEmbed、channel.type === 'text'、guild.me 等),将导致事件静默失败——例如 guildCreate 回调执行但无任何消息发出,控制台也无报错。这正是你遇到“机器人启动正常,却从不发送欢迎 Embed”的根本原因。
以下是完整、可直接运行的 v14 兼容方案:
const {
ChannelType,
Client,
EmbedBuilder,
GatewayIntentBits,
Partials
} = require('discord.js');
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.GuildMembers,
GatewayIntentBits.MessageContent,
GatewayIntentBits.GuildPresences
],
partials: [Partials.Channel] // 确保频道缓存更可靠(尤其对新加入的 guild)
});
client.once('ready', () => {
console.log(`✅ Bot logged in as ${client.user.tag}`);
});
client.on('guildCreate', async (guild) => {
// 查找第一个具备发送权限的 GuildText 频道
const channel = guild.channels.cache.find(ch =>
ch.type === ChannelType.GuildText &&
ch.permissionsFor(guild.members.me)?.has('SendMessages') === true
);
if (!channel) {
console.warn(`⚠️ No suitable text channel found in guild: ${guild.name} (${guild.id})`);
return;
}
try {
const welcomeEmbed = new EmbedBuilder()
.setColor(0xF99CF8)
.setTitle('**✨ 欢迎加入!**')
.setAuthor({ name: 'Bot Name', iconURL: 'https://i.imgur.com/N4...' })
.setThumbnail('https://i.imgur.com/N4...') // 建议使用有效 URL
.setDescription('感谢邀请我加入本服务器!输入 `/help` 查看可用命令。')
.setTimestamp()
.setFooter({ text: `ID: ${guild.id}` });
await channel.send({ embeds: [welcomeEmbed] });
console.log(`? Welcome embed sent to ${guild.name} → #${channel.name}`);
} catch (error) {
console.error(`❌ Failed to send welcome embed to ${guild.name}:`, error);
}
});
// ⚠️ 注意:务必启用 "Server Members Intent" 和 "Message Content Intent"
// 在 Discord Developer Portal → Bot 页面中手动开启对应开关
client.login(process.env.DISCORD_TOKEN || require('./config.json').token);关键变更与注意事项:
- ✅ 类名更新:MessageEmbed → EmbedBuilder(必须使用 new EmbedBuilder());
- ✅ 频道类型校验:使用 ChannelType.GuildText 枚举值,而非字符串 'text';
- ✅ 成员权限获取:guild.me → guild.members.me(需确保 GuildMembers intent 已启用);
- ✅ 权限命名规范:'SEND_MESSAGES' → 'SendMessages'(PascalCase 格式);
- ✅ 健壮性增强:添加 try/catch、日志反馈与空频道兜底处理,便于调试;
- ✅ 必要 Partial 支持:添加 Partials.Channel 提升频道缓存可靠性(尤其新加入服务器时);
- ? 权限前提:Bot 必须在 Discord 开发者后台启用 Server Members Intent 和 Message Content Intent(若需读取消息内容),否则 guild.members.me 可能为 null。
最后提醒:首次部署前,请确认你的 bot token 安全存储(推荐使用环境变量),并测试邀请至测试服务器验证全流程。Embed 内容建议替换为实际品牌文案与有效图片链接,以提升用户体验与专业度。










