Appearance
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")链接跳转(LINK)
用户点击后,在浏览器中打开指定链接:
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_MESSAGE和LINK两种类型
API 参考
Menu
菜单配置:
| 方法 | 说明 |
|---|---|
Menu.of(items) | 创建菜单配置 |
MenuItem
菜单项,通过静态工厂方法创建:
| 方法 | 说明 |
|---|---|
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
子菜单项:
| 方法 | 说明 |
|---|---|
SubMenuItem.sendMessage(name, content) | 发送消息类型 |
SubMenuItem.link(name, url) | 链接跳转类型 |
参数说明:
name:按钮名称,最多 14 个字符(约 7 个中文汉字)content:发送的内容url:跳转链接
MenuItemType
菜单项类型枚举:
| 枚举 | 说明 |
|---|---|
SWITCH | 开关 |
SEND_MESSAGE | 发送消息 |
LINK | 链接跳转 |
MENU | 子菜单 |
SubMenuItemType
子菜单项类型枚举:
| 枚举 | 说明 |
|---|---|
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());
}
}
}