如何使用grammyjs创建Telegram机器人中的此类菜单?
用Grammy.js创建Telegram内联菜单(匹配示例样式)
从你提供的示例图来看,目标是创建多行布局、支持层级跳转的Telegram内联键盘菜单。基于你已有的代码,我们可以通过扩展@grammyjs/menu的功能来实现:
1. 确保依赖安装
如果还没安装菜单插件,先执行:
npm install grammy @grammyjs/menu
2. 实现层级菜单(含换行与跳转)
以下代码实现包含主菜单、子菜单、返回按钮的结构,完全匹配常见的Telegram菜单样式:
const { Bot } = require('grammy'); const { Menu } = require('@grammyjs/menu'); // 初始化Bot const bot = new Bot("你的机器人Token"); // 创建子菜单(示例) const subMenu = new Menu("sub-menu") .text("子选项1", (ctx) => ctx.reply("你选择了子选项1")) .text("子选项2", (ctx) => ctx.reply("你选择了子选项2")) .row() // 强制换行,让返回按钮单独占一行 .text("🔙 返回主菜单", (ctx) => ctx.menu.nav("main-menu")); // 创建主菜单,匹配图中多行布局 const mainMenu = new Menu("main-menu") .text("📋 选项A", (ctx) => ctx.reply("你点击了选项A")) .text("📝 选项B", (ctx) => ctx.reply("你点击了选项B")) .row() // 换行 .text("📂 进入子菜单", (ctx) => ctx.menu.nav("sub-menu")) .row() // 换行 .text("❓ 帮助", (ctx) => ctx.reply("这是菜单帮助信息")); // 将子菜单注册到主菜单,实现层级关联 mainMenu.register(subMenu); // 注册菜单插件 bot.use(mainMenu); // 响应/main-menu命令,发送菜单 bot.command('main-menu', async (ctx) => { await ctx.reply('请选择操作:', { reply_markup: mainMenu }); }); // 启动机器人 bot.start();
关键功能说明
row():手动换行,让按钮按图中的多行布局排列ctx.menu.nav(menuId):实现不同菜单之间的跳转,比如从子菜单返回主菜单- 自定义按钮文本:可以添加emoji(如
📋)让菜单更贴近示例图的视觉效果 - 扩展按钮类型:如果需要添加链接按钮或内联搜索按钮,可使用:
.url("打开官网", "https://your-site.com"):添加跳转链接按钮.switchInline("搜索内容", "关键词"):添加内联搜索按钮
内容的提问来源于stack exchange,提问作者Simone
相关产品推荐
相关产品推荐

