使用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
相关产品推荐
相关产品推荐

