You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord机器人运行代码未发送MessageButton按钮无报错如何解决?

问题原因

  • 你使用的第三方discord-buttons库未正确初始化挂载到Discord客户端实例,客户端无法识别按钮组件参数
  • 按钮参数传递格式错误,按钮不能直接放在消息配置的顶层buttons字段,需要先装入MessageActionRow容器后通过components字段传递
  • 如果你使用的是Discord.js v13及以上版本,discord-buttons库已经完全废弃,和原生组件API不兼容,会导致组件无法正常渲染

修复方案

场景1:使用 Discord.js v12 + discord-buttons 库

  1. 先在客户端初始化代码中补充库挂载逻辑,创建client实例后添加如下代码:
require('discord-buttons')(client)
  1. 修改原有消息发送代码,将按钮装入动作行后传递:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:27:02