Skip to content

C2C 自定义菜单

概述

C2C 自定义菜单是用户在单聊场景下与机器人交互的快捷入口。设置后对所有用户生效,显示在聊天窗口底部。

场景限制

自定义菜单仅支持 C2C(单聊) 场景,不支持群聊。

快速上手

设置菜单

java
import cn.org.bukkit.bngeuit.Bngeuit;
import cn.org.bukkit.bngeuit.dto.message.menu.*;
import java.util.List;

Bngeuit.updateMenu(Menu.of(List.of(
    MenuItem.sendMessage("帮助", "/help"),
    MenuItem.sendMessage("查询", "/query"),
    MenuItem.link("官网", "https://example.com"),
    MenuItem.menu("更多", List.of(
        SubMenuItem.sendMessage("关于", "/about"),
        SubMenuItem.link("反馈", "https://example.com/feedback")
    ))
)));

查询当前菜单

java
MenuResponse resp = Bngeuit.getMenu();
if (resp.menu() != null && resp.menu().items() != null) {
    for (MenuItem item : resp.menu().items()) {
        System.out.println(item.name() + " - " + item.type());
    }
}

菜单项类型

发送消息(SEND_MESSAGE)

用户点击后,内容会自动填入聊天输入框并发送:

java
MenuItem.sendMessage("帮助", "/help")
MenuItem.sendMessage("签到", "/sign")

用户点击后,在浏览器中打开指定链接:

java
MenuItem.link("官网", "https://example.com")
MenuItem.link("文档", "https://docs.example.com")

链接要求

链接必须以 https:// 开头。

开关(SWITCH)

用户点击后切换开/关状态,适合用于功能开关:

java
MenuItem.switchItem("通知", "notify_switch", true)  // 默认开启
MenuItem.switchItem("静音", "mute_switch", false)    // 默认关闭

子菜单(MENU)

折叠式菜单,点击展开子项:

java
MenuItem.menu("更多功能", List.of(
    SubMenuItem.sendMessage("功能A", "/func_a"),
    SubMenuItem.sendMessage("功能B", "/func_b"),
    SubMenuItem.link("帮助文档", "https://help.example.com")
))

子菜单限制

  • 子菜单最多 5 个
  • 子菜单不支持再嵌套
  • 子菜单仅支持 SEND_MESSAGELINK 两种类型

API 参考

菜单配置:

方法说明
Menu.of(items)创建菜单配置

菜单项,通过静态工厂方法创建:

方法说明
MenuItem.sendMessage(name, content)发送消息类型
MenuItem.link(name, url)链接跳转类型
MenuItem.switchItem(name, switchId, defaultState)开关类型
MenuItem.menu(name, subMenuItems)子菜单类型

参数说明:

  • name:按钮名称,最多 10 个字符(中文算 2 个字符)
  • content:发送的内容
  • url:跳转链接(必须 https:// 开头)
  • switchId:开关唯一标识
  • defaultState:开关初始状态
  • subMenuItems:子菜单列表,最多 5 个

子菜单项:

方法说明
SubMenuItem.sendMessage(name, content)发送消息类型
SubMenuItem.link(name, url)链接跳转类型

参数说明:

  • name:按钮名称,最多 14 个字符(约 7 个中文汉字)
  • content:发送的内容
  • url:跳转链接

菜单项类型枚举:

枚举说明
SWITCH开关
SEND_MESSAGE发送消息
LINK链接跳转
MENU子菜单

子菜单项类型枚举:

枚举说明
SEND_MESSAGE发送消息
LINK链接跳转

完整示例

java
import cn.org.bukkit.bngeuit.Bngeuit;
import cn.org.bukkit.bngeuit.dto.message.menu.*;
import java.util.List;

public class MenuExample {
    
    public static void setupMenu() {
        Menu menu = Menu.of(List.of(
            // 基础功能
            MenuItem.sendMessage("帮助", "/help"),
            MenuItem.sendMessage("签到", "/sign"),
            
            // 外部链接
            MenuItem.link("官网", "https://example.com"),
            MenuItem.link("文档", "https://docs.example.com"),
            
            // 功能开关
            MenuItem.switchItem("消息通知", "notify", true),
            
            // 折叠菜单
            MenuItem.menu("更多", List.of(
                SubMenuItem.sendMessage("关于", "/about"),
                SubMenuItem.sendMessage("设置", "/settings"),
                SubMenuItem.link("反馈", "https://feedback.example.com")
            ))
        ));
        
        Bngeuit.updateMenu(menu);
    }
    
    public static void printCurrentMenu() {
        MenuResponse resp = Bngeuit.getMenu();
        if (resp.menu() == null || resp.menu().items() == null) {
            System.out.println("未设置菜单");
            return;
        }
        
        for (MenuItem item : resp.menu().items()) {
            System.out.printf("%-10s [%s]%n", item.name(), item.type());
        }
    }
}