Skip to content

键盘与按钮

快捷工厂

java
import cn.org.bukkit.bngeuit.dto.message.*;

// 回调按钮:点击通知后台(触发 INTERACTION_CREATE 事件)
Button.callback("btn1", "确认", ButtonStyle.BLUE, "/confirm");

// 跳转按钮:点击打开 URL
Button.link("btn2", "官网", ButtonStyle.GRAY, "https://qq.com");

// 指令按钮:点击自动输入 @bot 指令
Button.command("btn3", "帮助", ButtonStyle.BLUE, "帮助");

ButtonStyle

枚举值数值说明
GRAY0灰线框
BLUE1蓝线框
WHITE2白字
BLUE_BG3蓝底白字

ButtonActionType

枚举值数值说明
JUMP0跳转按钮:打开 http 链接或小程序
CALLBACK1回调按钮:触发互动事件,data 传给后台
COMMAND2指令按钮:自动在输入框插入 @bot data

完整 Builder

java
Button btn = new Button.Builder("btn_id", "按钮文字", ButtonStyle.BLUE,
        ButtonActionType.CALLBACK, "/data")
    .visitedLabel("已点击")
    .permission(Permission.specify(List.of("openid1", "openid2")))
    .unsupportTips("请升级客户端")
    .enter(true)
    .reply(true)
    .build();

构建键盘

java
import cn.org.bukkit.bngeuit.Bngeuit;
import cn.org.bukkit.bngeuit.dto.message.Keyboard;
import cn.org.bukkit.bngeuit.dto.message.Button;

Keyboard kb = Keyboard.custom()
    .addRow(r -> r
        .addButton(Button.callback("ok", "确认", ButtonStyle.BLUE, "/confirm"))
        .addButton(Button.callback("cancel", "取消", ButtonStyle.GRAY, "/cancel"))
    )
    .addRow(r -> r
        .addButton(Button.link("home", "官网", ButtonStyle.GRAY, "https://qq.com"))
    )
    .build();

// 附带键盘发送(键盘只能挂载 Markdown 消息,文本会被自动转 Markdown)
Bngeuit.sendGroupText(groupOpenid, msgSeq, "请选择操作:", kb);
Bngeuit.sendGroupMarkdown(groupOpenid, msgSeq, "**请选择:**", kb);

模板键盘:

java
Keyboard kb = Keyboard.template("1070001");

处理按钮点击

java
import cn.org.bukkit.bngeuit.Bngeuit;
import cn.org.bukkit.bngeuit.core.BotApi;
import cn.org.bukkit.bngeuit.event.SubscribeEvent;
import cn.org.bukkit.bngeuit.event.receive.InteractionEvent;

@SubscribeEvent
public void onInteraction(InteractionEvent e) {
    // 必须响应,否则客户端一直 loading
    Bngeuit.respondInteraction(e.getId(),
        BotApi.InteractionResponseCode.SUCCESS);

    // 按钮回调数据在 button_data 中
    if ("/confirm".equals(e.getButtonData())) {
        Bngeuit.sendGroupText(e.getGroupOpenid(), 1, "操作已确认!");
    }
}

InteractionEvent 位置

InteractionEvent 位于 cn.org.bukkit.bngeuit.event.receive 包。按钮数据用 getButtonData() 获取(旧文档中的 getData() 不存在)。

权限控制

java
// 所有人可见(默认)
Permission.ALL;

// 仅指定用户可见
Permission.specify(List.of("openid1", "openid2"));

PermissionType

Permission.type 字段使用 PermissionType 枚举:

枚举值数值说明
SPECIFY_USER0仅指定用户可见
ADMIN1仅管理员可见
ALL2所有人可见