Skip to content

键盘与按钮 ​

快捷工厂 ​

java
import cn.org.bukkit.bngeuit.dto.message.keyboard.Button;
import cn.org.bukkit.bngeuit.dto.message.keyboard.ButtonStyle;

// 回调按钮:点击通知后台(触发 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

更多按钮参数 ​

需要设置已点击文字、可用权限、低版本提示等参数时:

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.Button;
import cn.org.bukkit.bngeuit.dto.message.keyboard.ButtonStyle;
import cn.org.bukkit.bngeuit.dto.message.keyboard.Keyboard;

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, "请选择操作:", kb);
Bngeuit.sendGroupMarkdown(groupOpenid, "**请选择:**", kb);

模板键盘:

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

处理按钮点击 ​

java
import cn.org.bukkit.bngeuit.Bngeuit;
import cn.org.bukkit.bngeuit.dto.message.interaction.InteractionResponseCode;
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(),
        InteractionResponseCode.SUCCESS);

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

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所有人可见