使用Discord机器人为Webhook消息添加Paid/Denied按钮失败求助
问题分析与修复方案
你的代码存在几个关键错误,直接导致按钮无法显示,逐一修正即可解决:
1. 事件名大小写错误
Discord.js 的消息创建事件是驼峰命名的 messageCreate,不是全小写的 messagecreate,事件名不匹配会让这段代码根本不会触发。
2. ButtonStyle 枚举拼写错误
ButtonStyle.Succes 拼写错误,正确写法是 ButtonStyle.Success(多了一个字母s),拼写错误会导致按钮样式无效,进而无法被渲染。
3. 缺失必要的组件导入(核心前提)
如果使用的是 Discord.js v14 及以上版本,必须显式导入所需的组件类,否则代码会因找不到构造函数而报错。
修复后的完整代码
// 先导入Discord.js的相关组件(以CommonJS导入为例,根据你的项目环境调整) const { Client, ButtonBuilder, ButtonStyle, ActionRowBuilder } = require('discord.js'); const client = new Client({ intents: [/* 需开启必要意图,比如Guilds、GuildMessages、MessageContent */] }); client.on('messageCreate', (message) => { if (message.author.bot) { const expenseSuccess = new ButtonBuilder() .setLabel('Paid') .setStyle(ButtonStyle.Success) // 修正拼写错误 .setCustomId('expenseSuccess'); const expenseFail = new ButtonBuilder() .setLabel('Denied') .setStyle(ButtonStyle.Danger) .setCustomId('expenseFail'); const buttonRow = new ActionRowBuilder().addComponents(expenseSuccess, expenseFail); message.reply({ content: 'Please Select...', components: [buttonRow] }); } }); // 记得登录你的Bot client.login('你的Bot令牌');
额外注意事项
- 确保你的 Bot 开启了
MessageContent意图(若需要读取消息内容),否则可能无法触发事件。 - 确认使用的是 Discord.js v14 及以上版本,
ButtonBuilder这类组件是v14版本才引入的,旧版本写法完全不同。
内容的提问来源于stack exchange,提问作者John Brinken
相关产品推荐
相关产品推荐

