如何实现支持子文件夹与分类的机器人动态帮助命令?
机器人动态分类帮助命令实现方案
默认你的项目已按「单个分类对应一个子文件夹」的规则存放命令文件,具体实现逻辑如下:
1. 对齐项目目录结构
命令根目录(例如命名为commands/)下的一级子文件夹直接对应分类名,子文件夹内存放该分类下的所有命令文件,示例结构:
commands/ ├── Cat1/ │ ├── 命令1.js │ └── 命令2.js ├── Cat2/ │ ├── 命令3.js │ └── 命令4.js └── Cat3/ └── 命令5.js
2. 启动时预构建分类-命令映射
机器人启动阶段一次性遍历命令根目录:
- 先读取根目录下所有一级子文件夹的名称,作为可用分类列表
- 再逐个遍历每个子文件夹内的命令文件,提取命令的名称、描述、用法等元信息,按分类存入全局映射对象,示例结构(各语言逻辑通用):
const commandMap = { "Cat1": [ { name: "!签到", desc: "每日领取积分", usage: "!签到" }, { name: "!查积分", desc: "查询当前账户积分", usage: "!查积分 [@用户可选]" } ], "Cat2": [ { name: "!禁言", desc: "封禁指定用户发言权限", usage: "!禁言 @用户 时长" }, { name: "!踢人", desc: "将指定用户移出群聊", usage: "!踢人 @用户" } ], "Cat3": [/* 对应分类的命令信息 */] }
3. 处理无参数的!help指令
当用户输入不带任何参数的!help时,直接提取commandMap的所有键值作为分类列表,按要求格式返回:
请选择要查看命令的分类:
Cat1
Cat2
Cat3
4. 处理带分类的查询请求
你可以选择两种交互逻辑任选一种,也可以同时支持:
- 二次输入交互:监听用户在
!help触发后的后续输入,判断输入内容是否在commandMap的键列表中,匹配到就返回对应分类下的所有命令格式化结果,匹配失败返回「分类不存在,请输入正确的分类名」 - 直接参数触发:支持用户直接输入
!help 分类名(例如!help Cat2),按同样的匹配逻辑返回结果即可
可选优化
- 增加分类别名映射,兼容用户大小写输入、缩写输入的场景,例如输入
cat2、管理都可以匹配到Cat2分类 - 可配置隐藏分类,部分内部命令分类不展示在初始分类列表中,仅当用户精准输入分类名时才返回对应命令
内容的提问来源于stack exchange,提问作者QuazArxx
相关产品推荐
相关产品推荐

