Discord.js+Node.js:Webhook发送的按钮不显示问题求助
解决Discord Webhook按钮不显示的问题
核心修复方案
1. 确认Discord.js版本兼容性
你的代码使用了v14+专属的ActionRowBuilder、ButtonBuilder等构造类,必须确保安装的是discord.js v14或更高版本:
- 检查当前版本:
npm list discord.js - 升级到最新版:
npm install discord.js@latest
2. 修正组件的序列化方式
v14中Webhook发送组件时,部分场景下需要显式将ActionRowBuilder转换为JSON格式,修改发送逻辑:
webhookClient.send({ username: 'Cool BOT', avatarURL: 'https://i.imgur.com/AfFp7pu.png', embeds: [embed], components: [row.toJSON()] // 显式转为Discord可识别的JSON结构 });
3. 排查Webhook本身问题
- 确认Webhook链接正确有效,无拼写错误
- 确保Webhook在目标服务器拥有发送消息的权限
- 若为机器人应用创建的Webhook,需保证机器人已加入目标服务器且权限正常
完整可运行代码
const { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder, WebhookClient } = require('discord.js'); const webhookClient = new WebhookClient({ url: "你的Webhook链接" }); const embed = new EmbedBuilder() .setTitle('informations') .setColor('#FF5733'); const row = new ActionRowBuilder() .addComponents( new ButtonBuilder() .setCustomId('primary') .setLabel('Click') .setStyle(ButtonStyle.Primary) ); webhookClient.send({ username: 'Cool BOT', avatarURL: 'https://i.imgur.com/AfFp7pu.png', embeds: [embed], components: [row.toJSON()] }) .catch(err => console.error('Webhook发送失败:', err)); // 捕获错误便于排查
额外排查建议
- 运行代码后查看控制台输出,错误信息会直接提示问题根源(如权限不足、链接无效等)
- 可先移除embed,只发送按钮组件,确认是否是embed导致的冲突
内容的提问来源于stack exchange,提问作者andretva
相关产品推荐
相关产品推荐

