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

使用Discord.Net发送带按钮消息的实现方法及示例咨询

Discord.Net 发送带按钮消息的实现示例

注:以下实现仅适用于Discord.Net与Discord.Net-Labs合并后的v3.9及以上稳定版本,无需额外安装Discord.Net-Labs依赖包

1. 构建按钮组件

按钮属于消息组件的一种,需要通过ComponentBuilder和ButtonBuilder构造:

// 初始化组件构造器
var componentBuilder = new ComponentBuilder();

// 示例1:构建交互按钮(点击后触发交互事件)
var confirmButton = new ButtonBuilder()
    .WithLabel("确认操作")
    .WithStyle(ButtonStyle.Primary) // 按钮样式可选:Primary(蓝)/Secondary(灰)/Success(绿)/Danger(红)/Link(链接)
    .WithCustomId("btn_confirm_001") // 自定义ID,用于后续识别点击的按钮,非链接按钮必填
    .WithDisabled(false); // 可选参数,设置按钮是否禁用

// 示例2:构建链接按钮(点击后跳转指定链接,不触发交互事件)
var linkButton = new ButtonBuilder()
    .WithLabel("查看详情")
    .WithStyle(ButtonStyle.Link)
    .WithUrl("你的跳转链接地址"); // 链接按钮必填,无需设置CustomId

// 将按钮添加到组件构造器,同一行最多放5个按钮,换行可指定row参数,第二行设为row:1即可
componentBuilder.WithButton(confirmButton);
componentBuilder.WithButton(linkButton);

// 构建最终可使用的消息组件对象
var builtComponents = componentBuilder.Build();

2. 发送带按钮的消息

构造好组件后,在发消息时传入组件参数即可:

// 场景1:在当前频道主动发送带按钮的消息
await Context.Channel.SendMessageAsync(
    text: "请选择你要执行的操作:",
    components: builtComponents
);

// 场景2:给已发送的消息添加按钮
await targetMessage.ModifyAsync(msg => 
{
    msg.Components = builtComponents;
});

3. 处理按钮点击交互

需要提前在Discord客户端实例上注册交互事件监听:

// 注册交互事件回调
_discordClient.InteractionCreated += async (interaction) =>
{
    // 筛选按钮点击类的交互
    if (interaction is IComponentInteraction buttonInteraction)
    {
        // 匹配按钮的自定义ID
        if (buttonInteraction.Data.CustomId == "btn_confirm_001")
        {
            // 响应用户点击,ephemeral设为true时响应内容仅点击用户可见
            await buttonInteraction.RespondAsync("操作已确认", ephemeral: true);
        }
    }
};

常见问题说明

  • 按钮的CustomId最大支持100字符,不要传入过长内容
  • 如果需要添加更多按钮,可通过指定WithButton的row参数分配到不同行,最多支持5行按钮
  • 链接按钮不会触发交互事件,无需配置CustomId

内容的提问来源于stack exchange,提问作者Pixelated Lagg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:27:03