Files
command-server/command/builtin.go
zhilv e8c641414e feat(core): 初始化 Bot 命令处理服务器
- 基于 Gin 框架搭建 HTTP 服务,接收并处理 Bot 命令请求
- 实现插件化命令系统,支持通过 Plugin 接口扩展新命令
- 内置菜单、启用/禁用、时间查询等基础命令
- 新增图片生成插件,对接 OpenAI Images API
- 支持管理员权限控制、命令动态启禁用
- 提供完整配置管理(.env)与 Docker 部署方案
2026-05-05 13:41:44 +08:00

93 lines
2.0 KiB
Go

package command
import (
"fmt"
"strings"
"time"
)
// RegisterBuiltinCommands 注册内置命令
func RegisterBuiltinCommands() {
// 菜单
Register(Command{
Name: "菜单",
Description: "显示所有可用命令",
Usage: "菜单",
Handler: handleMenu,
})
// 启用(管理员)
Register(Command{
Name: "启用",
Description: "启用指定命令",
Usage: "启用 <命令名>",
Handler: handleEnable,
AdminOnly: true,
})
// 禁用(管理员)
Register(Command{
Name: "禁用",
Description: "禁用指定命令",
Usage: "禁用 <命令名>",
Handler: handleDisable,
AdminOnly: true,
})
// 时间
Register(Command{
Name: "时间",
Description: "查询当前时间",
Usage: "时间",
Handler: func(req *Req) Resp {
return Resp{Reply: "当前时间是: " + time.Now().Format("2006-01-02 15:04:05")}
},
})
}
func handleMenu(req *Req) Resp {
var sb strings.Builder
sb.WriteString("可用命令列表:\n\n")
for _, cmd := range AllCommands() {
status := "✅"
if !cmd.Enabled {
status = "❌"
}
adminTag := ""
if cmd.AdminOnly {
adminTag = " [管理员]"
}
sb.WriteString(fmt.Sprintf("%s %s%s — %s\n", status, cmd.Name, adminTag, cmd.Description))
sb.WriteString(fmt.Sprintf(" 用法:%s\n\n", cmd.Usage))
}
return Resp{Reply: strings.TrimSpace(sb.String())}
}
func handleEnable(req *Req) Resp {
name := strings.TrimSpace(req.Content)
if name == "" {
return Resp{Reply: "请指定要启用的命令,例如:启用 生图"}
}
if err := Toggle(name, true); err != nil {
return Resp{Reply: err.Error()}
}
return Resp{Reply: fmt.Sprintf("已启用命令\"%s\"", name)}
}
func handleDisable(req *Req) Resp {
name := strings.TrimSpace(req.Content)
if name == "" {
return Resp{Reply: "请指定要禁用的命令,例如:禁用 问候"}
}
if err := Toggle(name, false); err != nil {
return Resp{Reply: err.Error()}
}
return Resp{Reply: fmt.Sprintf("已禁用命令\"%s\"", name)}
}