Discord机器人运行代码未发送MessageButton按钮无报错如何解决?
问题原因
- 你使用的第三方
discord-buttons库未正确初始化挂载到Discord客户端实例,客户端无法识别按钮组件参数 - 按钮参数传递格式错误,按钮不能直接放在消息配置的顶层
buttons字段,需要先装入MessageActionRow容器后通过components字段传递 - 如果你使用的是Discord.js v13及以上版本,
discord-buttons库已经完全废弃,和原生组件API不兼容,会导致组件无法正常渲染
修复方案
场景1:使用 Discord.js v12 + discord-buttons 库
- 先在客户端初始化代码中补充库挂载逻辑,创建client实例后添加如下代码:
require('discord-buttons')(client)
- 修改原有消息发送代码,将按钮装入动作行后传递:
const { MessageButton, MessageActionRow } = require("discord-buttons") const embed = this.client.embed() .setTitle("Are you smart") .setColor("BLUE") const yes = new MessageButton() .setStyle("green") .setLabel( 'Yes') .setID("smart") const no = new MessageButton() .setStyle("red") .setLabel("No") .setID("dumbass") // 装入动作行 const buttonRow = new MessageActionRow().addComponents(yes, no) msg.send("Hello", { components: [buttonRow], embed: embed })
场景2:使用 Discord.js v13 及以上版本
直接卸载discord-buttons第三方库,使用Discord.js原生组件API即可,修改后代码如下:
const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js') const embed = new EmbedBuilder() .setTitle("Are you smart") .setColor("Blue") const yes = new ButtonBuilder() .setStyle(ButtonStyle.Success) .setLabel('Yes') .setCustomId("smart") const no = new ButtonBuilder() .setStyle(ButtonStyle.Danger) .setLabel("No") .setCustomId("dumbass") const buttonRow = new ActionRowBuilder().addComponents(yes, no) msg.channel.send({ content: "Hello", embeds: [embed], components: [buttonRow] })
内容的提问来源于stack exchange,提问作者Krix
相关产品推荐
相关产品推荐

